Deux relations à même table
-
16-10-2019 - |
Question
J'ai une table de transaction, chaque transaction a 5-6 contacts impliqués. chaque contact a les mêmes champs comme le nom, l'adresse, cellule, etc. e-mail
Donc, la meilleure estimation I chose est d'utiliser la même table de contact et de le rapporter 5 fois à la table de transaction .. Je ne ai pas besoin de faire le même genre de tableau 5 fois.
Le problème commence lorsque je me connecte avec le cadre de l'entité cela ne prend une relation.
Ma question est dois-je faire 6 copies de contact pour chaque type de contact ou je serais mieux avec 6 tables de jointure (Une table avec juste de la 2 id pour que je puisse faire une jointure)?
Je pense que c'est un problème très commun, mais je ne pouvais pas trouver une information claire quelle est la meilleure façon est.
EDIT:
La solution
La meilleure chose est de normaliser les tables. Créer une table contact_type avec un enregistrement pour chaque type de contact. Ensuite, créez une table de jonction contact_type_xref qui contient l'identifiant de la table de contact et l'identifiant de la table contact_type. Chargez ensuite les types de contact associés à chaque contact dans le contact_type_xref, et supprimer les enregistrements de contact en double du contact. Voici un exemple: . Une fois que vous fixer la conception de base de données, vous pouvez aborder le problème-cadre de l'entité (qui disparaîtra sans doute).
Autres conseils
Tout d'abord, il est un peu un cadre qui ne reconnaît déchets pas plusieurs relations entre les types d'entités!
Si vous avez ce nombre de clés étrangères, les chances sont que vous aurez plus (ou moins) à l'avenir. La solution @Wil détails vous permettra atteindre cet objectif sans changement de schéma.
Un travail autour de ce qui peut tromper votre cadre serait de définir des vues dans la base de données pour chacun de vos types de contact et définir la relation cadre de la transaction à la vue. Par exemple
create view Manufacture as
select
ContactID as ManufactureID,
FirstName,
LastName,
...etc.
from Contacts
mai ou peut ne pas fonctionner, selon la façon dont interagit avec la base de données cadre.