2010-12-06 18 views
2

Je suis en train de concevoir une base de données SQL Server 2005 pour une banque contenant des enregistrements relatifs aux clients (table parent) et leurs portefeuilles (table enfant), chaque client ayant plusieurs portefeuilles. Tables à ce jour:Conception de la base de données: troisième table relative aux tables parent et enfant

Client (Client_Number PK ...) 

Portfolio (Portfolio_ID PK, Client_Number FK ...) 

je dois inclure une table de tenir des dossiers pour les tiers concernés (par exemple Fonds gérant, administrateur, promoteur, etc.). Les tiers sont indéterminés et susceptibles de changer, tout comme les types de relations. Les relations sont évidemment beaucoup à beaucoup, donc je pensais tables supplémentaires comme suit:

Third_Party (Third_Party_ID PK, Third_Party_Name ...) 
Relationship (Relationship_ID PK, Third_Party_ID FK, Client_Number FK ...) 

Cela fonctionne très bien, mais les tiers peuvent être liés à des portefeuilles (tableau des enfants), ainsi que les clients (table des parents). Par exemple, Client 1 a Portfolio 1 et Portfolio 2. Client 1 et Portfolio 1 sont liés au Promoteur 1, mais Portfolio 2 est lié à un Promoteur différent.

Une idée de bonne pratique pour la conception de table pour la situation ci-dessus?

Merci d'avance.

+0

-ce que tous vos clés les mêmes données type? –

+0

oui, toutes les touches sont int. – Aphillippe

Répondre

2

Je pencherais pour deux tables supplémentaires:

Client_ThirdParty 
Portfolio_ThirdParty 

qui agirait comme entités de lien entre les deux tables existantes et « ThirdParty ». Je voudrais éviter la table 'Relation' qui ressemble à des métadonnées déguisées.

EDIT

Par exemple, le client 1 a portefeuille 1 et portefeuille 2. Client 1 et Portfolio 1 sont liés au promoteur 1 mais Portfolio 2 est lié à un autre promoteur .

Voulez-vous dire trois tables supplémentaires? Third Party, Client_Relationship et Portfolio_Relationship? Je demande cela comme les relations client et portefeuille sont à un seul «pool» de tiers.

OK, s'il y a d'autres relations à considérer, alors vous devrez peut-être plus de complexité (mais comme je ne sais pas vos données que je peut manquer quelque chose!):

  • Les clients peuvent avoir de nombreux portefeuilles
  • Les clients peuvent avoir plusieurs tiers
  • Les portefeuilles peuvent avoir 1 client?
  • Portefeuilles peuvent avoir de nombreux ThirdPartys
  • ThirdPartys peuvent avoir de nombreux clients
  • ThirdPartys peuvent Mave de nombreux portefeuilles

Si cela est correct alors:

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 
+0

Voulez-vous dire trois tables supplémentaires? ThirdParty, Client_Relationship et Portfolio_Relationship? Je pose cette question car les relations client et portefeuille concernent un seul «pool» de tierces parties. – Aphillippe

+0

La modification clarifie bien les choses, merci. C'est en quelque sorte l'approche à laquelle je pensais. Merci. – Aphillippe