키와 인덱스를 먼저 구분 해 봅시다. 키는 논리 모델의 일부이며 종종 고유 인덱스로 구현됩니다. 그러나 키를 만들지 않고 고유 인덱스를 만들 수 있지만 외래 키로 참조 할 수는 없습니다.
후보 키는 테이블에서 행을 고유하게 식별하는 것입니다. SQL에서 후보 키 중 하나는 일반적으로 기본 키로 사용됩니다 (ck 중 하나가 다른 것보다 "더 나은"이유를 실제로 이해하지는 못했지만 다른 것은 아닙니다. 이야기), 나머지 ck는 독특한 제약이됩니다.
고유 키 제약 조건은 기본 키와 동일한 방식으로 사용할 수 있습니다. 치다:
create table A ( x ... not null
, y ... not null
, z ... not null
, unique (x)
, primary key (y,z) );
create table B ( x ...
, ...
, foreign key (x) references A (x) );
create table C ( y ...
, z ...
, ...
, foreign key (y, z) references A (y, z) );
B는 고유 제한 조건을 참조하고 C는 기본 키 제한 조건을 참조합니다.
NOT NULL은 또 다른 종류의 제약입니다. 귀하의 경우 이메일을 고유하게 선언하지 않고 이메일에 적용 할 수 있습니다.
게시물의 다음 측면은 키의 안정성과 관련이 있습니다. 키는 안정적이어야합니다 (그러나 절대 변경할 수는 없으며 변경할 수는 없습니다). 일부 DBMS는 ON UPDATE CASCADE를 구현하여 이러한 작업에 도움이 될 수 있지만 모델에 키가 분산되어 있으면 업데이트가 어려울 수 있습니다.
귀하의 경우 다른 후보 키를 기본 키로 선택하고 이메일을 NOT NULL 및 UNIQUE로 선언합니다.