외래 키는 관계형 이론에서 출발한 개념이다. ”한 릴레이션의 외래 키 값은 다른 릴레이션에 존재하는 값이거나 NULL이어야 한다.”는 명제는 E.F.Codd의 관계형 모델이 제시한 참조 무결성 규칙이다.
DBMS는 이 참조 무결성을 구현한다. 그리고 추가적으로, Foreign Key의 참조 대상은 UNIQUE 해야된다. 이것은 이론에는 없는 거지만 DBMS에서 요청.
최소성(minimality): 관계형 이론과 실제 SQL에서의 차이
최소성 (minimality)은 관계형 이론에서 후보 키가 가져야 하는 성질이지, SQL이 강제하는 제약이 아니다. SQL 엔진이 PRIMARY KEY에 대해 실제로 검사하는 건 NOT NULL과 UNIQUE 두 가지뿐이다.
그래서 최소성을 위반하는, 즉 불필요한 컬럼이 포함된 복합 키를 PRIMARY KEY로 지정해도:
CREATE TABLE 학생 (
학번 INT,
이름 VARCHAR(20),
PRIMARY KEY (학번, 이름) -- 학번으로 충분
);
에러 없이 생성된다.
그래서 SQL에서는 이론적으로 최소성을 만족하지 않는 슈퍼 키(즉 후보 키가 아닌 슈퍼 키)도 PRIMARY KEY로 사용 가능하다