在我们的客户,供应商和分支机构都具有共同的属性(例如地址)的情况下,这是一个更好的解决方案,为什么?

解决方案1:


客户表
供应商表
分支表
地址表,其中CustomerID,VendorID,BranchID的外键为空


解决方案2:


实体表
具有EntityID的客户表
具有EntityID的供应商表
具有EntityID的分支表
具有EntityID和EntityType标志为“ C”,“ V”或“ B”的地址表


解决方案3(由AJC建议):


客户表
供应商表
分支表
地址表
客户和地址之间的CustomerAddress外部参照表
供应商和地址之间的VendorAddress外部参照表
BranchAddress和Address之间的BranchAddress外部参照表


解决方案4(建议9000)


客户表
供应商表
分支表
带FK的CustomerAddress给客户
供应商地址(含FK到供应商)
FK到Branch的BranchAddress
vwAddress,该UNION ALL包含上述每个地址表,并包括类型标志('B','C','V')


笔记:

每个客户,供应商或分支机构可以有多个地址,但至少应有一个。

如果“实体”既是客户又是供应商,则每个角色可以有单独的地址。

想知道客户是否也是供应商。

最佳答案

C)以上都不是。

正确的方法是分别具有一个地址表和一个CustomerAddress,VendorAddress和BranchAddress,以将每个C V B实体与一个或多个地址连接在一起。

对于一对一的属性,显然不需要多余的表,只需将ID添加到主表(AddressId)中即可。

10-07 16:10