有一个客户新crm的场景,他们有供应商和客户,供应商也是客户,反之亦然。每个层次结构的表只允许一个人只有一个或另一个,所以我假设每种类型的表更适合。
db结构将是:
[Contact]
ContactId pk
Name
...
[Client]
ContactId pk / fk
VATNumber
...
[Supplier]
ContactId pk / fk
...
任何人都有类似情况下的任何其他建议或经验吗?
答案 0 :(得分:0)
每种类型的表格还假设一个Contact
是客户端或供应商(如果查看生成的SQL,则更清楚:例如,请参阅"Inheritance with EF Code First CTP5: Part 2 – Table per Type (TPT)")。
相反,我认为您需要将模型更改为具有一对多关系的Contact
和Contact-Role
。 Contact-Role
会有Supplier
和Client
个子类型。然后可以将整个Contact-Role
层次结构映射为TPH或TPT。
这反映了一个OO设计,其中每个客户端都有一个或多个角色(继承,“is-a”的关联,永远是单一的,你不能有一个抽象类型client
的对象同时是两个子类型client
)。
答案 1 :(得分:0)
除非您将其建模为三级继承,否则这将无法工作,这将要求客户始终是供应商或供应商始终是客户。我想这不是你的应用程序中的正确模型,这意味着你不能使用继承。
您必须在contact-client和contact-supplier之间使用一对一(0..1-1)关系,或者只需将所有属性放在单个表中并添加IsClient
和{{ 1}}位列 - 它不是很好,它不太可扩展,但它很容易使用。在关系表示的情况下,这两个位列也是有用的。