나무 숲

키(Key)에 대해 본문

Career

키(Key)에 대해

wood.forest 2017. 2. 17. 15:18

키(Key)는 DB에서 조건에 만족하는 관계의 행(투플)을 찾거나 순서대로 정렬할 때 다른 투플과 구별할 수 있는 유일한 기준이 되는 속성의 집합입니다.


자세한 설명 전 Key의 종류와 간단한 정의를 말씀드리겠습니다.







Key의 종류


슈퍼키 (Super Key, SK)

고유하게 식별하는 모든 조합을 말한다.


기본키 (Primary Key, PK)

주 키 또는 프라이머리 키

레코드의 식별자로 이용하기에 가장 적합한 것을 관계(테이블)마다 단 한 설계자에 의해 선택, 정의된 후보키이다.

NULL의 존재가 허용되지 않는다.


후보키 (Candidate Key, CK)

슈퍼키 중 더 이상 줄일 수 없는(irreducible) 형태를 가진 것, 다시 말해, 행의 식별을 위해 필요한 특성 또는 그 집합 (최소의 슈퍼키)을 말한다.

후보키라는 이름은 그것이 기본 키로 선정될 수 있는 후보이기 때문이다.


대체키 (Alternate Key, AK)

후보키 중 기본키로 선정되지 않은 키를 말한다.


외래키 (Foreign Key, FK)

한 테이블의 키 중 다른 테이블의 행(row)을 식별할 수 있는 키 이다. (한 테이블에서의 PK가 다른 테이블에서의 FK)













이제 간단한 예시를 보여드리겠습니다.


* 가정 : 

학번이 같은 학생은 없다.

주민등록번호가 같은 학생은 없다.

이름이 같은 학생은 있을 수 있다.


같은 수업을 여러 학생이 들을 수 있다.

수업에 분반이 없기 때문에 어떤 수업 이름의 수업은 유일하다.




위 테이블에서 어떤 것들이 PK가 될 수 있을까요?




학생 인적사항 테이블에서는 PK가 될 수 있는 총 10가지 종류의 SK(집합)이, 수강 목록 테이블에서는 한 가지 종류의 SK가 보입니다.

되새겨야 할 점은 SK로 단 하나의 행을 찾아낼 수 있어야 한다는 것입니다.

수강 목록 테이블의 경우 한 학생이 여러 가지 수업을 들을 수 있기 때문에 {수업 이름} 또는 {수강학생학번}은 PK가 될 수 없고 {수업이름, 수강학생학번}이 PK가 될 수 있는 것이지요.

반면 학생 인적 사항 테이블에서는 {학번} 또는 {주민} 하나로도 한 학생을 추출할 수 있습니다. 같은 맥락에서 이 둘 중 한 가지 속성만이라도 포함된 속성의 집합은 모두 PK가 될 수 있는 것입니다 => 이 10가지는 모두 슈퍼키입니다. 






아래 그림 한장에 모아보려고 했습니다.



* {학번}을 PK로 설정하였습니다. 학생 인적사항 테이블에서 {학번}을 통해 특정 학생 한 명을 검색할 수 있습니다.

* 위에 색색깔로 표시했던 10가지 종류는 각각 SK입니다. 

* {학번}과 {주민}은 CK입니다. 최소의 SK로, 각 집합에서 하나의 속성이라도 빠지면 SK가 될 수 없습니다.

* {주민}은 AK입니다. PK로 선택되지 못한 CK입니다.




* {수업 이름, 수강 학생 학번}은 PK이자, CK이며, SK입니다. 수업 이름, 또는 수강 학생 학번 속성 둘 중 한 가지라도 빠진 키의 집합으로는 특정 투플 한 개를 추출할 수 없습니다.

* {수강 학생 학번}은 FK입니다. 수강 목록 테이블에서 학생 인적 사항 테이블의 {학번}을 참조하며, 학생 인적 사항 테이블에 없는 학번은 수강 목록 테이블에도 나타날 수 없습니다.










-

조잡한 그림이지만 읽어주셔서 감사합니다.

728x90
반응형
Comments