我有一个简单的地址簿,可以收集人员和公司信息。 所以我有以下3个表,然后是其他像电子邮件,电话号码,地址链接到联系人:
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。
我错过了什么?
答案 0 :(得分:0)
我怀疑'循环创建'是因为Person表引用了Contact表而Company表和Company表也引用了Contact表。
人员记录和公司记录可以引用不同的联系人记录吗?
人A - >联系A. - >公司A - >联系B
或者人员记录和公司记录是否应该引用相同的联系人?
人A - >联系A. - >公司A - >联系A
联系人,人员和公司之间的关系如何定义?
您可能需要考虑一个或多个链接表来正确建模关系。