티스토리 뷰
사전 지식 (용어)
DB Key란?
튜플들을 구별할 수 있는 기준이 되는 속성이다.
필요한 이유
- 하나의 릴레이션에는 수많은 튜플들이 존재한다.
- 각 튜플들 간에는 중복되는 속성값이 발생할 수 있다.
- 이 튜플들을 구분하기 위한 기준이 필요하고, Key가 그 기준이 된다.
Key 의 종류
- 키의 종류로는 크게 슈퍼키, 후보키, 기본키, 대체키, 외래키 등이 있다.
최소성, 유일성
- 모든 키의 종류가 이 두개를 만족하는 것은 아님!
유일성
- 키를 통해 모든 튜플을 구별할 수 있는 특징
- 유일성을 만족하는 예시
- 회원 테이블 [주민등록번호] 혹은 [이메일]
- 과목 테이블 [강의 연도, 과목명, 교수명, 강의 교시]
- 유일성을 만족하지 않는 예시
- 회원 테이블 [취미]
최소성
- 키에 튜플을 식별하는데 불필요한 어트리뷰트가 없는 경우
- 최소성을 만족하는 예시
- 회원 테이블 [주민등록번호] 혹은 [이메일]
- 최소성을 만족하지 않는 예시
- 회원 테이블 [주민등록번호, 이메일, 전화번호] 혹은 [주민등록번호, 이름]
종류별 Key
1. 슈퍼키 (Super Key) 유일성 O, 최소성 X
- 예시
- 회원 테이블의 슈퍼키
- [고객 아이디]
- [고객 아이디, 직업, 나이, 등급]
- 슈퍼키가 아닌 경우
- [이름]
- [이름, 성별]
- 회원 테이블의 슈퍼키
2. 후보키 (Candidate Key) 유일성 O, 최소성 O
- 예시
- 회원 테이블의 후보키
- [고객 아이디]
- 후보키가 아닌 경우
- [고객 아이디, 직업, 나이, 등급]
- 회원 테이블의 후보키
3. 기본키 (Primary Key) 후보키 중 선택받은 키
- 후보키 선정시 고려할 점
- NULL 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적절하다.
- 값이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적절하다.
- 단순한 후보키를 기본키로 선택한다.
- 기본키의 특징
- NOT NULL
- UNIQUE
4. 대체키 (Alternate Key) ; 후보키 중 선택받지 못한 키
- 대체키는 기본키로 선택받지 못한 후보키들이다.
- 대체키는 '보조키' 라는 이름으로도 불린다.
5. 외래키 (Foreign Key) ; 다른 릴레이션의 기본키를 참조
- 다른 릴레이션의 기본키를 그대로 참조하는 속성 또는 속성들의 집합이 외래키이다.
- 외래키는 릴레이션 간의 관계를 올바르게 표현하기 위해 필요하다.
- 고객 [고객 아이디(PK), 고객 이름, 나이, 등급, 직업, 적립금]
- 주문 [주문번호(PK), 주문 고객 아이디(FK), 제품, 수량, 단가, 주문 일자]
자연 키(Natural Key) VS 인조 키(Artificial Key)
- 자연 키
- 기본키만을 위한 데이터가 아니라 비즈니스 모델에서 자연스레 나오는 속성으로 기본키를 정하는 것 ex) email, 주민등록번호 등
- 인조 키
- 비즈니스 모델과는 달리 키를 위한 데이터를 갖는 키 ex) Auto Increment 등
대리 키
- 릴레이션에 고유식별을 할 수 있는 기본키의 재목이 없을 때 임의적으로 만들어 내는 키
- 인조 키를 사용한다.
키와 혼동되는 개념
Functional Dependency (FD)
- 테이블에서 튜플들의 X 값이 같다면, Y 값도 같을 것이라는 의존 관계가 있을 때, X와 Y는 FD 관계
- 예시team_id back_number team_name player_name
- SOCCER_PLAYER 테이블 ERD가 다음과 같을 때
- 키는 [team_id, back_number] 이다.
- 여기에 존재하는 FD
- team_id와 back_number를 알면 player_name을 알 수 있다.
- team_id를 알면 team_name을 알 수 있다.
- team_id 하나만으로는 키가 아닌데 FD가 존재한다.
읽어볼 거리
- JPA 복합키 관련
Legacy DB의 JPA Entity Mapping (복합키 매핑 편) | 우아한형제들 기술블로그
- 실무에서의 FK 없는 RDB??
Foreign Key 없이 구축하는 관계형 데이터베이스 시스템에 대한 생각
Reference
'학습 내용 > 학습 정리' 카테고리의 다른 글
운영체제 기본 (1) | 2024.01.11 |
---|---|
MySQL의 Join 기법 (2) | 2024.01.11 |
스프링 - 2022-4-13 (0) | 2022.04.13 |
HTTP - 2022-4-13 (0) | 2022.04.13 |
스프링 - 2020-3-30 (0) | 2022.03.30 |