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

问题描述:

我正在为银行设计一个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

全都是你的钥匙的相同数据类型? – 2010-12-06 15:53:03

+0

是的,所有的键都是int。 – Aphillippe 2010-12-06 16:20:20

我会去的两个附加表:

Client_ThirdParty 
Portfolio_ThirdParty 

这将作为现有的两个表,“第三方”之间的链路实体。我会避开看起来像变相的元数据的'关系'表。

EDIT

例如,客户机1具有组合1 与组合2.客户端1和 组合1被链接到启动子1 但组合2被连接到一个不同 启动子。

你的意思是三个附加表吗? ThirdParty,Client_Relationship和 Portfolio_Relationship?我问这个问题: 客户和投资组合 的关系都是关于第三方的单一“池” 。

OK,如果有进一步的关系来考虑,那么你可能需要更复杂(但我不知道你的数据我可能会错过什么!):

  • 客户可以有多种投资组合
  • 客户可以有很多ThirdPartys
  • 投资组合可以有1个客户?
  • 投资组合可以有很多ThirdPartys
  • ThirdPartys可以有很多客户
  • ThirdPartys可以MAVE许多投资组合

如果这是正确的,那么:

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