Frage

Nach der Definition ist eine Junction Tabelle (Brückentisch / Link-Tabelle) ist für viele-zu-viele-Beziehungen verwendet werden, wenn wie folgt verwendet:

CREATE TABLE Users
(
UserLogin varchar(50) PRIMARY KEY,
UserPassword varchar(50) NOT NULL,
UserName varchar(50) NOT NULL
)


CREATE TABLE Permissions
(
PermissionKey varchar(50) PRIMARY KEY,
PermissionDescription varchar(500) NOT NULL
)


--This is the junction table.
CREATE TABLE UserPermissions
(
UserLogin varchar(50) REFERENCES Users (UserLogin),
PermissionKey varchar(50) REFERENCES Permissions (PermissionKey),
PRIMARY KEY (UserLogin, PermissionKey)
)

Aber könnte es nicht auch genauso gut für ein Eins-zu-viele-Beziehungen, wie in diesem Beispiel, in dem ein Benutzer mit vielen Aufträgen zugeordnet ist, verwendet werden:

(Ich verstehe nicht, Datenbanken und bitte mich so korrigieren, wenn ich etwas falsch verstanden haben.)

CREATE TABLE Users
(
UserLogin varchar(50) PRIMARY KEY,
UserPassword varchar(50) NOT NULL,
UserName varchar(50) NOT NULL
)


CREATE TABLE Orders
(
OrderKey varchar(50) PRIMARY KEY,
OrderDescription varchar(500) NOT NULL
)


--This is the junction table.
CREATE TABLE UserOrders
(
UserLogin varchar(50) REFERENCES Users (UserLogin),
OrderKey varchar(50) REFERENCES Orders (OrderKey),
PRIMARY KEY (UserLogin, OrderKey)
)
War es hilfreich?

Lösung

Ja, es ist immer noch möglich, zu speichern und zu erzwingen eine Eins-zu-viele-Beziehung in einer Verknüpfungstabelle.

In Ihrem Beispiel Sie erzwingen keine Einschränkungen für die UserOrders Verknüpfungstabelle, so dass eine einzelne, um zwei Benutzer gehören kann (vorausgesetzt, das ist falsch). Zur Durchsetzung, dass Sie die Primärschlüssel der OrderKey Verknüpfungstabelle machen UserOrders sein könnte (oder haben eine eindeutige Einschränkung für diese Spalte). Technisch wird worden, dass nur eine many-to-one Beziehung zwischen UserOrders und Users, während mit one-to-one Beziehung zwischen Orders und UserOrders.

Ich kann nur darüber nachdenken, ein Grund für die Gestaltung des many-to-one Beziehungstabelle mit junction - wenn Sie planen, die erlauben many-to-many Beziehung in Zukunft und will nicht mit der Datenmigration beschäftigen. Aber in der Zwischenzeit zahlen Sie die Kosten für die Speicherung und Verbindens mit zusätzlicher Tabelle.

Andere Tipps

Es gibt keinen Grund, warum eine Verknüpfungstabelle konnte nicht für eine Beziehung one-to-many verwendet werden. Die Frage ist in der Regel eine Leistung. Warum die Datenbank macht eine zusätzliche Tabelle beitreten, wenn es nicht notwendig ist?

Dies wäre many-to-many:

CREATE TABLE UserOrders
(UserLogin varchar(50) REFERENCES Users (UserLogin),
OrderKey varchar(50) REFERENCES Orders (OrderKey),
PRIMARY KEY (UserLogin, OrderKey));

Das wäre eine Eins-zu-viele (ein Anwender viele Aufträge hat):

CREATE TABLE UserOrders
(UserLogin varchar(50) REFERENCES Users (UserLogin),
OrderKey varchar(50) REFERENCES Orders (OrderKey),
PRIMARY KEY (OrderKey));

Beachten Sie den Unterschied in der PRIMARY KEY-Einschränkung.

Wenn Sie eine Tabelle erstellt haben, es hat wirklich nicht eine Art „Junction“ Tabelle „assoziative“ Tabelle, Tabelle „beitreten.“ - es ist nur eine Tabelle

Wir verwenden diese Begriffe einen bestimmten Grund zu beschreiben, warum ein Unternehmen (und die daraus resultierende Tabelle) wurden ursprünglich geschaffen. Assoziative Einheiten geschaffen werden, zunächst eine many-to-many-Situation zu lösen. Aber diese Tabellen haben oft Attribute ihrer eigenen (wie die Zeit des Vereins, ein Grund für den Verein, etc.). So SQL Server, Oracle oder Ihr Code hat keinen Grund zu wissen, warum eine Tabelle erstellt wurde ... nur, dass es eine Tabelle.

Aus technischen Sicht gibt es wirklich keinen Unterschied zwischen einer assoziativen Tabelle und einer anderen Tabelle.

So sind diese Tabellen keine Rolle ausfüllen kann, die eine andere Tabelle erfüllen kann. Es gibt keine Regeln um, wie andere Tabellen können auch im Zusammenhang mit ihnen werden.

Sie können erzwingen de „ein“ Zwang in dir Leveln / Verknüpfungstabelle eine eindeutige Einschränkung hinzugefügt (oder der Primärschlüssel der Tabelle beitreten zu machen, denn nur, dass atribute sich die Beziehung identifiziert) in die Spalte, die ein Fremdschlüssel ist auf den „n“ -Seite. Das ist, weil Sie rwos in den vielen Seiten wollen nur eine Beziehung und Beziehungen sind in der Join / Verknüpfungstabelle angegeben ist.

Ich glaube, Sie das Konzept falsch verstanden - Hier ist die einfache Erklärung ist, wenn es helfen könnte: Um eine Many-viele-Beziehung zwischen zwei Tabellen (sagen wir, A und B) zu erreichen wir die Hilfe eines Verknüpfungstabelle (zum Beispiel Tabelle c) nehmen müssen, die eine n-Beziehung mit beiden Tabellen haben A und B.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top