Wir haben einen zusammengesetzten Primärschlüssel für die unten definierte Standorttabelle. Funktional funktioniert das genau so, wie wir es gerne hätten. Jeder Standort sollte eine übergeordnete Website desselben Bezirks haben. Die Definition der Tabelle auf diese Weise ermöglicht dies speziell.Zusammengesetzter Schlüssel für eine selbst referenzierende Tabelle
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])
Meine spezifische Frage bezieht sich auf den selbst-referenzierenden FK definiert auf einer zusammengesetzten PK. Ich habe ein paar Meinungen zu diesem bestimmten Design gehört und sie neigen dazu, widersprüchlich zu sein. Manche mögen es besonders, weil es innerhalb eines allgemeinen Verständnisses von zusammengesetzten Schlüsseln so funktioniert, wie es sollte. Andere bestehen darauf, dass es theoretisch falsch ist und dass es auch ein Feld [partner_district_id] geben sollte, das im FK statt in [district_id] enthalten ist. Dieser Entwurf würde eine Validierung erfordern, um das [district_id] = [partner_district_id] zu erzwingen, was entweder mit einer Prüfbeschränkung oder einer Logik auf Anwendungsebene erfolgen könnte.
Weitere Meinungen zu diesen oder anderen Lösungen sind willkommen.
Benennung Kommentar ... Ist die Site_Id nicht eindeutig? Weil der Name Site_id andeutet, dass es iut ist. Wenn es nur in Kombination mit District_Id eindeutig ist, dann wird es vielleicht falsch benannt ... es könnte klarer sein, wenn es site_Sequence oder District_site_No oder etwas anderes wäre ... –