如何在SQL Server 2005中表示这种类型的FK关系?

时间:2011-11-03 09:48:45

标签: sql sql-server sql-server-2005 constraints

假设我有两个父表:CompanyContact。假设CompanyContact记录都需要记录0个或更多地址,其中两个记录类型的地址格式相同。这意味着需要第三个表Address,其中应存储地址。

我的问题是,如何使用外键约束来表达CompanyContact以及Address之间的关系,以便CASCADE DELETE之类的内容可以使用? (我猜这意味着我的地址中没有OwnerTable字段。)

我正在使用SQL Server 2005。

2 个答案:

答案 0 :(得分:2)

换句话说


- 每个公司可以有很多地址
- 每个联系人都可以有多个地址


这似乎也暗示每个地址可以多次重复使用:
- 每个地址可以有许多公司/联系人

如果是这种情况,那么你实际上需要一个链接表,允许很多:很多关系。在您的情况下,我有一个公司的链接表(CompanyID,AddressID)和一个联系人的链接表(ContactID,AddressID)。

您可以配置以下内容:删除地址会删除链接表中的所有相应记录。但是,如果删除所有映射的公司和联系人,则删除和地址将需要触发。


如果地址实际上只使用一次,并且您明确希望删除公司/联系人以删除相关地址...
1.再次,使用扳机
2.拥有ContactAddress表和CompanyAddressTable

我不知道任何允许一个表到两个不同表的外键的技巧,并允许两个主表级联删除到单个外表。 SQL Server明确禁止这样做,以防止循环引用中的级联删除。

答案 1 :(得分:0)

如果共享地址,自动级联是否有效?您可以使用INSTEAD OF DELETE触发器正确实现此特殊级联。