2016-05-19 5 views
0

Gibt es eine Beziehung zwischen den in einer SELECT-Anweisung verwendeten JOIN-Klauseln und wie die beiden Tabellen miteinander verwandt sind, d. H. Eins zu Viele, Viele zu Eins, Eins zu Eins? Wenn nicht, können/sollten diese Art von Tabellenbeziehungen im SQL-Code definiert werden?Sind JOINs und eine zu viele Typ Relationen verwandt?

+1

Nein. Es gibt keine Regel, dass Spalten, denen Sie beitreten, in einer beliebigen in den Tabellen definierten Beziehung enthalten sein müssen. –

+0

Sie können einen Fremdschlüssel hinzufügen, wenn Sie eine Art von Beziehung erzwingen möchten –

Antwort

0

Die Definition dieser Beziehungen erfolgt mithilfe von Fremdschlüssel. Diese Schlüssel stellen die referenzielle Integrität sicher, indem sie Constraints auf beiden Seiten erzwingen.

Beispiel:

table-one: id, name table-many: id, name, table-one_id

Hier ist table-one_id ein Fremdschlüssel (Verweis auf die ID der Tabelle-on), sodass Sie nur gültige IDs (in Tabelle-on) eingeben.

Definieren von FKs ist nicht obligatorisch, aber es bietet referentielle Integrität.

JOINs in SELECT-Anweisungen werden oft mit diesen Fremdschlüsseln durchgeführt. Aber es ist technisch nicht erforderlich oder erforderlich.

+0

Ich habe die 'JOIN'-Definitionen von w3schools.com gelesen, bin aber immer noch verwirrt. Stimmt es dann, dass der Typ der "JOIN" -Klausel, "INNER", "LEFT" usw. nicht eine Beziehung von Mensch zu Mensch, von Mensch zu Mensch usw. bedeutet? – pong3d

+0

Richtig, Sie verbinden nur zwei Tabellen (entweder vollständig oder teilweise - siehe die Venn-Diagramme bei w3schools). Keine Beziehung ist impliziert. In den meisten Fällen werden wir uns jedoch einigen, da zwischen den Tabellen eine bestimmte Beziehung besteht. Gute Beispiele und Klärung in Siyuals Antwort. – Jonas

+0

Danke. Ich konnte nirgends eine definitive "trifft nicht zu" Antwort finden. – pong3d

0

Sie müssen keine formalen PK/FK-Beziehungen zum Schreiben von Joins haben. Wenn Sie jedoch diese Arten von Beziehungen haben, ist es in Ihrem Interesse, sie über eine Datenintegritätsansicht formalisieren zu lassen. Darüber hinaus kann SQL Server einen besseren Ausführungsplan für die Abfrage erstellen, wenn Sie bereits über diese Beziehungen verfügen. Siehe https://msdn.microsoft.com/en-us/library/ff647793.aspx

Es gibt keinen Vorteil, keine PK/FK-Beziehungen zu erstellen.

1

Es gibt ein paar Fragen hier:

Gibt es eine Beziehung zwischen den Klauseln JOIN in einer SELECT-Anweisung verwendet in und wie die beiden Tabellen miteinander verwandt sind?

In der überwiegenden Mehrzahl der Fälle, ja, eine JOIN Klausel wird eine der Möglichkeiten, zwei Tabellen zeigen zueinander in Beziehung stehen. Aber das ist nicht immer der Fall. Betrachten wir die beiden folgenden Beispiele:

1)

Select * 
From TableA A 
Join TableB B On A.B_Id = B.Id 

2)

Select * 
From TableA  A 
Join @CodeList B On A.Code = B.Code 

Im ersten Beispiel JOIN, gibt es eine Beziehung zwischen den in der Tabelle TableA und TableB definiert ist.

jedoch in dem zweiten Beispiel ist es wahrscheinlicher, dass @CodeList wird mehr als ein Filter für TableA wirkt. Die JOIN in dieser Situation ist nicht über eine definierte Beziehung zwischen den beiden Tabellen, sondern ein Mittel, um die Daten zu einer definierten Menge zu filtern.

So, um Ihre erste Frage zu beantworten: Ein JOIN wird normalerweise eine Art von Beziehung zwischen zwei Tabellen angeben, aber seine Präsenz, allein, bedeutet das nicht immer.

Können/sollten diese Art von Tabellenbeziehungen im SQL-Code definiert werden?

Nicht unbedingt. Selbst wenn das obige Beispiel nicht berücksichtigt wurde, wo keine beabsichtigte Beziehung zwischen den Tabellen für die JOIN-Bedingung bestand, ist eine definierte FOREIGN KEY-Beziehung nicht immer wünschenswert. Eine Sache zu beachten mit FOREIGN KEY CONSTRAINTS ist, dass sie sind.

Ob Sie Ihre Daten physisch beschränken möchten, um Werte zuzulassen, die gegen die Einschränkung verstoßen, ist völlig situationsabhängig, basierend auf Ihren Anforderungen.

Kann sie? Ja, das können sie sicherlich.

Sollte sie? Nicht immer - es kommt auf Ihre Absicht an.

Verwandte Themen