CS/DataBase

[데이터베이스] 키(Key)의 개념 및 종류

bu119 2023. 9. 8. 09:00
728x90
반응형

키(Key) 란?

데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때,
다른 튜플들과 구별할 수 있는 유일한 기준이 되는 Attribute(속성)

 

튜플을 유일하게 구별하기 위해 모든 속성을 이용하는 것보다 일부 속성만 이용하는 것이 효율성을 높일 수 있다. 릴레이션에 포함된 튜플들을 유일하게 구별해주는 역할은 속성 또는 속성들의 집합인 키가 담당한다.

 

키(Key)의 특징

Key의 특징으로는 3가지 종류가 있다.

이 특징들은 Key의 종류에 따라 만족하는 경우도 있고, 그렇지 않은 경우도 있다.

  • 유일성 : 유일한 값을 가져야 한다.
  • 최소성 : 최소한의 값으로 식별할 수 있어야 한다.
  • 불변성 : 변하는 값이어선 안 된다.

 

키(Key)의 종류

키의 종류에는 슈퍼키, 후보키, 기본키, 대체키, 외래키가 있다.

 

 

다음의 릴레이션을 예시로 종류 별로 알아보도록 하자.

이미지 출처 : https://moonibot.tistory.com/61

 

슈퍼키 (Super Key)

  • 유일성 O , 최소성 X
  • 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키. 
  • 유일성을 만족하므로 릴레이션을 구성하는 모든 튜플 중 슈퍼키로 구성된 속성의 집합과 동일한 값은 나타나지 않는다.
<학생> 릴레이션에서는 학번, 주민등록번호, [학번, 주민등록번호], [학번, 주민등록번호, 이름] 등이 슈퍼키이다.

 

후보키 (Candidate Key)

  • 유일성 O , 최소성 O
  • 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용되는 속성들의 부분집합
  • 최소성을 만족하므로 최소의 개수로 이루어져야 한다.

<학생> 릴레이션에서는 학번, 주민등록번호가 후보키 이며
<수강> 릴레이션에서는 [학번, 과목명]으로 조합해야 유일성과 최소성을 만족하므로 [학번, 과목명] 이 후보키가 된다.

 

후보키 = 고객아이디

 

기본키(Primary Key)

  • 후보키  선택받은 키
  • 후보키의 성질을 가지므로 유일성 최소성을 만족한다
  • NULL 값과 중복된 값을 가질 수 없다.

<학생> 릴레이션에서의 후보키인 학번이나 주민등록번호 중에 하나를 기본키로 설정할 수 있고,
<수강> 릴레이션에서는 [학번, 과목명] 을 기본키로 설정 할 수 있다.

 

기본키 = 고객아이디

 

대체키 (Alternate Key)

  • 후보키  선택받지 못한 키

<학생> 릴레이션에서 학번이 기본키가 된다면 주민등록번호는 대체키가 된다.

 

외래키 (Foreign Key)

  • 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
  • 릴레이션 간의 관계를 표현할 때 사용한다
  • 참조 릴레이션의 기본키와 동일한 키 속성을 가진다

<수강> 릴레이션의 학번은 <학생> 릴레이션의 기본키인 학번을 참조하고 있으므로,
<수강> 릴레이션에서 학번은 외래키가 된다.

이로써 <학생> 릴레이션과 <수강> 릴레이션이 학번을 기준으로 관계가 설정된 것이라 할 수 있다.

 

외래키가 필요한 이유는?

외래키의 존재 이유는 데이터 무결성 때문이다.

여기서 무결성이란, 데이터가 항상 정확한 값을 유지하는 성질을 의미한다.
예를 들어 학생 릴레이션의 학번이 변경되었을 때, 수강 릴레이션의 학번 값이 변경되지 않는다면 무결성이 깨지게 된다.

 

주문 릴레이션 외래키 = 주문고객, 고객 릴레이션 기본키 = 고객아이디

 

 

예시

더보기
키의 관계

슈퍼키 (Super Key)

  • 7조라는 팀에 팀원은 4명이 있다. 이 4명을 구분할 수 있는 것은 절대 겹치지 않는 학번 일수도 있고, 주민번호일 수도 있다.
  • 이름과 나이를 묶어서 하나의 속성으로 만드는 것도 가능하다. 이름과 나이를 합쳐서 7조안에서 중복만 되지 않으면 가능하기 때문이다. 이름과 나이를 합쳐서 4명을 구분할 수 있으면 슈퍼키가 될 수 있다.
  • 학번과 주민번호를 묶어서 슈퍼키로 만들수도 있고, 학번과 주민번호과 이름을 합쳐서 슈퍼키로도 만들수 있고, 학번과 주민번호과 이름과 나이를 합쳐서 슈퍼키를 만들수도 있다. 어떤 속성끼리 묶던 중복값이 안나오고 서로 구별만 할 수 있으면 된다.

후보키(Candidate Key)

  • 위에서 말했듯아, 이 4명을 구분하는 슈퍼키들이 모여 있는데, 슈퍼키들 중에서 속성은 최소한의 갯수로 4명을 구분할 수 있어야 후보키가 될 수 있다.
  • 학번 슈퍼키와 주민번호 슈퍼키는 속성들이 각 1개씩 이루어져 있다. 하지만 이름+나이 슈퍼키는 이름과 나이를 묶어서 2개의 속성으로 되어 있다. 이름+나이 슈퍼키는 2개 이므로 각 1개의 속성인 주민번호와 학번 슈퍼키가 최소성을 만족한다고 할 수 있다.
  • 따라서 이름+나이 슈퍼키는 갯수가 다른 것보다 많기 때문에 최소성을 만족하지 못해서 후보키가 될 수 없다.

기본키(Primary Key)

  • 후보키들 중에서 하나를 선택한 키로 최소성과 유일성을 만족하는 속성이다.
  • 테이블에서 기본키는 오직 1개만 지정할 수 있다.
  • 기본키는 NULL 값을 절대 가질수 없고, 중복된 값을 가질 수 없다.

대체키(Alternate Key)

  • 후보키가 두개 이상일 경우 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라한다.
  • 후보키로 학번과 주민번호가 뽑혔고, 둘 중에서 기본키 학번이 되었다. 학번이 기본키가 되고 남은 후보키인 주민번호 대체키가 될 수 있다. 학번 기본키가 없어지게 되면 주민번호는 없어진 기본키를 대체할 수 있게된다.

외래키(Foreign Key)

  • 참조 될 테이블(A)이 먼저 만들어지고 참조하는 테이블(B)에 값이 입력되어야 한다.
  • 이때, 참조될(A) 열의 값은 참조될(A) 테이블에서 기본키(Primary Key)로 설정되어 있어야한다.
  • 외래키는 참조되는 테이블의 기본키와 동일한 키 속성을 가진다.
  • 참조되는 부모테이블이 먼저 생성된 뒤 데이터를 넣고, 참조하는 자식 테이블이 다음에 생겨야된다.
  • 부모 테이블 먼저 삭제될 수 없다. 왜냐하면 부모테이블을 참조하는데 부모테이블이 삭제되면 자식테이블은 참조하는 것이 없어지기 때문에 외래키 오류가 생긴다. 따라서 외래키 관계에서 부모테이블을 삭제하려면 자식테이블 먼저 삭제한 후 부모테이블을 삭제해야한다.

 

  • 아래 사진을 보자. 부모 테이블은 학생 테이블이고, 자식 테이블은 수강 테이블이다.
  • 학생테이블은 학번이 기본키이자 참조되는 참조키이다.
  • 수강테이블은 학번이 참조하는 키이자 외래키이다.

 


 

참고 자료

https://ddecode.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4DB-4%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%9D%98-%ED%82%A4key%EC%9D%98-%EC%A2%85%EB%A5%98

https://hongcoding.tistory.com/144

https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-%ED%82%A4KEY-%EC%A2%85%EB%A5%98-%F0%9F%95%B5%EF%B8%8F-%EC%A0%95%EB%A6%AC

728x90
반응형

'CS > DataBase' 카테고리의 다른 글

[데이터베이스] JOIN 이란?  (0) 2023.09.15