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?
Antwort
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.
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
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
Danke. Ich konnte nirgends eine definitive "trifft nicht zu" Antwort finden. – pong3d
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.
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.
- 1. wie Relationen viele zu viele in redis
- 2. Marshalling und Casting. Sind sie verwandt?
- 3. SQL für eine viele zu viele Beziehung mit inneren Joins
- 4. Wie viele Spalten sind zu viele Spalten?
- 5. SQLite - Wählen Sie mit JOINs zu Viele-zu-Viele und Eins-zu-Viele
- 6. zwei eins zu viele Relationen - jedes Event hat viele Spots und jeder Spot hat viele Buchungen
- 7. Wie viele Joins sind in SQL Server 2008 zulässig?
- 8. Wie zeigen viele Relationen in Yii2 GridView und DetailView?
- 9. Konstruktorinjektion: Wie viele Abhängigkeiten sind zu viele?
- 10. Wie viele Aufgaben sind zu viele
- 11. Wie viele Schichten sind zu viele?
- 12. Wie viele EJBs sind zu viele?
- 13. Wie viele PHP-Includes sind zu viele?
- 14. Erstellen von Programmiersprachen und Compiler-Design. Sind sie verwandt?
- 15. Was sind "Vokabeltypen" und wie viele existieren?
- 16. SQL: Viele-zu-Viele-Tabelle UND Abfrage
- 17. Fluent NHibernate viele zu viele Konvention für Typ
- 18. Wie * .dsc-Dateien mit * .deb- und Quellcodedateien verwandt sind
- 19. Wie RethinkDB-Joins implementiert sind?
- 20. Hibernate-Eins-zu-Viele-Joins auf mehreren Tabellen
- 21. Zu viele offene Dateien: wie viele offen sind, was sie sind, und wie viele kann die JVM offen
- 22. Wie zu bestimmen, wie viele Sitzungen zu viele für eine Webanwendung sind
- 23. Wie viele Spalten sind zu viele für eine SQL Server 2005-Tabelle?
- 24. Wie viele Schlüssel sind zu viele in Memcached?
- 25. Wie viele sind zu viele enthalten in <HEAD>?
- 26. Wie viele sind zu viele Datenbanken auf SQL Server?
- 27. Führen Self-Joins zu höheren Leistungseinbußen als Multi-Table-Joins?
- 28. Wie viele Parameter sind in JavaScript zu viele?
- 29. Neo4j Cypher-Abfrage, um an mehreren Relationen zu arbeiten
- 30. Wie aktualisiert man eine Entity und viele zu viele Beziehung
Nein. Es gibt keine Regel, dass Spalten, denen Sie beitreten, in einer beliebigen in den Tabellen definierten Beziehung enthalten sein müssen. –
Sie können einen Fremdschlüssel hinzufügen, wenn Sie eine Art von Beziehung erzwingen möchten –