데이터베이스 키: Difference between revisions
From CS Wiki
(외부 키 성질에 대한 잘못된 서술 수정) |
No edit summary |
||
Line 10: | Line 10: | ||
== 종류 == | == 종류 == | ||
간단히 정리하면 슈퍼 키는 유일성만 충족하고, 나머지 후보 키, 기본 키, 대체 키 3개는 유일성, 최소성을 모두 만족하는, 키가 되기 위한 능력 자체는 동일하다. 다만 비즈니스적인, 그리고 모델링적인 목적에 따라 그 중 하나가 기본 키가 되고 나머지가 대체 키가 되는 것 뿐이다. 외부 키는 결국 다른 릴레이션의 PK를 참조하는 다른 개념이므로 아래 설명 참고. | |||
=== 슈퍼 키(Super Key) === | === 슈퍼 키(Super Key) === | ||
* 어떤 릴레이션의 어떠한 튜플들도 같은 값을 가지지 않는 속성, 또는 속성들의 조합 | * 어떤 릴레이션의 어떠한 튜플들도 같은 값을 가지지 않는 속성, 또는 속성들의 조합 | ||
* 유일성 O / 최소성<ref>최소성은 단순히 집합의 개수를 얘기하는 것이 아니라, 속성 집합에서 하나의 속성을 제거하는 경우 더 이상 해당 속성 집합이 릴레이션의 튜플을 식별할 수 없는 것을 말한다</ref> X | * '''유일성 O / 최소성<ref>최소성은 단순히 집합의 개수를 얘기하는 것이 아니라, 속성 집합에서 하나의 속성을 제거하는 경우 더 이상 해당 속성 집합이 릴레이션의 튜플을 식별할 수 없는 것을 말한다</ref> X''' | ||
=== 후보 키(Candidate Key) === | === 후보 키(Candidate Key) === | ||
* Tuple을 유일하게 식별하기 위해 사용되는 속성들의 부분집합 | * Tuple을 유일하게 식별하기 위해 사용되는 속성들의 부분집합 | ||
* 유일성 O / 최소성 O | * '''유일성 O / 최소성 O / Not Null''' | ||
=== [[데이터베이스 기본 키|기본 키(Primary Key)]] === | === [[데이터베이스 기본 키|기본 키(Primary Key)]] === | ||
* 후보키 중 선정된 Key | * 후보키 중 선정된 Key | ||
* | * '''유일성 O / 최소성 O / Not Null''' | ||
=== 대체 키(Alternate Key) === | === 대체 키(Alternate Key) === | ||
* 후보 키 중 선정된 기본 키를 뺀 나머지 키들 | * 후보 키 중 선정된 기본 키를 뺀 나머지 키들 | ||
* 유일성 O / 최소성 O | * '''유일성 O / 최소성 O / Not Null''' | ||
=== 외부 키(Foreign Key)=== | === 외부 키(Foreign Key)=== | ||
Line 45: | Line 47: | ||
|김씨 | |김씨 | ||
|30 | |30 | ||
|[/cdn-cgi/l/email-protection <nowiki>[email protected]</nowiki>] | |||
|- | |- | ||
|200 | |200 | ||
|김씨 | |김씨 | ||
|41 | |41 | ||
|[/cdn-cgi/l/email-protection <nowiki>[email protected]</nowiki>] | |||
|- | |- | ||
|300 | |300 | ||
|이씨 | |이씨 | ||
|38 | |38 | ||
|[/cdn-cgi/l/email-protection <nowiki>[email protected]</nowiki>] | |||
|- | |- | ||
|400 | |400 | ||
|박씨 | |박씨 | ||
|29 | |29 | ||
|[/cdn-cgi/l/email-protection <nowiki>[email protected]</nowiki>] | |||
|} | |} | ||
Line 70: | Line 72: | ||
* (사번, 이름, 나이) | * (사번, 이름, 나이) | ||
* (사번, 이름, 나이, 이메일) | * (사번, 이름, 나이, 이메일) | ||
* (이름, 나이) | * (이름, 나이)<ref>일반적인 데이터베이스에선 아니겠지만 만약 "이름+나이"로 모든 사람이 고유학게 식별이 된다면 키가 될 수 있다. 여기선 그렇다고 가정한다.</ref> | ||
* (이름, 나이, 이메일) | * (이름, 나이, 이메일) | ||
* (이메일) | * (이메일) | ||
Line 78: | Line 80: | ||
* (사번) | * (사번) | ||
* (이름, 나이) | * (이름, 나이)<ref>이름+나이 2개 필드 조합이지만, 불필요한 다른 조합이 없고 조합이 더 이상 줄어들 수 없다면 이 또한 최소성을 만족한다고 볼 수 있다.</ref> | ||
* (이메일) | * (이메일) | ||
Line 86: | Line 88: | ||
* 기본 키: (사번) | * 기본 키: (사번) | ||
* 대체 키: (이름, 나이), (이메일) | * 대체 키: (이름, 나이), (이메일) | ||
== 각주 == | |||
<references /> |
Revision as of 12:39, 13 October 2024
- Database Key
- 릴레이션의 튜플을 식별하기 위한 속성의 집합
특징
- 유일성: 유일한 값을 가져야 한다.
- 최소성: 최소한의 값으로 식별할 수 있어야 한다.
- 불변성: 변하는 값이어선 안된다.
- 존재성: 반드시 존재해야 한다. 누구한텐 있고 누구한테는 없어선 안된다.
종류
간단히 정리하면 슈퍼 키는 유일성만 충족하고, 나머지 후보 키, 기본 키, 대체 키 3개는 유일성, 최소성을 모두 만족하는, 키가 되기 위한 능력 자체는 동일하다. 다만 비즈니스적인, 그리고 모델링적인 목적에 따라 그 중 하나가 기본 키가 되고 나머지가 대체 키가 되는 것 뿐이다. 외부 키는 결국 다른 릴레이션의 PK를 참조하는 다른 개념이므로 아래 설명 참고.
슈퍼 키(Super Key)
- 어떤 릴레이션의 어떠한 튜플들도 같은 값을 가지지 않는 속성, 또는 속성들의 조합
- 유일성 O / 최소성[1] X
후보 키(Candidate Key)
- Tuple을 유일하게 식별하기 위해 사용되는 속성들의 부분집합
- 유일성 O / 최소성 O / Not Null
기본 키(Primary Key)
- 후보키 중 선정된 Key
- 유일성 O / 최소성 O / Not Null
대체 키(Alternate Key)
- 후보 키 중 선정된 기본 키를 뺀 나머지 키들
- 유일성 O / 최소성 O / Not Null
외부 키(Foreign Key)
- 다른 릴레이션의 Primary Key를 참조하는 속성
- 중복 여부에 따라
- 중복인 경우, 일대다 관계(One-to-Many Relationship)
- 중복이 아닌 경우, 일대일 관계(One-to-One relationship)
- Not Null 여부에 따라
- Not Null인 경우, 필수 관계(Mandatory Relationship)
- Nullable인 경우, 선택 관계(Optional Relationship)
예시
사번 | 이름 | 나이 | 이메일 |
---|---|---|---|
100 | 김씨 | 30 | [/cdn-cgi/l/email-protection [email protected]] |
200 | 김씨 | 41 | [/cdn-cgi/l/email-protection [email protected]] |
300 | 이씨 | 38 | [/cdn-cgi/l/email-protection [email protected]] |
400 | 박씨 | 29 | [/cdn-cgi/l/email-protection [email protected]] |
슈퍼 키 목록
릴레이션의 튜플을 식별할 수 있는 모든 속성 집합
- (사번)
- (사번, 이름)
- (사번, 이름, 나이)
- (사번, 이름, 나이, 이메일)
- (이름, 나이)[2]
- (이름, 나이, 이메일)
- (이메일)
후보 키 목록
슈퍼 키 중 최소성을 만족하는 속성 집합
- (사번)
- (이름, 나이)[3]
- (이메일)
기본 키와 대체 키
설계자의 판단에 따라 구분
- 기본 키: (사번)
- 대체 키: (이름, 나이), (이메일)