Was ist der wirkliche Unterschied zwischen einer Eins-zu-Viele- und einer Viele-zu-Eins-Beziehung?
Es gibt konzeptionelle Unterschiede zwischen diesen Begriffen, die Ihnen bei der Visualisierung der Daten helfen sollen, sowie mögliche Unterschiede im generierten Schema, die vollständig verstanden werden sollten. Meistens liegt der Unterschied jedoch in der Perspektive.
In einer Eins-zu-Viele- Beziehung hat die lokale Tabelle eine Zeile, die vielen Zeilen in einer anderen Tabelle zugeordnet sein kann. Im Beispiel von SQL für Anfänger , ein Customer
möglicherweise zu vielen in Verbindung gebracht werden Order
s.
In der entgegengesetzten Viele-zu-Eins- Beziehung kann die lokale Tabelle viele Zeilen enthalten, die einer Zeile in einer anderen Tabelle zugeordnet sind. In unserem Beispiel können viele Order
s einem zugeordnet sein Customer
. Dieser konzeptionelle Unterschied ist wichtig für die mentale Repräsentation.
Darüber hinaus kann das Schema, das die Beziehung unterstützt, in den Tabellen Customer
und unterschiedlich Order
dargestellt werden. Zum Beispiel, wenn der Kunde Spalten hat id
und name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Damit a Order
mit a verknüpft werden kann Customer
, fügen viele SQL-Implementierungen der Order
Tabelle eine Spalte hinzu, in der id
die zugehörigen Customer
(in diesem Schema customer_id
:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
Wenn wir uns in den obigen Datenzeilen die customer_id
ID-Spalte ansehen , sehen wir, dass Bill Smith
(Kunden-ID Nr. 1) zwei Bestellungen zugeordnet sind: eine für 12,34 USD und eine für 7,58 USD. Jim Kenshaw
(Kunden-ID Nr. 2) hat nur 1 Bestellung für 158,01 USD.
Es ist wichtig zu erkennen, dass die Eins-zu-Viele-Beziehung normalerweise keine Spalten zur Tabelle hinzufügt, die die "Eins" ist. Das Customer
hat keine zusätzlichen Spalten, die die Beziehung zu beschreiben Order
. Tatsächlich haben die Customer
möglicherweise auch eine Eins-zu-Viele-Beziehung zu ShippingAddress
und SalesCall
Tabellen und haben dennoch keine zusätzlichen Spalten hinzugefügtCustomer
Tabelle .
Für die Beschreibung einer Viele-zu-Eins-Beziehung wird jedoch häufig eine id
Spalte zur Tabelle "Viele" hinzugefügt, die ein Fremdschlüssel zur Tabelle "Eins" ist. In diesem Fall wird der customer_id
Spalte "Viele" eine Spalte hinzugefügt Order
. Der zugehörigen Bestellung Nr. 10 für 12,34 USD Bill Smith
weisen wir die customer_id
Spalte der Bill Smith
ID 1 zu.
Es ist jedoch auch möglich, dass eine andere Tabelle vorhanden ist, die die Beziehung Customer
und beschreibt Order
, sodass der Order
Tabelle keine zusätzlichen Felder hinzugefügt werden müssen. Anstatt customer_id
der Order
Tabelle ein Feld hinzuzufügen , könnte es eine Customer_Order
Tabelle geben, die Schlüssel für Customer
und enthält Order
.
customer_id,order_id
1,10
1,11
2,12
In diesem Fall ist das Eins-zu-Viele und das Viele-zu-Eins alles konzeptionell, da zwischen ihnen keine Schemaänderungen bestehen. Welcher Mechanismus von Ihrem Schema und Ihrer SQL-Implementierung abhängt.
Hoffe das hilft.