Was ist der wirkliche Unterschied zwischen einer Eins-zu-Viele- und einer Viele-zu-Eins-Beziehung? Es ist nur umgekehrt, irgendwie?
Ich kann kein anderes 'gut und leicht verständliches' Tutorial zu diesem Thema finden als dieses: SQL für Anfänger: Teil 3 - Datenbankbeziehungen
Antworten:
Ja, umgekehrt. Dies hängt davon ab, auf welcher Seite der Beziehung die Entität präsent ist.
Wenn eine Abteilung beispielsweise für mehrere Mitarbeiter arbeiten kann, ist Abteilung zu Mitarbeiter eine Eins-zu-Viele-Beziehung (1 Abteilung beschäftigt viele Mitarbeiter), während die Beziehung von Mitarbeiter zu Abteilung viele zu Eins ist (viele Mitarbeiter arbeiten in einer Abteilung).
Weitere Informationen zu den Beziehungstypen:
Datenbankbeziehungen - IBM DB2-Dokumentation
quelle
Von dieser Seite über Datenbankterminologie
quelle
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 werdenOrder
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 seinCustomer
. 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 unterschiedlichOrder
dargestellt werden. Zum Beispiel, wenn der Kunde Spalten hatid
undname
:Damit a
Order
mit a verknüpft werden kannCustomer
, fügen viele SQL-Implementierungen derOrder
Tabelle eine Spalte hinzu, in derid
die zugehörigenCustomer
(in diesem Schemacustomer_id
:Wenn wir uns in den obigen Datenzeilen die
customer_id
ID-Spalte ansehen , sehen wir, dassBill 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 beschreibenOrder
. Tatsächlich haben dieCustomer
möglicherweise auch eine Eins-zu-Viele-Beziehung zuShippingAddress
undSalesCall
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 dercustomer_id
Spalte "Viele" eine Spalte hinzugefügtOrder
. Der zugehörigen Bestellung Nr. 10 für 12,34 USDBill Smith
weisen wir diecustomer_id
Spalte derBill Smith
ID 1 zu.Es ist jedoch auch möglich, dass eine andere Tabelle vorhanden ist, die die Beziehung
Customer
und beschreibtOrder
, sodass derOrder
Tabelle keine zusätzlichen Felder hinzugefügt werden müssen. Anstattcustomer_id
derOrder
Tabelle ein Feld hinzuzufügen , könnte es eineCustomer_Order
Tabelle geben, die Schlüssel fürCustomer
und enthältOrder
.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.
quelle
javax.persistence.OneToMany
anders als dasManyToOne
. Wollen Sie damit sagen, dass sie synonym sind oder nur, dass es von der Implementierung abhängt? Ist meine Antwort falsch?Es gibt keinen Unterschied. Es ist nur eine Frage der Sprache und der Präferenz, in welcher Richtung Sie die Beziehung angeben.
quelle
Die Antwort auf Ihre erste Frage lautet: Beide sind ähnlich,
Die Antwort auf Ihre zweite Frage lautet: Eins-zu-viele -> ein MANN (MAN-Tisch) kann mehr als eine Frau (FRAUEN-Tisch) viele-zu-eins haben -> mehr als eine Frau hat einen MANN geheiratet.
Wenn Sie diese Beziehung nun mit zwei Tabellen MAN und WOMEN verknüpfen möchten, kann eine MAN-Tabellenzeile viele Beziehungen zu Zeilen in der WOMEN-Tabelle haben. hoffe es ist klar.
quelle
Beispiel
Zwei Tabellen mit einer Beziehung
SQL
In SQL gibt es nur eine Art von Beziehung, die als Referenz bezeichnet wird. (Ihr Frontend kann hilfreiche oder verwirrende Dinge tun [wie in einigen der Antworten], aber das ist eine andere Geschichte.)
Referenzen
einen Primärschlüssels in einer anderen Tabelle (der referenc ed Tabelle)
In SQL-Begriffen verweist Bar auf Foo.
Nicht umgekehrt
Da
Foo.Foo
es sich um einen Primärschlüssel handelt, der eindeutig ist, gibt es für einen bestimmten Wert von nur eine ZeileFoo
Bar.Foo
es sich um eine Referenz, einen Fremdschlüssel und keinen eindeutigen Index handelt, können für jeden Wert von viele Zeilen vorhanden seinFoo
Foo::Bar
eins zu vieleBar::Foo
ist viele zu einsBar
Zeile gibt es nur eineFoo
Zeile, auf die verwiesen wirdEs gibt nur eine Beziehung, daher gibt es keinen Unterschied. Die Wahrnehmung (von einem "Ende" oder dem anderen "Ende") oder das Rückwärtslesen ändert nichts an der Beziehung.
Kardinalität
Die Kardinalität wird zuerst im Datenmodell deklariert, dh logisch und physisch (die Absicht), und dann in der Implementierung (die realisierte Absicht).
Kardinalität
Eins zu Null zu Viele
In SQL ist dies (oben) alles, was erforderlich ist.
Eins zu eins zu viele
Sie benötigen eine Transaktion , um die in der Referenzierungstabelle angegebene zu erzwingen.
Eins zu Null zu Eins
Sie brauchen in
Bar
:Eins zu eins
Sie benötigen eine Transaktion , um die in der Referenzierungstabelle angegebene zu erzwingen.
Viele zu viele
Auf der physischen Ebene gibt es so etwas nicht (erinnern Sie sich, es gibt nur eine Art von Beziehung in SQL).
Auf den frühen logischen Ebenen während der Modellierungsübung ist es zweckmäßig , eine solche Beziehung zu zeichnen. Bevor sich das Modell der Implementierung nähert, sollte es besser dazu gebracht werden, nur Dinge zu verwenden, die existieren können. Eine solche Beziehung wird durch Implementieren einer assoziativen Tabelle gelöst.
Viele zu viele gelöst
quelle
Eins-zu-Viele und Viele-zu-Eins sind in der Vielheit ähnlich, aber nicht im Aspekt (dh in der Richtung).
Die Abbildung von Assoziationen zwischen Entitätsklassen und den Beziehungen zwischen den Tabellen. Es gibt zwei Kategorien von Beziehungen:
quelle
Es gibt keinen praktischen Unterschied. Verwenden Sie einfach die Beziehung, die am sinnvollsten ist, wenn Sie Ihr Problem so sehen, wie Devendra es illustriert.
quelle
--- Viele zu einem --- Diese 3 Kinder können alleinerziehende Eltern haben.
Beide sind ähnlich. Dies kann verwendet werden, gehört zum Bedarf. Wenn Sie Kinder für einen bestimmten Elternteil finden möchten, können Sie mit One-To-Many gehen. Oder wenn Sie Eltern für Zwillinge finden möchten, können Sie mit Many-To-One gehen. Gleichfalls....,
quelle
eins zu viele hat übergeordnete Klasse enthält n Anzahl von Kindern, so dass es sich um eine Sammlungszuordnung handelt.
Viele-zu-Eins hat n Anzahl von Kindern enthält ein Elternteil, so dass es sich um eine Objektzuordnung handelt
quelle