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

Sql 数据库设计:与父表和子表相关的第三个表,sql,database,sql-server-2005,database-design,Sql,Database,Sql Server 2005,Database Design,我正在为银行设计一个SQLServer2005数据库,用于保存与客户(父表)及其投资组合(子表)相关的记录,每个客户机都有多个投资组合。到目前为止的表格: Client (Client_Number PK ...) Portfolio (Portfolio_ID PK, Client_Number FK ...) 我需要包括一个表格,用于保存相关第三方(如基金经理、管理员、发起人等)的记录。与关系类型一样,第三方不确定且易于变更。这些关系显然是多对多的,因此我考虑了以下附加表格: Third

我正在为银行设计一个SQLServer2005数据库,用于保存与客户(父表)及其投资组合(子表)相关的记录,每个客户机都有多个投资组合。到目前为止的表格:

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链接到不同的发起人

在上述情况下,您对桌子设计的最佳实践有何想法


提前谢谢。

我想再要两张桌子:

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

编辑

例如,客户机1有投资组合1 和投资组合2。客户1和 投资组合1与发起人1关联 但投资组合2与 不同的启动子


你是说增加三张桌子吗? 第三方、客户关系和 投资组合与你的关系?我这样问是因为 客户和投资组合 关系是指单个“池” 第三方

<>当然,如果有更多的关系要考虑,那么你可能需要更多的复杂性(但是,因为我不知道你的数据,我可能会错过一些东西):

  • 客户可以有很多投资组合
  • 客户可以有许多第三方
  • 投资组合可以有一个客户
  • 投资组合可以有许多第三方
  • 第三方可以有很多客户
  • 第三方可以拥有许多投资组合
如果这是正确的,那么:

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
客户端
公文包(包含引用其客户的ClientId)
第三方

客户端\第三方您所有的密钥都是相同的数据类型吗?您是说另外三个表吗?第三方、客户关系和投资组合关系?我这样问是因为客户和投资组合的关系都是针对单一的第三方的。编辑很好地澄清了问题,谢谢。这就是我所想的方法。谢谢