데이터베이스 키의 종류
키(Key)란? : 유일성과 최소성을 만족해야함 →즉 중복된 값이 없어야하며 null값을 가질수 없음 따라서 무언가를 식별하는 고유한 식별자(identifier) 기능을 한다.
유일성 : key하나로 튜플이 식별
최소성 : 꼭 필요한 속성으로 구성 무슨 뜻이냐면, 키가 (학번,이름,학과) 이렇게 3개로 구성되었을때 키는 될수있지만 최소성을 만족하지못함 학번은 중복된 값이 올수없지만 이름과 학과는 중복된 값을 갖기 때문에 학번 하나만으로 튜플을 식별 할 수있음
키의종류
후보키 : Tuple을 유일하게 포착하기 위해 사용하는 속성들의 부분 집합 유일성, 최소성 만족함
아래 사진과 같이 (학번 or 주민번호)가 후보키가 될수있고 아직 학번과 주민번호중 기본키로 선택되지 않음
기본키 : 후보키중 선택된것 (1개만 선택됨)
대체키 : 후보키중 선택되지 않은것들(1개이상)
후보키들중에 학번을 선택해서 학번이 기본키 이며 주민번호는 선택되지 않았기에 대체키가됨
슈퍼키 : 유일성만 만족하고 최소성을 만족하지 못한키 최소성의 반대개념이라고 생각하면됨 아래사진처럼 (학번, 이름,나이) 혹은 (학번 ,이름) 이런식으로 필요없는 컬럼까지 부가적으로 가질수있음
외래키 : 다른 릴레이션의 기본 키를 그대로 참조하는 속성의 집합
다른 테이블의 데이터를 참조할 때 없는 값을 참조할 수 없도록 제약을 주는 것이다.
복합키(Composite Key)
하나의 속성으로는 기본키가 될 수 없는 경우는 둘 이상의 컬럼을 묶어 식별자로 정의해야 하는데, 이를 복합키라고 한다. 이슈는 복합키 중에 어떤 컬럼을 먼저 둘 것인가 하는 것이다. 컬럼을 기본키로 정의하게 되면 기본적으로 해당 컬럼에 유니크한 클러스터드 인덱스가 정의되어지며, 이럴 경우 먼저 정의한 컬럼을 기준으로 인덱스가 생성되기 때문에 복합키 중에서 주로 조회의 조건으로 사용되는 컬럼을 먼저 정의하는 것이 성능 향상을 위해 도움이 된다.
복합키 생성방법 :
1
2
3
4
5
6
7
|
create table shop (
address varchar(20) unique not null,
name varchar(20) unique not null,
tel varchar(20),
type varchar(20) unique not null,
primary key(address,name,type)
)
|
cs |
이렇게 3가지의 속성으로 복합키를 구성할수있음