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

8

Considérez la relation ternaire suivante: relation ternaire

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.

sentir
la source

Réponses:

6

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, disons, 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.

Soit dit 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.

Michael Green
la source
Supposons que les règles commerciales soient les suivantes: 1) les entreprises fabriquent des produits; 2) Les entreprises appartiennent à un secteur (exemples de secteurs: machines, alimentation, logiciels); 3) Les produits appartiennent à des secteurs. J'ai essayé d'être concis et j'ai payé le prix pour cacher des informations importantes. Je vous remercie!
feelthhis
Mon commentaire soulève une autre question: quelles règles commerciales le modèle ERD ci-dessus? Existe-t-il un moyen de rendre la DRE très précise concernant les règles métier? Le tableau ternaire représente-t-il avec précision la DRE ci-dessus? Si c'est le cas, l'ERD ci-dessus n'est pas le bon modèle en ce qui concerne les 3 règles commerciales énoncées, non?
feelthhis
Quelles règles commerciales le modèle ERD ci-dessus: le tableau ternaire signifierait qu'il existe une chose qui a ProductID, SectorID et CustomerID comme clé nécessaire et suffisante. Quelque chose comme "GE (entreprise) finance (Produit) 90% (attribut) de tous les moteurs aéronautiques (secteur)" tandis que "Goldman finance 5% des moteurs aérodynamiques" et "GE finance 3% des éoliennes".
Michael Green
@feelthhis - "Existe-t-il un moyen de rendre l'ERD très précis concernant les règles métier": oui! C'est ce que font les DRE. Je vais modifier ma réponse. "Le tableau ternaire représente-t-il avec précision la DRE ci-dessus": je pense que vous voulez dire "règles ci-dessus". Non. Un produit est fabriqué par une seule entreprise. Une entreprise appartient à exactement un secteur. Connaître ProductID on peut identifier de manière unique le client et le secteur et ces IDss seraient redondants dans la table ternaire. Il n'est donc pas normalisé selon vos 3 règles. "Si oui ..": je suis d'accord.
Michael Green
Ternary Table: a company may...L'utilisation de la notation (IDSector, IDCompany, IDProduct) signifie-t-elle que les tuples (1, 1, 1) et (1, 1, 2) sont autorisés ("c1" produit "p1" et "p2" dans "s1" ); et que les tuples (1, 1, 1) et (2, 1, 2) ne sont pas autorisés ("c1" produit "p1" dans "s1" et produit "p2" dans "s2")? Pourquoi? La table ternaire ne doit-elle pas autoriser un tuple possible (IDSector, IDCompany, IDProduct)? Binary Tables: sector has...; company has...Je pensais que la table ternaire était équivalente aux binaires, si la table ternaire le permet n'importe quel tuple (IDSector, IDCompany, IDProduct).
feelthhis