아래 정의 된 사이트 테이블에 대한 복합 기본 키가 있습니다. 기능적으로 이것은 우리가 원했던 것과 똑같습니다. 각 사이트에는 동일한 지구의 학부모 사이트가 있어야합니다. 이 방법으로 테이블을 정의하면 특별히이를 허용합니다.자체 참조 테이블의 복합 키
CREATE TABLE [dbo].[site](
[site_number] [nvarchar](50) NOT NULL,
[district_id] [bigint] NOT NULL,
[partner_site_number] [nvarchar](50) NULL,
CONSTRAINT [PK_site] PRIMARY KEY CLUSTERED
(
[site_number] ASC,
[district_id] ASC
)
ALTER TABLE [dbo].[site] WITH CHECK ADD CONSTRAINT [FK_site_site] FOREIGN KEY([partner_site_number], [district_id])
내 구체적인 질문은 복합 PK에 정의 된 자기 참조 FK에 관한 것입니다. 나는이 특별한 디자인에 대해 몇 가지 의견을 들었고 서로 충돌하는 경향이있다. 일부는 특히 복합 키에 대한 일반적인 이해 내에서 기능해야하기 때문에이를 좋아합니다. 이론적으로 부정확하고 [district_id] 대신 FK에 포함 된 [partner_district_id] 필드가 있어야한다고 주장하는 학자도 있습니다. 이 설계는 [district_id] = [partner_district_id]가 점검 제한 조건 또는 응용 프로그램 레벨 논리로 수행 될 수 있도록 유효성을 검사해야합니다.
이러한 솔루션이나 다른 의견에 대한 의견은 감사하겠습니다.
명명 코멘트 ... Site_Id 자체가 고유하지 않습니까? 왜냐하면 Site_id라는 이름은 iut이라는 것을 의미하기 때문입니다. District_Id와 결합하여 유일한 경우 다음과 같이 잘못 명명되었을 수 있습니다. site_Sequence 또는 District_site_No 또는 기타 항목 인 경우 명확해질 수 있습니다 ... –