용's
[Chap 2-2] 개체-관계 모델(Entity-Relationship mode) 본문
[Chap 2-2] 개체-관계 모델(Entity-Relationship mode)
TaeYOng's 2014. 10. 13. 14:032.5 키(Keys)
- ER(Entity Relation) 모델에서 객체는 결국 그 객체의 속성 값으로 구별함.
- 데이터베이스에서 조건에 맞는 튜플의 속성을 찾거나 순서대로 정렬을 할 때 기준이 되는 속성으로 키를 사용.
- 앞서 소개될 키들(SK, CK, PK, FK)는 모두 속성의 집합
1) 슈퍼 키(SK: Super Key)
- 한 관계(Relation = table)에서 그 Relation 튜플(Tuple)들을 유일하게 식별해 주는 속성(Attribute)들의 집합
- 즉, 슈퍼키가 되기 위해서는 그 릴레이션의 슈퍼 키 속성들의 값이 모두 같은 튜플이 존재해서는 안됨. 튜플들을 유일하게 식별하는 것을 유일성(Unique)라고 하는데, 그 슈퍼 키는 유일성을 만족함.
- 슈퍼키는 관련 없는 속성들을 포함하고 있을 수 있음. 즉, 어떤 속성을 빼도 유일성을 만족할 수 있다는 말임.이렇게 슈퍼 키에 속하는 속성들 중 어떤 하나를 빼도 유일성을 만족할 수 있기 때문에, 슈퍼키는 최소성(Minimality)을 만족하지 않음
2) 후보 키(CK: Candidate Key)
- 역시 릴레이션의 속성의 집합으로 릴레이션의 튜플을 유일하게 식별
- 유일성을 만족시키는 슈퍼 키의 최소한의 부분집합을 후보 키라고 함.
- 슈퍼 키와는 달리 유일성과 최소성을 모두 만족.
- 기본 키(Primary key)의 후보가 도니다고 해서 후보 키 라고 함.
3) 기본 키, 주 키(PK: Primary Key)
- 후보 키(Candidate Key)중에서 선정된 키. 설계자에게 선택된 하나의 후보 키
- 당연히 릴레이션의 속성 집합으로 구성되고, 유일성과 최소성을 모두 만족.
- 허나 NULL값을 절대 갖을 수 없음
4) 대체 키(AK: Alternate Key)
- 후보 키에서 기본키를 뺸 모든 후보 키
5) 외래 키(FK: Foreign Key)
- 어떤 릴레이션 r1의 속성(Attribute)이 다른 릴레이션 r2의 주 키(PK)를 포함하고 있는 경우가 있을 수 있음. 이때 r1에서부터 r2를 참조하는 속성들의 집합을 외래 키(FK)라고 함.
- 이때, r1을 Referencing Relation이라 하고, r2를 Referenced Relation이라 함.
- 쉽게 말해, FK는 다른 릴레이션의 주 키를 참조하는 속성들의 집합을 말함.
예) 학생 개체 집합
학번 |
이름 | 주민번호 | 전화번호 | 학과 번호 |
일단 먼저 학번과 주민번호 속성이 super key가 될 수 있다. 이 속성들로 튜플들을 유일하게 구분할 수 있기 때문.
또한 이 두 튜플이 들어간 속성들의 부분집합이 SK가 될 수 있다. 예를 들어 (학번, 이름), (학번, 주민번호), (학번, 이름, 전화 번호) ... 과 같은 부분 집합. 이는 SK가 최소성을 만족하지 않고 유일성만 만족하면 되기 때문. 즉, 요약하면 학번 또는 주민번호가 들어간 어떤 조합이든지 SK가 될 수 있음
그렇다면 후보키는? (학번, 이름)이 후보키가 될 수 있을까? 될 수 없다. 최소성을 만족시키기 위해서는 (학번)이 후보키가 될 수 있다. 그러면 (학번, 주민번호)는 CK가 될 수 있을까? 이것 또한 불가능. 유일성을 만족하면서 최소성이 만족해야하기 때문에 튜플을 유일하게 구분하는 두 속성이 같이 조합되어도 안됨.
그러면 수강표에서 SK(학번, 과목번호)는 CK가 될 수 있을까? (학번)도 (과목번호)도 따로 있을 때는 SK가 안됨. 따라서 이는 CK 가 될 수 있음.
일차 키(PK)의 경우, 후보키중에 하나가 선택 된 키. 따라서 위의 예에서는 만약 후보키 중 학번을 일차 키(PK)로 선택한다면 주민번호는 후보키로 남을 것임.
예) 외래키(FK)
학적: {학번, 이름, 전화번호}
수강: {학번, 과목번호}
수강 테이블의 {학번}이 학적 테이블에서 일차 키임. 수강 테이블의 {학번}을 외래 키라고 함.
그러면 여기서 강의 개설: {과목번호, 교수번호}표에서 {과목번호}가 수강표를 참조하는 FK일까? 수강표의 PK는 {학번, 과목번호}로 과목번호를 포함 하고 있다고? 아니다. 안된다. 대체키를 만들거나 두개 모두 외래키로 지정해줘야한다.
예) 학적=(학번, 소속학과, ...); PK=(학번), FK=(학번) references 학생 정보
학생 정보=(학번, 이름, ...); PK=(학번), FK=(학번) references 학적
이와 같은 경우는 Cyclic reference문제가 생김. 두 표에서 각각 PK=FK이면 두 집합을 하나로 하여 하나의 집합으로 만드는 것이 바람직함...
#PK는 꼭 있을까? 꼭 적어야 하나?
학생 테이블을 참조하는 수강 스키마를 SQL로 나타내면 다음과 같다
create table 수강(학번 char(7), 과목번호 char(7), primary key (학번, 과목번호), foreign key(학번) references 학생);
개념상 SK는 반드시 하나는 있다. minimal SK가 있으며, 그것이 CK가 됨. CK가 있으면 PK도 있다.(개체 집합에 꼭 같은 객체는 없다.)
하지만 SQL(구현부분)에서는 테이블에 PK를 지정하지 않아도 된다. 표 안에 겹치는 투플을 허용할 수도 있고, 허용하지 않을 수도 있다.
#PK, FK는 어디에 쓰나?
- 개체 집합에 PK값이 같은 개체가 둘 이상 있을수 없다.
예) 학생표에서 학번이 같은 사람이 둘 있을 수 없다.
- PK에 대하여 index를 만들 때가 흔히 있는데, PK를 잘 모르면 index를 만들기가 어렵다.(또는 잘못 만든다)
예) 학생표에서 {학번, 이름}을 PK라 잘못 생각하고 index를 {학번, 이름}에 대하여 만들면, 이 index의 활용도가 떨어짐. 왜냐하면, 학번만으로 찾지 못하고, 반드시 학번과 이름을 모두 알아야 이 index를 쓸 수 있음.)
- 참조 무결성(referential integrity)을나타내기 위해 FK가 필요함.
- FK개념은 결국 PK개념을 필요로 한다. 표1의 FK가 표2를 참조하면 -> 표1의 KF = 표 2의 PK
- 뒤에서 배울 FD(Functional Dependency)와 정규화(Normalization) 등에서 쓴다.
'Computer Science > Database' 카테고리의 다른 글
[Chap 6] 도메인, 참조 무결성, 함수적 종속 (0) | 2014.12.04 |
---|---|
[Chap 2-1] 개체-관계 모델(Entity-Relationship model) (0) | 2014.10.12 |
[Chap 1]데이터베이스 기본 개념 및 용어 (0) | 2014.10.12 |