[DB] 기본키 / 외래키 / 후보키 / 복합키 개념

Onam Kwon·2023년 1월 6일
9

DB

목록 보기
9/11
post-thumbnail
post-custom-banner

여러가지 키(key)에 대한 이해

  • 키(key)는 DB에서 조건을 만족하는 레코드를 찾거나 순서대로 정렬할 때 레코드를 서로 구분할 수 있는 기준이 되는 속성을 뜻한다.
  • 키의 종류로는 다음과 같이 있다.
    • Super key (수퍼키)
    • Candidate key (후보키)
    • Primary key (기본키)
    • Alternate key (대체키)
    • Foreign key (외래키)
    • Composite key (복합키)
  • 추가로 키에대해 알아보기 전에 알아야할 유일성과 최소성이라는 개념이 있다.
  • 유일성: 하나의 키값으로 튜플을 유일하게 식별할 수 있는 성질을 의미함. (중복X)
  • 최소성: 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질.
    • 특정 학교 학생을 구별할 때, 세가지 구별자[학생번호, 이름, 성별]가있다면 이는 유일성은 만족하지만 최소성은 만족하지 않는다.
    • 이름성별을 제외한 학생번호 만으로 학생을 구별할 수 있으며, 학생번호는 최소성을 만족한다.

Super key (수퍼키)

  • 유일성 O, 최소성 X
  • 유일성의 특성을 만족하는 속성들의 집합. 중복된 값이 존재하지 않는다. 서로 구분만 가능하면 수퍼키라 할 수 있다.
    • [학생번호]의 경우 중복되는 경우가 없기 때문에 유일성을 만족하므로 슈퍼키가 될 수 있다.
    • [이름,나이,성별]의 경우 이 세가지 모두가 일치하는 사람이 존재할 수 있으므로 유일성을 만족하지 못한다. 따라서 수퍼키로 사용할 수 없다.
    • [학생번호,나이,성별]의 경우 학생번호 한가지만으로 각 튜플(레코드,행)을 구별할 수 있기 때문에 유일성을 만족한다. 따라서 수퍼키로 사용할 수 있다.
  • [학생번호,나이,성별]같은 경우 유일성을 만족하는 학생번호를 포함하고 있으므로, [학생번호,나이,성별,학년,수업목록]등 학교 내부 범주에 있는 어떠한 속성을 추가해도 학생번호성질 하나덕분에 유일성을 만족한다.
    • 중요함.

Candidate key (후보키)

  • 유일성 O, 최소성 O
  • 수퍼키 중에서 최소성을 만족하는 키를 칭한다. 즉, 유일성과 최소성을 모두 만족하는 속성들의 집합이다.
  • 아래와 같이 수퍼키가 있다고 할때,
    • [학생번호,나이,성별]의 경우, 학생번호가 있다면 나이와 성별은 특정 학생을 구별할 때 필요없다. 없어도 전혀 문제가 안됨. 여기서 나이와 성별을 제거한 [학생번호]의 경우 최소성을 만족하며 후보키가 될 수 있다.

Primary key (기본키)

  • 주 키, 프라이머리 키, PK 등으로 불리운다. 후보키들중 메인으로 선정되는 키로 후보키의 성질을 갖는다.
  • 유일성과 최소성을 가지며(후보키), 해당 레코드를 식별할때 기준이 되는 반드시 필요한 키이다.
  • 추가로 기본키는 다음과 같은 조건을 따른다.
    • 값의 변동이 잦은 후보키는 기본키로 부적절하다.
    • NULL값을 가질수 있는 속성이 포함된 후보키는 부적절하다.
    • 후보키중 단순한 키를 기본키로 선택한다.
    • 하나의 테이블에는 반드시 하나의 기본키만 존재한다.
student_idname
1Scott
2Will
3Peter
4Will
  • 위와 같이 student_idname으로 구성된 테이블이 있다.
  • PK인 student_id는 학생번호를 나타내며, 유일성과 최소성을 만족한다.
  • name은 학생의 이름을 나타내며 유일성을 만족하지 못한다.

Foreign key (외래키)

  • 테이블간의 관계를 나타낼때 사용하며, 다른 테이블의 기본키를 참조해 외래키로 사용한다.
    • 즉, 한 테이블의 외래키는 연결되어있는 다른 테이블의 기본키중 하나다.
    • 위의 왼쪽 테이블에서 student_id는 기본키이며, 오른쪽 테이블에서는 외래키이다.
      • 학생 목록을 나타내는 왼쪽 테이블에서 1~4의 학생이 있으며, 오른쪽 테이블에서 외래키로 사용되는 student_id는 그 외 값이 나타날 수 없다.
  • 사실 외래키 설정을 따로 하지 않아도 데이터 조회가 가능하지만, 굳이 하는 이유는 데이터 무결성 때문이다.
    • 무결성: 데이터가 항상 정확한 값을 유지하는 성질
  • 위 테이블중 왼쪽 테이블에서 student_id가 변경되었는데 오른쪽 테이블의 student_id가 변경되지 않았다면 문제가 생긴다. 이런 상황을 예방하기 위해 외래키가 존재한다.

Composite key (복합키)

  • 두개 이상의 컬럼을 묶어서 하나의 기본키로 지정하는것.
  • 기본키는 하나의 테이블에 하나만 존재할 수 있다, 또한 기본키는 하나 이상의 컬럼으로 구성되어 있다.
    • 기본키가 만약 복합키라면, 복합키 또한 당연히 유일성과 최소성을 만족해야한다.

Alternate key (대체키)

  • 기본키를 제외한 나머지 후보키들을 의미한다.
profile
권오남 / Onam Kwon
post-custom-banner

0개의 댓글