Existe-t-il des moteurs de base de données qui intuitionneront la condition de jointure en fonction des clés étrangères existantes?


11

Il me semble étrange que, lorsque j'ai défini une clé étrangère, le moteur ne puisse pas utiliser ces informations pour déterminer automatiquement les expressions JOIN correctes, mais m'oblige à la place à retaper les mêmes clauses. Existe-t-il des bases de données, peut-être une sorte de projet de recherche, qui inspecteront les clés étrangères existantes?

Réponses:


4

Je ne connais personne qui utilise des clés étrangères (et cela pourrait être compliqué si vous avez plus d'une clé étrangère dans la même table)

Mais Oracle basera les jointures sur le nom des colonnes si vous ne spécifiez pas de type de jointure spécifique ni de condition de jointure, ou si vous utilisezNATURAL JOIN


Pourquoi serait-il compliqué si vous avez plus d'une clé étrangère vers la même table. Si vous le regardez du point de vue de la table "parent", il devrait toujours être clair de quel dossier chez l'enfant vous êtes intéressé.
Beth Whitezel

@Bitoff, vous pouvez avoir plus d'une relation entre les deux tables, et donc pas une clé composite, mais en fait plus d'une clé étrangère vers la table enfant. Par exemple, dans un emploi précédent, nous avions une base de données d'organisations, et dans ce tableau, il y a deux liens vers ma table de personnes - le chef du département et le contact principal (généralement le secrétaire). Il y avait une clé étrangère dans la direction opposée, car les membres du personnel sont affectés à un département, jusqu'à ce que nous devions l'expliquer pour soutenir les relations plusieurs à plusieurs.
Joe

Je sais qu'aucun des SGBDR courants ne fait cela - comme l'indique la question, j'ai posé la question pour voir si quelqu'un avait entendu parler de quelque chose de nouveau dans ce domaine.
TML

1
-1 Ce n'est pas vrai à propos du comportement d'Oracle, et vous n'avez pas non plus répondu à votre lien. Comme l'a souligné Gary (le troisième commentaire à votre réponse), " natural joinn'a jamais été la valeur par défaut". natural join
Soit dit en passant

4

Ce serait vraiment cool si je pouvais écrire ceci

from calendar join table1

et le dbms saurait qu'il doit l'évaluer.

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

Vraiment cool. Mais chaque jointure n'est pas une équi-jointure .

FWIW, NATURAL JOINest dans la norme SQL. Mais je suis presque sûr de ne pas l'avoir utilisé au cours des 25 dernières années.

Si vous vous retrouvez à écrire les mêmes clauses de jointure encore et encore, vous avez peut-être juste besoin de plus de vues.


3

Il existe des utilitaires de saisie semi-automatique pour que votre éditeur de choix suggère automatiquement les instructions de jointure appropriées si la saisie est la préoccupation. L'invite SQL de RedGate pour gérer SQL Server dans SSMS et Visual Studio. Je crois que le TOAD de Quest gérera Oracle et certains des autres SGBD les plus populaires.


Pas de véritable "inquiétude", je me demande simplement si c'est quelque chose que quelqu'un cherche à résoudre.
TML

@TML Je doute que quiconque soit inquiet à ce sujet, car c'est vraiment dans le domaine de la logique d'application à ma connaissance (où la logique d'application est ce qui ne concerne pas le fonctionnement d'un serveur de base de données, les choses pour
lesquelles
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.