¿Hay algún motor de base de datos que intuya la condición de unión en función de las claves externas existentes?


11

Me parece extraño que, cuando he definido una clave foránea, el motor no puede usar esta información para descubrir automáticamente las expresiones JOIN correctas, sino que requiere que vuelva a escribir las mismas cláusulas. ¿Hay alguna base de datos, quizás algún tipo de proyecto de investigación, que inspeccione las claves foráneas existentes?

Respuestas:


4

No conozco ninguna que use claves externas (y eso podría ser complicado si tiene más de una clave externa de regreso a la misma tabla)

Pero Oracle basará las uniones del nombre de las columnas si no especifica un tipo de unión específico ni una condición de unión, o si usaNATURAL JOIN


¿Por qué sería desordenado si tiene más de una clave externa para la misma tabla? Si lo está mirando desde la perspectiva de la tabla "padre", aún debe quedar claro en qué registro del niño está interesado.
Beth Whitezel

@Bitoff puede tener más de una relación entre las dos tablas, por lo que no es una clave compuesta, sino más de una clave externa para la tabla secundaria. Por ejemplo, en un trabajo anterior, teníamos una base de datos de organizaciones, y en esa tabla hay dos enlaces a mi tabla de personas: el jefe del departamento y el contacto principal (generalmente, la secretaria). Había una clave externa en la dirección opuesta, ya que los miembros del personal están asignados a un departamento, hasta que tuvimos que separarlo para apoyar las relaciones de muchos a muchos.
Joe

Sé que ninguno de los RDBMS comunes hace esto, como dice la pregunta, expuse la pregunta para ver si alguien había oído hablar de algo nuevo en esta área.
TML

1
-1 Esto no es correcto sobre el comportamiento de Oracle, y tampoco fue tu respuesta a la que vinculaste. Como señaló Gary (el tercer comentario a su respuesta), " natural joinnunca ha sido el predeterminado". Por cierto, Tom Kyte seguramente tiene razón cuando llama a natural join un error que espera que suceda
Jack dice que intente topanswers.xyz

4

Se podría ser realmente genial si pudiera escribir este

from calendar join table1

y el dbms sabría que necesita evaluar esto.

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

Realmente genial Pero no todas las uniones son equi-join .

FWIW, NATURAL JOINestá en el estándar SQL. Pero estoy bastante seguro de que no lo he usado en los últimos 25 años.

Si te encuentras escribiendo las mismas cláusulas de unión una y otra vez, tal vez solo necesites más vistas.


3

Hay utilidades de autocompletar para su editor de elección para sugerir automáticamente las declaraciones de unión apropiadas si la preocupación es escribir. Indicador SQL de RedGate para manejar SQL Server en SSMS y Visual Studio. Creo que el TOAD de Quest manejará Oracle y algunos de los otros RDMS más populares.


No es una verdadera "preocupación", solo me pregunto si esto es algo que alguien está buscando abordar.
TML

@TML Dudo que alguien esté preocupado por esto, ya que esto está realmente en el dominio de la lógica de la aplicación, según tengo entendido (donde la lógica de la aplicación es lo que no pertenece a la ejecución de un servidor de base de datos, lo que nos pagan)
jcolebrand
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.