Key의 종류
in Database
본 글은 소프트웨어 마에스트로 과정을 위해 작성한 내용입니다.
Key?
유일성과 최소성 속성 & 속성의 조합
. 식별자라고도 한다.
키(Key)는 데이터베이스에서 조건에 만족하는 튜플을 찾거나, 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 속성(Attribute)이다.
튜플 : 릴레이션을 구성하는 각각의 행, 속성의 모임으로 구성됨. 파일 구조에서 레코드와 같은 개념
카디날리티(Cardinality) : 튜플의 수
Key의 종류
- 슈퍼 키(Super Key) :
유일성
을 만족하는 키. 테이블 내에서 레코드를 유일하게 식별하는 속성 혹은 속성 조합 (ex: {학번 + 이름}, }주민등록번호 + 학번}) - 복합 키(Composite Key) :
2개 이상
의 속성(attribute)를 사용한 키 - 후보 키(Cadidate Key) :
유일성
과최소성
을 만족하는 키. 기본키가 될 수 있는 후보이기 때문에 후보키라고 불림. 슈퍼키 대상 키 (ex: 주빈등록번호, 학번 등) - 기본 키(Primary Key) : 후보 키에서 선정된 속성 혹은 속성 조합. Null 값이 들어갈 수 없으며, 기본 키로 선택된 속성은 동일한 값이 들어갈 수 없음.
- 대체 키(Surrogate Key) : 후보 키 중에서 기본 키로 선택되지 않은 키
- 외래 키(Foreign Key) : 어떤 테이블 간의 기본 키(Primary Key)를 참조하는 속성. 테이블들 간의 관계를 나타내기 위해 사용됨
슈퍼 키(Super Key)
- 한 릴레이션 내에 있는 속성들의
집합으로 구성된 키
- 릴레이션을 구성하는 모든 튜플 중 슈퍼 키로 구성된 속성의 집합과 동일한 값은 나타내지 않음
- 릴레이션을 구성하는 모든 튜플에 대해
유일성은 만족
하지만,최소성은 만족시키지 못함
- 뭉쳤을 경우 유일성이 생기고, 흩어지면 몇몇 속성들은 독단적으로 유일성있는 키로 사용할 수 없음 = 최소성을 만족하지 못함
- ex) <학생> 릴레이션에서 학번, 주민번호, 성명이라는 속성이 있을 때 이 3가지의 속성을 조합하면 다른 튜플과 구별이 가능하지만, '성명' 단독적으로 슈퍼키를 사용할 경우에는 구별이 가능하지 않기 때문에 최소성을 만족시키지 못함학생>
후보 키(Candidate Key)
- 릴레이션을 구성하는 속성들 중에서
튜플을 유일하게 식별할 수 있는 속성들의 부분집합
- 모든 릴레이션은 반드시 하나 이상의 후보키를 가짐
- 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 함
- ex) <학생> 릴레이션에서 '학번'이나 '주민번호'는 다른 레코드를 유일하게 구별할 수 있는 기본키로 사용될 수 있으므로 후보키가 될 수 있음학생>
기본키가 될 수 있는 키
기본 키(Primary Key)
- 후보 키 중에서 선택한 주 키(Main Key)
- 한 릴레이션에서
특정 튜플을 유일하게 구별할 수 있는 속성
- Null 값을 가질 수 없음 (개체 무결성의 첫 번째 조건)
- 기본키로 정의된 속성에는
동일한 값이 중복되어 저장될 수 없음
(개체 무결성의 두 번째 조건)- ex) <학생> 릴레이션에는 '학번' 혹은 '주민번호'가 기본키가 될 수 있고, <수강> 릴레이션에는 '학번'+'과목명'으로 조합해야 기본키가 만들어질 수 있음 수강>학생>
- ex) <수강> 릴레이션에는 '학번' 속성과 '과목명' 속성은 개별적으로 기본키로 사용할 수 없음 => 다른 튜플들과 구별이 되지 않기 때문수강>
- ex) <학생> 릴레이션에는 '학번' 혹은 '주민번호'가 기본키가 될 수 있고, <수강> 릴레이션에는 '학번'+'과목명'으로 조합해야 기본키가 만들어질 수 있음 수강>학생>
대체 키(Surrogate Key)
후보 키가 둘 이상일 때 기본키를 제외한 나머지 후보 키들을 말함
- 보조 키라고도 함
- ex) <학생> 릴레이션에서 '학번'을 기본키로 정의하면 '주민번호'는 대체키가 됨학생>
외래 키(Foreign Key)
- 관계(Relation)을 맺고 있는 릴레이션 R1, R2에서 릴레이션 R1이 참조하고 잇는 릴레이션 R2의 기본키와 같은 R1 릴레이션의 속성
참조되는 릴레이션의 기본 키와 대응되어 릴레이션 간 참조 관계를 표현하는데 중요한 도구
로 사용됨- 외래 키로 지정되면 참조 테이블의 기본 키에 없는 값은 입력할 수 없음 (참조 무결성 조건)
- ex) <수강> 릴레이션이 <학생> 릴레이션을 참조하고 있으므로 <학생> 릴레이션의 '학번'은 기본키, <수강> 릴레이션의 '학번'은 외래키수강>학생>학생>수강>
- ex) <수강> 릴레이션의 '학번'에는 <학생> 릴레이션의 '학번'에 없는 값을 입력할 수 없음학생>수강>