나무 숲
키(Key)에 대해 본문
키(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입니다. 수강 목록 테이블에서 학생 인적 사항 테이블의 {학번}을 참조하며, 학생 인적 사항 테이블에 없는 학번은 수강 목록 테이블에도 나타날 수 없습니다.
-
조잡한 그림이지만 읽어주셔서 감사합니다.
'Career' 카테고리의 다른 글
디코더, 인코더 (Decoder, Encoder) (0) | 2017.02.20 |
---|---|
반가산기, 전가산기 (Half Adder, Full Adder) (0) | 2017.02.19 |
[C/C++] Visual studio 에러 모음 (0) | 2017.02.14 |
[인물] 전길남 박사 (0) | 2017.01.12 |
프로그래밍 연습 사이트 소개 (0) | 2017.01.06 |