2010-12-20 2 views
0

Il s'agit d'une question de base de conception de base de données. Je veux une table (ou plusieurs tables) définissant les relations entre les clients. Je le veux afin que PrimaryCustomer puisse être lié à plusieurs SecondaryCustomers, et peut avoir plusieurs SecondaryCustomers avec la même relation.Conception de base de données - définition d'une relation de base plusieurs-à-un

PrimaryCustomerID RelationshipID SecondaryCustomerID 

1) Si la clé primaire est {PrimaryCustomerID} alors je ne peux avoir un client lié d'aucune sorte.

2) Si la clé primaire est {PrimaryCustomerID, RelationshipID}, je ne peux avoir qu'un seul client lié pour chaque type de relation.

3) Si la clé primaire est {PrimaryCustomerID, RelationshipID, SecondaryCustomerID}, alors je peux avoir tout ce que je veux, mais avoir toutes les colonnes comme clé primaire semble complètement faux.

Quelle est la bonne façon de configurer les choses?

Répondre

0

Le numéro 3 est la bonne solution pour ce modèle de données. Les tables de liaison ont souvent toutes les colonnes d'une jointure, car tout ce qu'elles font est un lien vers d'autres tables.

0

Si un client peut uniquement être lié à un client principal, vous pouvez utiliser une relation récursive simple dans la table client elle-même.

  • CustomerID PK
  • PrimaryCustomerID FK à CustomerID
0

Rien de mal avec No 3.

alt text

Si vous devez éviter les doublons en inverse la relation, vous pouvez utiliser

ALTER TABLE CustomerRelationship 
ADD CONSTRAINT chk_id CHECK (PrimaryCustomerId < SecondaryCustomerId); 
1

Une troisième alternative pourrait être que la clé soit (PrimaryCustomerId, SecondaryCustomerId), ce qui serait logique si un seul type de relation est autorisé par paire de clients. Les clés à implémenter doivent être définies par les dépendances que vous devez représenter dans la table pour que le tableau représente fidèlement la réalité que vous modélisez. Il n'y a rien de mal en principe avec des clés composées ou des tables tout-clés.

+0

> Il n'y a rien de mal en principe avec des clés composées ou des tables tout-clés. OK merci. – ColdAndTired

Questions connexes