web-dev-qa-db-fra.com

Relation ternaire: quelle est la différence entre avoir une seule table et avoir plusieurs tables?

Considérez la relation ternaire suivante: ternary relationship

Supposons que toutes les entités n'ont que deux attributs (PK et nom).


Voici les tableaux que j'ai dérivés (5 tableaux):

Sector
-------------------------
ID_Sector    SectorName
-------------------------

Product
-------------------------
ID_Product    ProductName
-------------------------

Company
--------------------------------------
ID_Company    ID_Sector    CompanyName
--------------------------------------

Relationship 1 (R1)
-------------------------
ID_Sector    ID_Product
-------------------------

Relationship 2 (R2)
-------------------------
ID_Company    ID_Product
-------------------------

Question:

Est-ce une bonne solution pour cette relation ternaire? Quelle est la différence entre avoir 2 tables (R1 et R2) au lieu de la table unique suivante:

Ternary table
-------------------------------------
ID_Sector    ID_Company    ID_Product    
-------------------------------------

Pour moi, il semble qu'avoir 2 tables distinctes pour chaque relation (R1 et R2) est une meilleure solution par rapport à avoir une seule table, mais je ne sais pas si c'est réellement vrai ou si c'est une bonne pratique.

8
feelthhis

Les deux solutions modélisent des règles différentes. Avec le tableau ternaire, vous dites qu'une entreprise ne peut avoir que certains produits dans un secteur particulier. Dans un secteur différent, il y aura un ensemble de produits différent, bien que les deux ensembles puissent bien sûr se chevaucher.

Avec les tableaux binaires, vous déclarez que le secteur n'a aucune influence sur les produits auxquels une entreprise est liée. De même, la société n'a aucune influence sur les produits dans quel secteur.

Le choix entre ces alternatives sera déterminé par les règles de votre entreprise. Il ne peut être répondu par une discussion académique abstraite. J'ai trouvé préférable de nommer la relation entre les entités. Dire que l'entreprise est liée au produit, par exemple, est intéressant; dire pourquoi l'entreprise est liée au produit est encore mieux. "La société achète un produit" est une information différente de "la société fabrique le produit" ou "la société n'a pas d'autorisation de sécurité pour utiliser le produit". Ce faisant, je découvre souvent de nouvelles relations, attributs et types d'entités. Vous pourriez finir par avoir besoin des tables binaires et ternaires!

Edit: Pour les règles

  1. une entreprise fabrique de nombreux produits/chaque produit est fabriqué par une seule entreprise
  2. une entreprise a fait rapport dans exactement un secteur/chaque secteur rend compte de nombreuses entreprises
  3. un produit est vendu dans exactement un secteur/chaque secteur dispose de nombreux produits.

J'aurais ces types d'entités

Sector - SectorID

Company - CompanyID, SectorID

Product - ProductID, CompanyID

Si l'une de vos règles est plusieurs-à-plusieurs, vous aurez besoin des tables d'association binaires.

En passant, les noms de relation "a", "appartient à" et "est un" cachent souvent plus qu'ils n'éclairent. Si vous trouvez que vos BAs les utilisent, demandez-leur de réfléchir à nouveau.

6
Michael Green