Mysql
 sql >> Database >  >> RDS >> Mysql

Questo diagramma ER dovrebbe invece utilizzare una relazione ternaria

Sembra che tu abbia letto male le specifiche. Un articolo viene portato a un centro di vendita UPS e quindi spedito a destinazione. Ma consideriamo la relazione ternaria che un articolo spedito impiega un evento di trasporto per raggiungere una specifica destinazione .

Questa è una delle tante relazioni concepibili su queste tre entità.

Sì, lo fa. Ma la relazione ternaria è esprimibile nei termini di queste relazioni binarie del diagramma. (E non viceversa.)

Ogni tabella, variabile di base o risultato di query, contiene righe che partecipano a una relazione particolare. Possiamo caratterizzare la relazione con un predicato --un modello di istruzione parametrizzato da attributi.

Una tabella contiene le righe i cui valori per gli attributi fanno un'affermazione vera dal suo predicato. Il predicato di una variabile di base è dato dal DBA.

-- shipped item ItemNumber is received by retail center UniqueId
SELECT * FROM ReceivedFrom
-- shipped item ItemNumber takes transportation event ScheduleNumber
SELECT * FROM ShippedVia

Il predicato di un'espressione di query è costruito dai suoi operatori e argomenti. Es. il predicato del NATURAL JOIN di due tabelle è l'AND dei predicati delle tabelle.

-- shipped item ItemNumber is received by retail center UniqueId
       and takes transportation event ScheduleNumber
SELECT * FROM ReceivedFrom NATURAL JOIN ShippedVia

Naturalmente, la tua concezione particolare della relazione ternaria potrebbe non essere questa query/tabella esatta. Ma un pratico database UPS avrebbe tabelle per le relazioni fondamentali in base alle quali qualsiasi relazione rilevante può essere espressa.

(La normalizzazione divide i predicati della forma "... AND ..." in predicati separati per i "..." quando ciò è possibile e utile; la tabella originale viene restituita dal JOIN dei componenti.)