我正在为银行设计一个SQL Server 2005数据库来保存与客户(父表)及其投资组合(子表)相关的记录,每个客户都有多个投资组合。到目前为止的表格:
Client (Client_Number PK ...)
Portfolio (Portfolio_ID PK, Client_Number FK ...)
我需要附上一张表来保存相关第三方的记录(例如基金经理,管理员,推广人等)。第三方不确定,可能会发生变化,关系类型也是如此。这些关系显然是多对多的,所以我想的其他表格如下:
Third_Party (Third_Party_ID PK, Third_Party_Name ...)
Relationship (Relationship_ID PK, Third_Party_ID FK, Client_Number FK ...)
这样可以正常工作,但是,第三方可以与投资组合(子表)以及客户(父表)相关。
例如,客户1包含投资组合1和投资组合2.客户1和投资组合1链接到促销1,但投资组合2链接到不同的促销。
对于上述情况的表格设计的最佳实践有什么想法吗?
提前致谢。
答案 0 :(得分:2)
我会去另外两张桌子:
Client_ThirdParty
Portfolio_ThirdParty
哪个将充当两个现有表和'ThirdParty'之间的链接实体。我会避开“关系”表,它看起来像伪装的元数据。
修改强>
例如,客户1具有投资组合1 和投资组合2.客户1和 投资组合1与促销员1相关联 但投资组合2与a相关联 不同的推广者。
你的意思是增加三张桌子吗? ThirdParty,Client_Relationship和 Portfolio_Relationship?我问这个 客户和投资组合 关系是单一的“池” 第三方。
好的,如果还有其他需要考虑的关系,那么你可能需要更多的复杂性(但由于我不知道你的数据,我可能会错过一些东西!):
如果这是正确的,那么:
Client
Portfolio (contains ClientId to refer to its client)
ThirdParty
Client_ThirdParty <-- link entity that handles the Client/ThirdParty M-to-M
Portfolio_ThirdParty <-- link entity that handles the Portfolio/ThirdParty M-to-M