0
我有一個簡單的地址簿,收集人員和公司的信息。 所以我有以下3個表,然後其他類似電子郵件,PHONENUMBER,地址掛鉤聯繫:無法創建外鍵約束
CREATE TABLE [dbo].[Contact] (
[ID] INT IDENTITY (1, 1) NOT NULL,
...
CONSTRAINT [PK_Contatto] PRIMARY KEY CLUSTERED ([ID] ASC)
);
CREATE TABLE [dbo].[Person] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[IdContact] INT NOT NULL,
[IdCompany] INT NULL,
...
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([ID] ASC),
CONSTRAINT [FK_Person_Company] FOREIGN KEY ([IdCompany]) REFERENCES [dbo].[Company] ([ID]) ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT [FK_Person_Contact] FOREIGN KEY ([IdContact]) REFERENCES [dbo].[Contact] ([ID]) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE [dbo].[Company] (
[ID] INT IDENTITY (1, 1) NOT NULL,
[IdContact] INT NOT NULL,
...
CONSTRAINT [PK_Company] PRIMARY KEY CLUSTERED ([ID] ASC),
CONSTRAINT [FK_Company_Contact] FOREIGN KEY ([IdContact]) REFERENCES [dbo].[Contact] ([ID]) ON DELETE CASCADE ON UPDATE CASCADE
);
基本上我想,如果有人刪除聯繫人也與此有關的人/公司都將被刪除。此外,如果有人刪除與某人關聯的公司,則必須將該人的IdCompany設置爲空。
由於「循環創建或附加傳播路徑創建」而無法創建的約束是FK_Person_Contact。
我錯過了什麼?
聯繫人指的是一個人或一個公司。 因此,人員和公司無法引用同一聯繫人。 聯繫多個地址/電話號碼/電子郵件已連接。 Person.IdCompany可能指公司(如果它適用於該公司)。 可能需要將Person.IdCompany連接到該公司的聯繫人,而不是直接連接到公司表? – DkSw 2013-05-10 08:51:28
您可能會更好地將聯繫人與個人和個人鏈接到公司。換句話說,聯繫人是可以或不可以爲公司工作的人;聯繫人通過人員鏈接到公司。您仍然可以從人員 - 公司鏈接找到與公司相關的所有人員。 – 2013-05-10 10:00:27
對不起,不能這樣做。該地址簿鏈接到屬於租用服務的較大數據庫,因此聯繫人可能僅指公司而不涉及任何參考人員。聯繫人可能是租車的人或租車的公司的人。一個人偶爾可能會爲一家公司工作,但也可以爲了私人目的租車。你怎麼看我說的?人員FK只能通過公司聯繫方式與FK聯繫,而不是直接像現在一樣。所以沒有更多的三角測量,但都以「V」模式通過聯繫表。合法的? – DkSw 2013-05-10 10:12:54