Esistono motori di database che intuiranno la condizione di join in base alle chiavi esterne esistenti?


11

Mi sembra strano che, quando ho definito una chiave esterna, il motore non può utilizzare queste informazioni per capire automaticamente le espressioni JOIN corrette, ma invece mi impone di digitare nuovamente le stesse clausole. Esistono database, forse una sorta di progetto di ricerca, che ispezioneranno le chiavi esterne esistenti?

Risposte:


4

Non sono a conoscenza di nessuno che utilizza chiavi esterne (e ciò potrebbe essere disordinato se si dispone di più di una chiave esterna nella stessa tabella)

Ma Oracle baserà i join al di fuori del nome delle colonne se non si specifica un tipo di join specifico né una condizione di join o se si utilizzaNATURAL JOIN


Perché sarebbe disordinato se si dispone di più di una chiave esterna nella stessa tabella? Se lo stai guardando dal punto di vista della tabella "genitore", dovrebbe essere ancora chiaro quale record nel bambino che ti interessa.
Beth Whitezel,

@Bitoff potresti avere più di una relazione tra le due tabelle, quindi non una chiave composita, ma in realtà più di una chiave esterna alla tabella figlio. Ad esempio, in un precedente lavoro avevamo un database di organizzazioni e in quella tabella ci sono due collegamenti al mio tavolo di persone: il capo del dipartimento e il contatto principale (di solito, il segretario). C'era una chiave esterna nella direzione opposta, poiché i membri del personale sono assegnati a un dipartimento, fino a quando non abbiamo dovuto aprirla per supportare le relazioni molti-a-molti.
Joe,

So che nessuno dei RDBMS comuni lo fa - come afferma la domanda, ho messo la domanda là fuori per vedere se qualcuno avesse sentito parlare di qualcosa di nuovo in questo settore.
TML

1
-1 Questo non è corretto riguardo al comportamento di Oracle, e nemmeno la tua risposta a cui ti colleghi. Come sottolineato da Gary (il terzo commento alla tua risposta), " natural joinnon è mai stato il default". Per inciso, Tom Kyte ha sicuramente ragione quando chiama natural join un bug in attesa che accada
Jack dice di provare topanswers.xyz

4

Si sarebbe davvero bello se potessi scrivere questo

from calendar join table1

e i dbms saprebbero che è necessario valutarlo.

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

Davvero fantastico. Ma non tutti i join sono equi-join .

FWIW, NATURAL JOINè nello standard SQL. Ma sono abbastanza sicuro di non averlo usato negli ultimi 25 anni.

Se ti ritrovi a scrivere sempre le stesse clausole di join, forse hai solo bisogno di più visualizzazioni.


3

Ci sono programmi di utilità di completamento automatico per il tuo editor di tua scelta per suggerire automaticamente istruzioni di join appropriate se la digitazione è la preoccupazione. Richiesta SQL di RedGate per la gestione di SQL Server in SSMS e Visual Studio. Credo che TOAD di Quest gestirà Oracle e alcuni degli altri RDMS più popolari.


Nessuna vera "preoccupazione", mi chiedo solo se questo è qualcosa che qualcuno sta cercando di affrontare.
TML

@TML Dubito che qualcuno sia preoccupato per questo in quanto questo è davvero nel dominio della logica dell'applicazione per la mia comprensione (dove la logica dell'applicazione è le cose che non riguardano l'esecuzione di un server di database, le cose che siamo pagati per fare)
jcolebrand
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.