개요 목적
이번 글에서는 데이터 베이스 구성 요소에 대한 용어 설명과
PK와 FK와 중심으로 데이터를 구별해주는 데이터베이스 키에 대해서 알아본다.
엔티티, 릴레이션, 속성, 도메인
엔티티
엔티티는 비지니스 서비스의 요구에 맞춰 여러 개의 속성을 지닌 명사이다. 예를 들어, 게임 서비스에서 가입자를 나타내기 위해 아이디, 비밀번호, 이름, 생년월일, 별명의 속성을 지닌 회원 엔티티를 만들 수 있다.
릴레이션
위에서 만든 엔티티가 데이터베이스에서 관리될 때 릴레이션이라는 단위로 변화한다. 릴레이션이란, 데이터베이스에서 정보를 구분하여 저장하는 가장 기본 단위이다.
릴레이션은 관계형 데이터베이스에서는 테이블이라고 하고, NoSQL에서는 컬랙션이라고 한다.
예를 들어, 관계형 데이터 베이스 회원 테이블(릴레이션)에 실제 개별적 회원 데이터들이 저장된다.
- MySQL(관계형 데이터 베이스)의 구조는 레코드 - 테이블 - 데이터베이스로 이루어진다.
- NoSQL 대표 MongoDB는 도큐먼트 - 컬렉션 - 데이터베이스로 이루어져 있다.
- NoSQL의 Redis는 도큐먼트 대신에 다양한 String, Set, Sorted Set, Hash, List 데이터 형식을 사용한다.
속성
릴레이션에서 관리하는 구체적이고 고유한 이름을 갖는 정보를 의미한다.
예를 들어, 차 엔티티의 속성에는 차 번호, 차 색, 차 종 등이 있다.
도메인
릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합을 의미한다.
예를 들어, 차 엔티티의 차 색 속성의 도메인에는 {빨강, 노랑, 파랑}이 있다.
키
키는 데이터베이스에서 조건에 맞는 행 데이터를 찾거나, 순서대로 정렬할 때 다른 행과 구별할 수 있는 유일한 기준이 되는 속성이다.
기본 키(PK)
데이터 테이블에서 유일하게 구분되는 Data-Key를 기본 키라고 한다. 데이터 베이스에서 기본키는 릴레이션(테이블)에서 특정 튜플(행)을 식별할 때 사용하는 속성(열의 대표) 혹은 속성의 집합이다. 키가 되는 속성은 행 마다 값이 달라서, 튜플들을 구분할 수 있어야 한다. 기본키는 다른 테이블의 외래키와 연결되어 관계를 생성한다.
기본키의 속성
- 값의 중복이 없어야 한다.
- NULL 값을 가질 수 없다.
기본키의 종류
- 자연 키 - 사람을 구별할 때 주민 번호 같은 유일하지만, 인위적으로 만들지 않은 기본키이다.
- 인조 키 - 데이터 구별을 위해 인위적으로 만든 키이다. 인위적으로 생성한 키이기 때문에, 변하지 않는다는 영구성을 가지고 있어서, 더 선호 된다.
외래 키(FK)
외래 키는 다른 테이블의 기본키를 참조한 키를 말한다. 외래키의 다른 테이블 기본키 참조를 통해서, 관계형 데이터 베이스의 관계를 표현한다. 기본키와 다르게 중복된 값과, NULL값이 허용된다.
후보키
후보키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키이다.
- 유일성 : 하나의 키 값으로 튜플을 유일하게 식별할 수 있는 성질
사람의 속성 중에, 주민번호는 유일성을 가지지만, 혈액형은 유일성은 가지지 못한다.
- 최소성 : 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질
키 (주민번호, 이름, 나이)가 있으면 데이터들을 확실히 구분할 수 있지만, 주민번호만 있어도 데이터를 구분하기에 충분하다. 최소성을 만족하는 키를 만들려면 키(주민번호, 이름, 나이)에서이름 나이를 빼면 된다.
대체키
대체키는 후보키가 두 개 이상일 경우 하나를 기본키로 지정하고 남은 후보키를 말한다.
슈퍼키
슈퍼키는 유일성은 만족하지만, 최소성은 만족시키지 못하는 키이다.
위에서 말한 키(주민번호, 이름, 혈액형)이 슈퍼키가 될 수 있다.
Reference
https://kosaf04pyh.tistory.com/201
'Web Sever 개발과 CS 기초 > DB 지식' 카테고리의 다른 글
정규화(1,2,3,BNCF) 쉽게 이해하기 (0) | 2022.10.01 |
---|---|
DB Isolation Level 격리 수준 이해하기 (0) | 2022.10.01 |
DB Index 이해하기 (0) | 2022.10.01 |
Transaction과 ACID 쉽게 이해하기(+MySQL transaction 설정 방법) (0) | 2022.10.01 |
SQL 언어 DML, DDL, DCL, TCL 이해하기 (0) | 2022.09.24 |