数据库设计:与父表和子表相关的第三个表

时间:2010-12-06 15:50:15

标签: sql database sql-server-2005 database-design

我正在为银行设计一个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链接到不同的促销。

对于上述情况的表格设计的最佳实践有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

我会去另外两张桌子:

Client_ThirdParty
Portfolio_ThirdParty

哪个将充当两个现有表和'ThirdParty'之间的链接实体。我会避开“关系”表,它看起来像伪装的元数据。

修改

  

例如,客户1具有投资组合1   和投资组合2.客户1和   投资组合1与促销员1相关联   但投资组合2与a相关联   不同的推广者。

     

你的意思是增加三张桌子吗?   ThirdParty,Client_Relationship和   Portfolio_Relationship?我问这个   客户和投资组合   关系是单一的“池”   第三方。

好的,如果还有其他需要考虑的关系,那么你可能需要更多的复杂性(但由于我不知道你的数据,我可能会错过一些东西!):

  • 客户可以拥有多个投资组合
  • 客户可以拥有多个ThirdPartys
  • 投资组合可以拥有1个客户?
  • 投资组合可以有很多ThirdPartys
  • ThirdPartys可以拥有多个客户端
  • ThirdPartys可以为很多投资组合提供服务

如果这是正确的,那么:

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