Pregunta

Lo que quiero decir es, si tuviera el siguiente esquema:

create table tableA(
    A_id   number not null primary key
);

create table tableB(
    B_id   number not null primary key,
    A_id   number not null references tableA(A_id),
    B_data text   not null
);

create table tableC(
    C_id   number not null primary key,
    A_id   number not null references tableA(A_id),
    C_data text   not null
);

Si quería recuperar B_data y C_data usando las relaciones descritas aquí, ¿hay alguna diferencia entre lo siguiente:

select
    b.B_data,
    c.C_data
from
    tableB b
    inner join tableC c
        on b.A_id = c.A_id;

y

select
    b.B_data,
    c.C_data
from
    tableB b
    inner join tableA a
        on b.A_id = a.A_id
    inner join tableC c
        on a.A_id = c.A_id;

Sospecho que la mayoría de las bases de datos se optimizan o bien consulta a ser el mismo, pero ¿hay casos en los que las restricciones de clave externa a tableA hará unirse a través de tableA mucho más eficiente? ¿Hay casos en los que estas consultas podrían producir resultados diferentes?

¿Fue útil?

Solución

Es posible que así unirse a ellos directamente. restricciones de clave externa no hacen nada para que se une más eficiente; índices que hacen, que (según el DBMS) puede ser una cuestión separada de claves externas. De cualquier manera, si hay un índice de trabajar, lo tienes, independientemente de si se va por su clave externa.

Otros consejos

La primera versión funciona bien. relaciones de clave externa son acerca de la integridad referencial y no necesariamente tiene que ser atravesado como se definen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top