728x90
키의 개요
- 키 (Key)
- 키 란?
- 릴레이션에서 투플을 구별할 수 있게 하는 유일한 속성 (집합)
- 릴레이션 간의 관계를 맺는데 사용
- 키의 특성
- 한 릴레이션에서 투플의 키는 같은 값을 가질 수 없다 (유일성)
- 최소한의 속성들로만 키를 구성해야 한다 (최소성)
- 키의 종류
- 수퍼키 (Super Key)
- 후보키 (Candidate Key)
- 기본키 (Primary Key)
- 대체키 (Alternate Key)
- 외래키 (Foreign Key)
- 대리키 (Surrogate Key)
- 키 란?
- 키의 종류
- 수퍼키 (Super Key)
- 투플을 유일하게 식별할 수 있는 속성들의 집합 (유일성)
- 하나의 릴레이션에서 키로 지정된 속성의 값은 투플마다 달라야 한다.
- 투플을 유일하게 식별할 수 있는 값이면 모두 수퍼키가 될 수 있다
- 예 : 사원 명부
- 사번 : 사원별로 유일한 값으로 부여되므로, 투플을 구별할 수 있다
- 직책 : 같은 직책이 존재할 수 있으므로, 투플을 구별할 수 없다
- 이름 : 같은 이름이 존재할 수 있으므로, 투플을 구별할 수 없다
- 생년월일 : 생일이 같을 수 있으므로, 투플을 구별할 수 없다
- 주소 : 주소가 같을 수 있으므로, 투플을 구별할 수 없다
- 사원 명부의 슈퍼 키 : 사번을 포함하는 속성의 집합
- (사번), (사번, 직책), (사번, 이름), (사번, 생년월일), (사번, 주소), (사번, 직책, 이름), (사번, 직책, 생년월일), (사번, 직책, 주소), (사번, 이름, 생년월일), (사번, 이름, 주소), (사번, 생년월일, 주소), (사번, 직책, 이름, 생년월일), (사번, 직책, 이름, 주소), (사번, 이름, 생년월일, 주소), (사번, 직책, 생년월일, 주소), (사번, 직책, 이름, 생년월일, 주소)
- 투플을 유일하게 식별할 수 있는 속성들의 집합 (유일성)
- 후보키 (Candidate Key)
- 투플을 식별할 수 있는 속성들의 최소 집합 (최소성)
- 하나의 속성으로 구성된 키 : 최소성을 만족하여 후보키로 가장 좋다.
- 수퍼키 중에서 최소성을 만족하는 키
- 후보키는 유일성과 최소성을 만족하여야 한다.
- 후보키의 특성은 투플이 삽입, 수정되어도 유지되어야 한다.
- 예 : 사원 릴레이션
- 사번 : 후보키로 가장 좋다.
- (직책, 이름), (직책, 이름, 생년월일) - 유일성을 만족 못하는 경우 발생하므로 후보키가 될 수 없다.
- 기본키 (Primary Key)
- 후보키 중에서 하나를 선정하여 사용하는 대표키
- 후보키가 하나일 경우 : 기본키
- 후보키가 여러 개 일 경우 : 릴레이션의 특성을 반영하여 하나를 선택
- 기본 키 선정시 주의 사항
- 유일성과 최소성을 만족하여야 한다.
- NULL 값을 가질 수 있는 속성은 부적합하다.
- 값이 바뀌지 말아야 한다.
- 가장 단순한 후보키를 선택한다.
- 릴레이션 스키마를 표현할 때, 기본키는 속성에 밑줄로 표시한다.
- 릴레이션이름( 속성1, 속성2, … , 속성N )
- 예 : 사원 릴레이션
- 사원( 사번, 직책, 이름, 생년월일, 주소 )
- 사원( 사번, 직책, 이름, 생년월일, 주소 ) : 대부분의 경우, 이름+주소는 기본키로 가능하지만, 투플을 구별할 수 없는 경우가 발생될 수도 있다.
- 후보키 중에서 하나를 선정하여 사용하는 대표키
- 대체키 (Alternate Key)
- 기본키로 선택되지 못한 후보키
- 외래키
- 다른 릴레이션의 기본키를 참조하는 속성(집합)
- 관계 데이터 모델의 특징인 릴레이션간의 관계(Relationship)을 표현
- 특징
- 관계 데이터 모델의 릴레이션 간의 관계를 표현
- 다른 릴레이션의 기본키를 참조하는 속성
- 외래키와 기본키의 도메인은 같아야 한다.
- NULL 값이 허용되며, 중복되어도 된다.
- 외래키가 기본키의 일부가 될 수 있다.
- 외래키가 참조되는 릴레이션의 기본키가 아닐 경우
- 외래키는 다른 릴레이션에서 하나의 투플을 구별하여야 함
- 참조되는 릴레이션의 투플을 구별할 수 없는 경우가 발생
- 외래키가 자신이 속한 릴레이션의 기본키를 참조하도록 외래키를 정의할 수 있다.
- 대리키 (Surrogate Key) / 인조키 (Artificial Key)
- 일련번호와 같은 가상의 속성을 만들어 기본키로 사용하는 키
- 대리키를 사용하는 경우
- 기본키가 유출되어서는 안될 경우
- 여러 개의 속성으로 구성되어 복잡할 경우
- 마땅한 기본키가 없을 경우
- 대리키는 DBMS가 임의로 생성하는 값으로 사용자가 직관적으로 알 수 없다.
- 수퍼키 (Super Key)
728x90
'프로그래밍 > Database' 카테고리의 다른 글
[Database] 관계 대수 (0) | 2020.04.06 |
---|---|
[Database] 관계 데이터 모델, 제약 조건 (0) | 2020.04.06 |
관계 데이터 모델, 릴레이션 (0) | 2020.04.06 |
[Database] 약한 개체와 IE표기법 (0) | 2020.04.06 |
[MySQL/MariaDB] CASE WHEN 사용법 (0) | 2020.04.05 |