티스토리 뷰

학습 내용/학습 정리

Database Key

ohksj77 2024. 1. 11. 02:52

사전 지식 (용어)

DB Key란?

튜플들을 구별할 수 있는 기준이 되는 속성이다.

필요한 이유

  • 하나의 릴레이션에는 수많은 튜플들이 존재한다.
  • 각 튜플들 간에는 중복되는 속성값이 발생할 수 있다.
  • 이 튜플들을 구분하기 위한 기준이 필요하고, Key가 그 기준이 된다.

Key 의 종류

  • 키의 종류로는 크게 슈퍼키, 후보키, 기본키, 대체키, 외래키 등이 있다.

최소성, 유일성

  • 모든 키의 종류가 이 두개를 만족하는 것은 아님!

유일성

  • 키를 통해 모든 튜플을 구별할 수 있는 특징
  • 유일성을 만족하는 예시
    • 회원 테이블 [주민등록번호] 혹은 [이메일]
    • 과목 테이블 [강의 연도, 과목명, 교수명, 강의 교시]
  • 유일성을 만족하지 않는 예시
    • 회원 테이블 [취미]

최소성

  • 키에 튜플을 식별하는데 불필요한 어트리뷰트가 없는 경우
  • 최소성을 만족하는 예시
    • 회원 테이블 [주민등록번호] 혹은 [이메일]
  • 최소성을 만족하지 않는 예시
    • 회원 테이블 [주민등록번호, 이메일, 전화번호] 혹은 [주민등록번호, 이름]

종류별 Key

1. 슈퍼키 (Super Key) 유일성 O, 최소성 X


  • 예시
    • 회원 테이블의 슈퍼키
      • [고객 아이디]
      • [고객 아이디, 직업, 나이, 등급]
    • 슈퍼키가 아닌 경우
      • [이름]
      • [이름, 성별]

2. 후보키 (Candidate Key) 유일성 O, 최소성 O


  • 예시
    • 회원 테이블의 후보키
      • [고객 아이디]
    • 후보키가 아닌 경우
      • [고객 아이디, 직업, 나이, 등급]

3. 기본키 (Primary Key) 후보키 중 선택받은 키


  • 후보키 선정시 고려할 점
    1. NULL 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적절하다.
    2. 값이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적절하다.
    3. 단순한 후보키를 기본키로 선택한다.
  • 기본키의 특징
    • 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

 

[DB] 키의 개념과 종류

튜플 - 해시넷

'학습 내용 > 학습 정리' 카테고리의 다른 글

운영체제 기본  (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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함