假设我有两个父表:Company
和Contact
。假设Company
和Contact
记录都需要记录0个或更多地址,其中两个记录类型的地址格式相同。这意味着需要第三个表Address
,其中应存储地址。
我的问题是,如何使用外键约束来表达Company
和Contact
以及Address
之间的关系,以便CASCADE DELETE
之类的内容可以使用? (我猜这意味着我的地址中没有OwnerTable
字段。)
我正在使用SQL Server 2005。
答案 0 :(得分:2)
:
- 每个公司可以有很多地址
- 每个联系人都可以有多个地址
这似乎也暗示每个地址可以多次重复使用:
- 每个地址可以有许多公司/联系人
如果是这种情况,那么你实际上需要一个链接表,允许很多:很多关系。在您的情况下,我有一个公司的链接表(CompanyID,AddressID)和一个联系人的链接表(ContactID,AddressID)。
您可以配置以下内容:删除地址会删除链接表中的所有相应记录。但是,如果删除所有映射的公司和联系人,则删除和地址将需要触发。
如果地址实际上只使用一次,并且您明确希望删除公司/联系人以删除相关地址...
1.再次,使用扳机
2.拥有ContactAddress表和CompanyAddressTable
我不知道任何允许一个表到两个不同表的外键的技巧,并允许两个主表级联删除到单个外表。 SQL Server明确禁止这样做,以防止循环引用中的级联删除。
答案 1 :(得分:0)
如果共享地址,自动级联是否有效?您可以使用INSTEAD OF DELETE触发器正确实现此特殊级联。