Relazione ternaria: qual è la differenza tra avere una tabella singola e avere più tabelle?


8

Considera la seguente relazione ternaria: relazione ternaria

Supponiamo che tutte le entità abbiano solo due attributi (PK e Nome).


Ecco le tabelle che ho derivato (5 tabelle):

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
-------------------------

Domanda:

È una buona soluzione per quella relazione ternaria? Qual è la differenza tra avere 2 tabelle (R1 e R2) invece della seguente tabella singola:

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

Per me, sembra che avere 2 tabelle separate per ogni relazione (R1 e R2) sia una soluzione migliore rispetto ad avere una singola tabella, ma non so se sia effettivamente vero o se sia una buona pratica.

Risposte:


6

Le due soluzioni modellano regole diverse. Con la tabella ternaria stai dicendo che un'azienda può avere solo determinati prodotti in un determinato settore. In un settore diverso ci sarà un diverso set di prodotti, sebbene i due set possano sovrapporsi, ovviamente.

Con le tabelle binarie stai affermando che quel settore non ha alcuna influenza sui prodotti a cui un'azienda si riferisce. Allo stesso modo, la società non ha alcuna influenza su quali prodotti si trovino in quale settore.

La scelta tra queste alternative sarà determinata dalle regole aziendali. Non si può rispondere con una discussione accademica astratta. Ho trovato meglio nominare la relazione tra le entità. Dire che l' azienda è collegata al prodotto, diciamo, è interessante; dire perché la società è legata al prodotto è ancora meglio. "La società acquista il prodotto" è un'informazione diversa da "la società produce il prodotto" o "la società non dispone dell'autorizzazione di sicurezza per utilizzare il prodotto". In questo modo scopro spesso nuove relazioni, attributi e tipi di entità. Potresti finire per aver bisogno delle tabelle binarie e ternarie!

Modifica : per le regole

  1. una società produce molti prodotti / ogni prodotto è prodotto esattamente da una società
  2. una società ha riportato esattamente in un settore / ciascun settore riporta molte aziende
  3. un prodotto è venduto esattamente in un settore / ogni settore ha a disposizione molti prodotti.

Avrei questi tipi di entità

Settore - ID settore

Azienda - CompanyID, SectorID

Prodotto - ProductID, CompanyID

Se una delle tue regole è molte-a-molte, allora avrai bisogno delle tabelle delle associazioni binarie.

A parte questo, i nomi delle relazioni "ha", "appartiene a" ed "è un" spesso nascondono più di quanto illuminino. Se trovi i tuoi BA che usano questi, chiedi loro di avere un'altra idea.


Supponiamo che le regole aziendali siano: 1) Le aziende producono prodotti; 2) Le aziende appartengono a un settore (esempi di settore: macchinari, cibo, software); 3) I prodotti appartengono a settori. Ho cercato di essere conciso e ho pagato il prezzo per nascondere informazioni importanti. Grazie!
sentire questo

Il mio commento solleva un'altra domanda: quali regole di business fa il modello ERD sopra? C'è un modo per rendere l'ERD molto preciso riguardo alle regole aziendali? La tabella ternaria rappresenta accuratamente l'ERD sopra? In tal caso, l'ERD sopra è il modello sbagliato rispetto alle 3 regole aziendali dichiarate, giusto?
sentire questo

Quali regole di business fanno il modello ERD sopra: la tabella ternaria significherebbe che c'è qualcosa che ha ProductID, SectorID e CustomerID come chiave necessaria e sufficiente. Qualcosa come "GE (azienda) finanzia (Prodotto) il 90% (attributo) di tutti i motori aeronautici (settore)" mentre "Goldman finanzia il 5% dei motori aeronautici" e "GE finanzia il 3% dei mulini a vento".
Michael Green,

@feelthhis - "Esiste un modo per rendere l'ERD molto preciso riguardo alle regole aziendali": sì! Questo è ciò che fanno gli ERD. Modificherò la mia risposta. "La tabella ternaria rappresenta accuratamente l'ERD sopra": penso che intendi "regole sopra". No. Un prodotto è realizzato esattamente da un'azienda. Una società appartiene esattamente a un settore. Conoscendo ProductID è possibile identificare in modo univoco clienti e settori e questi IDss sarebbero ridondanti nella tabella ternaria. Quindi non è normalizzato secondo le tue 3 regole. "Se è così ..": Sono d'accordo.
Michael Green,

Ternary Table: a company may...Usando la notazione (IDSector, IDCompany, IDProduct), significa che le tuple (1, 1, 1) e (1, 1, 2) sono consentite ("c1" produce "p1" e "p2" in "s1" ); e che le tuple (1, 1, 1) e (2, 1, 2) non sono consentite ("c1" produce "p1" in "s1" e produce "p2" in "s2")? Perché? La tabella ternaria non dovrebbe consentire alcuna possibile tupla (IDSector, IDCompany, IDProduct)? Binary Tables: sector has...; company has...Pensavo che la tabella ternaria fosse equivalente ai binari, se la tabella ternaria consente qualsiasi tupla (IDSector, IDCompany, IDProduct).
feelthhis Questo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.