以下に定義されているサイト テーブルの複合主キーがあります。機能的には、これは私たちが望んでいるものとまったく同じです。各サイトには、同じ地区の親サイトが必要です。このようにテーブルを定義すると、特にそれが可能になります。
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] の代わりに [partner_district_id] フィールドを FK に含める必要があると主張しています。この設計では、[district_id] = [partner_district_id] を適用するための検証が必要になります。これは、チェック制約またはアプリケーション レベルのロジックで行うことができます。
これらのソリューションまたはその他のソリューションに関するさらなる意見をお待ちしております。