아니.
적어도 외래 키의 목적으로 단일 필드 키가 복합 키보다 열등한 경우가 있다고 분명히 말하고 싶습니다 . 즉, 원하는 경우 단일 필드 대리 키를 가져서는 안된다는 말은 아니지만 기본적으로 외래 키의 대상으로 가장 많이 사용되는 키를 기본 키라고합니다.
다음 예제에서 요점을 설명하려고 시도합니다.
brand
예를 들어 포드, 토요타 등
dealer
브랜드에 묶여있는 실제 대리점입니다 (예 : Ford 대리점 만 판매하는 Ford 대리점)
model
Ford Focus, Ford Fiesta 등 자동차의 유형입니다.
stock
각 대리점의 현재 앞마당 차량 수입니다.
우리가 하나의 필드 대리 키를 생성하는 경우에 대한 dealer
그리고 model
다음과 같이 :
create table brand( brand_id integer primary key );
create table dealer( dealer_id integer primary key,
brand_id integer references brand )
create table model( model_id integer primary key,
brand_id integer references brand )
create table stock( model_id integer references model,
dealer_id integer references dealer,
quantity integer,
primary key(model_id, dealer_id) )
stock
Ford dealer
를 "Toyota"모델에 연결하는 행을 삽입 할 수 있습니다 . 추가 brand_id references brand
에 stock
유일한 문제 악화시킨다. 반면에 외래 키를 기본 키의 일부로 다음과 같이 유지하는 경우 :
create table brand( brand_id integer primary key );
create table dealer( brand_id integer references brand,
dealer_id integer,
primary key(brand_id, dealer_id) )
create table model( brand_id integer references brand,
model_id integer,
primary key(brand_id, model_id) )
create table stock( brand_id integer,
model_id integer,
dealer_id integer,
quantity integer,
primary key(brand_id, model_id, dealer_id),
foreign key(brand_id, model_id) references model,
foreign key(brand_id, dealer_id) references dealer )
이제 "포드"딜러가 "포드"자동차 만 재고를 보유 할 수 있다는 규칙이 모델에 의해 자연스럽게 적용됩니다.
'복합 키'예에서 dealer_id
선호도에 따라 고유하거나 고유하지 않을 수 있습니다. 고유해야 할 필요는 없지만 (예 : 대체 키) 키를 너무 적게 잃어 버리면 (아마도 약간의 저장 공간), 일반적으로 설정 한 방식과 같이 매우 편리 할 수 있습니다. 예 :
create table dealer( brand_id integer references brand,
dealer_id serial unique,
primary key(brand_id, dealer_id) )