Gibt es Datenbank-Engines, die die Join-Bedingung basierend auf den vorhandenen Fremdschlüsseln verstehen?


11

Es scheint mir seltsam, dass die Engine, wenn ich einen Fremdschlüssel definiert habe, diese Informationen nicht verwenden kann, um automatisch die richtigen JOIN-Ausdrücke herauszufinden, sondern dass ich dieselben Klauseln erneut eingeben muss. Gibt es Datenbanken, vielleicht eine Art Forschungsprojekt, die die vorhandenen Fremdschlüssel untersuchen?

Antworten:


4

Mir sind keine bekannt, die Fremdschlüssel verwenden (und das kann unordentlich sein, wenn Sie mehr als einen Fremdschlüssel in derselben Tabelle haben).

Aber Oracle Basis schließt sich der Name der Spalten aus , wenn Sie nicht angeben , eine bestimmte Art kommen noch eine Join - Bedingung, oder wenn SieNATURAL JOIN


Warum sollte es chaotisch sein, wenn Sie mehr als einen Fremdschlüssel für dieselbe Tabelle haben? Wenn Sie es aus der Perspektive der "Eltern" -Tabelle betrachten, sollte immer noch klar sein, an welcher Aufzeichnung des Kindes Sie interessiert sind.
Beth Whitezel

@Bitoff Möglicherweise haben Sie mehr als eine Beziehung zwischen den beiden Tabellen und somit keinen zusammengesetzten Schlüssel, sondern tatsächlich mehr als einen Fremdschlüssel für die untergeordnete Tabelle. In einem früheren Job hatten wir beispielsweise eine Datenbank mit Organisationen, und in dieser Tabelle befinden sich zwei Links zu meiner Personentabelle - Abteilungsleiter und der Hauptkontakt (normalerweise die Sekretärin). Es gab einen Fremdschlüssel in die entgegengesetzte Richtung, da die Mitarbeiter einer Abteilung zugeordnet waren, bis wir ihn aufteilen mussten, um viele-zu-viele-Beziehungen zu unterstützen.
Joe

Ich weiß, dass keine der gängigen RDBMS dies tut - wie in der Frage angegeben, habe ich die Frage dort gestellt, um zu sehen, ob jemand von etwas Neuem in diesem Bereich gehört hat.
TML

1
-1 Dies ist nicht richtig in Bezug auf das Verhalten von Oracle, und Ihre Antwort, auf die Sie verlinken, war auch nicht richtig. Wie Gary (der dritte Kommentar zu Ihrer Antwort) hervorhob, war " natural joinnie die Standardeinstellung". Übrigens hat Tom Kyte sicherlich Recht, wenn er natural join einen Fehler
Jack sagt, versuchen Sie es mit topanswers.xyz

4

Es wäre wirklich cool, wenn ich das schreiben könnte

from calendar join table1

und die dbms würden wissen, dass sie dies bewerten müssen.

from calendar
left join table1 on (work_date between (cal_date - 13) and cal_date)

Wirklich cool. Aber nicht jeder Join ist ein Equi-Join .

FWIW NATURAL JOINist im SQL-Standard enthalten. Aber ich bin mir ziemlich sicher, dass ich es in den letzten 25 Jahren nicht benutzt habe.

Wenn Sie feststellen, dass Sie immer wieder dieselben Join-Klauseln schreiben, benötigen Sie möglicherweise nur weitere Ansichten.


3

Es gibt Dienstprogramme zur automatischen Vervollständigung für Ihren Editor, mit denen Sie geeignete Join-Anweisungen automatisch vorschlagen können, wenn die Eingabe ein Problem darstellt. RedGates SQL-Eingabeaufforderung für den Umgang mit SQL Server in SSMS und Visual Studio. Ich glaube, dass Quest's TOAD Oracle und einige der anderen populäreren RDMSs handhaben wird.


Keine wirkliche "Sorge", ich frage mich nur, ob dies etwas ist, das irgendjemand ansprechen möchte.
TML

@TML Ich bezweifle, dass sich jemand darüber Sorgen macht, da dies nach meinem Verständnis wirklich im Bereich der Anwendungslogik liegt (wo Anwendungslogik die Dinge sind, die nicht zum Ausführen eines Datenbankservers gehören, die Dinge, für die wir bezahlt werden)
jcolebrand
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.