2

SQL Server에 두 개의 테이블이 있습니다. 1 개 관계 :복합 기본 키의 일부로 외래 키 사용

CREATE TABLE Jobs(
JobNumber bigint PRIMARY KEY) 

번째 테이블이 채용 '구성 요소와 (1)의 모든 목록이다 : 다음 선언 기본 키를 가지는, 개별 작업에 속한 하나 개의 관계 : 제 모든 1 .

각 구성 요소는 외래 키인 작업 번호로 단일 작업을 참조하며 여러 구성 요소가 동일한 작업을 참조 할 수 있습니다. 구성 요소는 작업 내에서 1, 2, 3 등으로 번호가 매겨집니다.

것이 가능하고, 기본 키 (JobNumber, ComponentNumber)으로 구성 될 수 있도록 다음과 같이 2 차 테이블의 복합체 주요 키 내의 열 JobNumber (외래 키)를 사용하는 것이 합리적이다

CREATE TABLE Components(
    JobNumber bigint FOREIGN KEY REFERENCES Jobs(JobNumber) NOT NULL, 
    ComponentNumber int NOT NULL, 
    PRIMARY KEY(JobNumber, ComponentNumber) 
) 

다른 옵션은 물론 대리형 기본 키를 사용하지만 JobNumberComponentNumber의 조합에 고유성 제약 조건을 적용하지 않습니다 (두 번째 테이블의 두 레코드에 JobNumber=1ComponentNumber=1이있을 수 있음). 따라서 복합 자연 기본 키를 사용하는 것을 선호합니다.

답변

1

물론 이죠? 복합 기본 키를 사용하지 않을 이유가 없습니다. 당신이 테이블의 기본 키의 절반을 참조 할 수 없습니다 -

유일한 작은 단점은 Components 테이블을 참조 할 필요가 다른 테이블은 이제 이 외래 키 관계를 설정 모두 열을 사용한다는 것입니다.

또한 : 당신이 당신의 PK로 별도의 대리 열을 사용하기로 선택한다면, 당신은 항상 ....

고유 제한 조건로 ( JobNumber, ComponentNumber)를 고유성 적용 할 수 있습니다