2010-06-07 16 views
2

étrangère j'ai 2 entitésModélisation "en option" clé

  • utilisateur
  • UserCreditCard

Un utilisateur peut avoir une carte de crédit ou non. Comment modéliserais-tu la relation et pourquoi?

Option 1: l'utilisateur dispose d'une clé étrangère à UserCreditCard qui peut être nulle

Option 2: UserCreditCard a une clé étrangère à l'utilisateur qui ne peut pas être nul

EDIT

Mon erreur ne remarquant pas que l'utilisateur aura 0 ou 1 cartes de crédit, pas plus

Répondre

5

J'éviterais de faire une relation bidirectionnelle ici. Il semblerait plus logique de modéliser simplement votre table CreditCard avec une colonne UserID qui fait référence à votre table User. L'ajout d'une référence CreditCardID à User ajoute simplement un niveau inutile de complexité et une possibilité d'erreur.

je recommande de supprimer la référence deUseràCreditCard et de renvoi deCreditCardàUser non annulable et indexé. Cela devrait vous donner tout ce dont vous avez besoin.

+0

Merci adam! Mon idée n'est pas une relashionhip à deux voies mais en ajoutant la clé étrangère seulement dans une table. Essayer de décider de quel côté c'est mieux. – StackOverflower

+1

@Timmy: Alors allez avec ce dernier; un utilisateur sans carte de crédit est logique, une carte de crédit sans un utilisateur ne le fait pas. En outre, le deuxième modèle peut autoriser plusieurs cartes par utilisateur (et peut également être limité à une carte avec un index unique simple), tandis que le premier ne le permet pas. En bref, je ne vois rien qui pourrait me diriger vers la première option à moins que vous vouliez que deux utilisateurs puissent partager la même carte (ce qui n'est généralement pas autorisé), et même alors, j'opterais probablement pour un M : M relation plutôt que d'aller avec la première option. ** TL; Version DR: Ne pas utiliser la première option. ** –

+0

explication très complète et bien justifiée. Merci beaucoup! – StackOverflower

2

Je pense que vous avez déjà dit comment et pourquoi vous devez modéliser:

Un utilisateur peut avoir une carte de crédit ou non

Go avec option 1. Vous serez en mesure de dire qui a carte et qui ne vérifie pas la clé étrangère et vos mappings fonctionneront toujours car si la clé étrangère de la carte de crédit est nulle, la carte de crédit ne correspondra à rien, donc elle sera juste nulle. Cependant, lorsque vous supprimez la carte de crédit que vous supprimez le mappage dans l'entité Utilisateur, vous devrez faire attention.

+0

Que faire si l'utilisateur a plus d'une carte? – sqlvogel

2

Optez pour l'option deux. Il a moins de complexité et il modélise également le cas où un utilisateur a plus d'une carte de crédit, ou a changé sa carte de crédit.