0

我有一个收集人员和公司信息的简单地址簿。所以我有以下 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
);

基本上我希望如果有人删除一个联系人,与之关联的个人/公司也将被删除。此外,如果有人删除了与某人关联的公司,则必须将 person 的 IdCompany 设置为 null。

由于“创建循环或创建附加传播路径”而无法创建的约束是 FK_Person_Contact。

我错过了什么?

4

1 回答 1

0

我怀疑“循环创建”是因为 Person 表引用了 Contact 表和 Company 表,而 Company 表也引用了 Contact 表。

个人记录和公司记录可以引用不同的联系人记录吗?

人员 A -> 联系人 A -> 公司 A -> 联系人 B

或者个人记录和公司记录是否应该引用同一个联系人?

人员 A -> 联系人 A -> 公司 A -> 联系人 A

联系人、人员和公司之间的关系如何定义?

  • 1 联系人有很多人?
  • 1 联系人有很多公司?
  • 1 个人有很多联系人?
  • 1人有1家公司?
  • 1人有很多公司?
  • 1 公司有很多联系人?
  • 1 公司有很多人?

您可能需要考虑一个或多个链接表来正确建模关系。

于 2013-05-10T08:36:31.873 回答