키(Key)는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 Attribute(속성)입니다.
*튜플 : 릴레이션을 구성하는 각각의 행, 속성의 모임으로 구성된다. 파일 구조에서는 레코드와 같은 개념, 튜플의 수 = 카디널리티(Cardinality) = 기수 = 대응수
<학생> 릴레이션
학번 | 주민번호 | 성명 | 성별 |
1001 | 810429-1231457 | 김형석 | 남 |
1002 | 800504-1546781 | 김현천 | 남 |
1002 | 811216-2547842 | 류기선 | 여 |
1003 | 910322-1233445 | 홍영선 | 여 |
<수강> 릴레이션
학번 | 과목명 |
1001 | 영어 |
1001 | 전산 |
1002 | 영어 |
1003 | 수학 |
1004 (참조무결성) | 영어 |
1004 (참조무결성) | 전산 |
1. 후보키 (Candidate Key)
* 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별할 수 있는 속성들의 부분집합을 의미합니다.
* 모든 릴레이션은 반드시 하나 이상의 후보키를 가져야합니다.
* 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야합니다.
ex) <학생> 릴레이션에서 '학번'이나 '주민번호'는 다른 레코드를 유일하게 구별할 수 있는 기본키로 사용할 수 있으므로 후보키가 될 수 있습니다. 즉
기본키가 될 수 있는 키들을 후보키라고 합니다.
2. 기본키 (Primary Key)
* 후보키 중에서 선택한 주키(Main Key)
* 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성
* Null 값을 가질 수 없습니다. (개체 무결성의 첫번째 조건)
* 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없습니다.(개체 무결성의 두번째 조건)
ex) <학생> 릴레이션에는 '학번'이나 '주민번호'가 기본키가 될 수 있고, <수강> 릴레이션에는 '학번'+'과목명'으로 조합해야 기본키가 만들어 질 수 있습니다. 왜냐면 <수강> 릴레이션에서는 '학번' 속성과 '과목명' 속성은 개별적으로 기본키로 사용할 수 없습니다. 다른 튜플들과 구별되지 않기 때문이지요..
ex) <학생> 릴레이션에서 '학번'을 기본키로 정의되면 이미 입력된 '1001'은 다른 튜플의 '학번' 속성 값으로 입력할 수 없습니다.
3. 대체키 (Alternate Key)
* 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키들을 말합니다.
* 보조키라고도 합니다.
ex) <학생> 릴레이션에서 '학번'을 기본키로 정의하면 '주민번호'는 대체키가 됩니다.
4. 슈퍼키 (Super Key)
* 슈퍼키는 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키로서 릴레이션을 구성하는 모든 튜플 중 슈퍼키로 구성된 속성의 집합과 동일한 값은 나타내지 않습니다.
* 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족하지만, 최소성은 만족시키지 못합니다.
ex) <학생> 릴레이션에서는 '학번', '주민번호', '학번'+'주민번호', '학번'+'주민번호'+'성명' 등으로 슈퍼키를 구성할 수 있습니다. 또한 여기서 최소성을 만족시키지 못한다는 말은 '학번'+'주민번호'+'성명' 가 슈퍼키인 경우 3개의 속성 조합을 통해 다른 튜플과 구별이 가능하지만, '성명' 단독적으로 슈퍼키를 사용했을 때는 구별이 가능하지 않기 때문에 최소성을 만족시키지 못합니다. 즉 뭉쳤을 경우 유일성이 생기고, 흩어지면 몇몇 속성들은 독단적으로 유일성있는 키로 사용할 수 없습니다. 이것을 최소성을 만족하지 못한다고 합니다.
5. 외래키 (Foreign Key)
* 관계(Relation)를 맺고 있는 릴레이션 R1, R2에서 릴레이션 R1이 참조하고 있는 릴레이션 R2의 기본키와 같은 R1 릴레이션의 속성
* 외래키는 참조되는 릴레이션의 기본키와 대응되어 릴레이션 간에 참조 관계를 표현하는데 중요한 도구로 사용됩니다.
* 외래키로 지정되면 참조 테이블의 기본키에 없는 값은 입력할 수 없습니다. (참조 무결성 조건)
ex) <수강> 릴레이션이 <학생> 릴레이션을 참조하고 있으므로 <학생> 릴레이션의 '학번'은 기본키이고, <수강> 릴레이션의 '학번'은 외래키입니다.
즉 각 릴레이션의 입장에서 속성은 기본키가 되기도하고, 외래키가 되기도 합니다.
ex) <수강> 릴레이션의 '학번'에는 <학생> 릴레이션의 '학번'에 없는 값은 입력할 수 없습니다.
6. 복합키 (Composite Key)
하나의 속성으로는 기본키가 될 수 없는 경우는 둘 이상의 컬럼을 묶어 식별자로 정의해야 하는데, 이를 복합키라고 한다. 이슈는 복합키 중에 어떤 컬럼을 먼저 둘 것인가 하는 것이다. 컬럼을 기본키로 정의하게 되면 기본적으로 해당 컬럼에 유니크한 클러스터드 인덱스가 정의되어지며, 이럴 경우 먼저 정의한 컬럼을 기준으로 인덱스가 생성되기 때문에 복합키 중에서 주로 조회의 조건으로 사용되는 컬럼을 먼저 정의하는 것이 성능 향상을 위해 도움이 된다.
ref)
https://dog-foot-story.tistory.com/60
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=qbxlvnf11&logNo=221198309383
'데이터베이스 공부' 카테고리의 다른 글
인덱스의 단점 (0) | 2022.02.10 |
---|---|
SQL 조인(JOIN)의 개념과 종류 (0) | 2021.11.07 |
NoSQL 저장방식에 따른 분류 (0) | 2021.11.07 |
CAP 이론 (0) | 2021.11.05 |