Czy są jakieś silniki baz danych, które intuicyjnie warunkują łączenie na podstawie istniejących kluczy obcych?


11

Wydaje mi się dziwne, że kiedy zdefiniowałem klucz obcy, silnik nie może użyć tych informacji do automatycznego ustalenia prawidłowych wyrażeń JOIN, ale zamiast tego wymaga ode mnie ponownego wpisania tych samych klauzul. Czy są jakieś bazy danych, być może jakiś projekt badawczy, który sprawdza istniejące klucze obce?

Odpowiedzi:


4

Nie znam żadnych, które używają kluczy obcych (i może być bałagan, jeśli masz więcej niż jeden klucz obcy z powrotem do tej samej tabeli)

Ale Oracle oprze złączenia na podstawie nazw kolumn, jeśli nie określisz konkretnego typu złączenia ani warunku złączenia, lub jeśli używaszNATURAL JOIN


Dlaczego miałby być bałagan, jeśli masz więcej niż jeden klucz obcy do tej samej tabeli. Jeśli patrzysz na to z perspektywy stołu „rodzica”, powinno być jasne, jaki rekord u dziecka cię interesuje.
Beth Whitezel

@Bitoff może istnieć więcej niż jedna relacja między dwiema tabelami, a więc nie klucz złożony, ale w rzeczywistości więcej niż jeden klucz obcy do tabeli potomnej. Np. W poprzednim zadaniu mieliśmy bazę danych organizacji, aw tej tabeli znajdują się dwa linki do mojej tabeli osób - kierownik działu i główny kontakt (zwykle sekretarka). W przeciwnym kierunku był klucz obcy, ponieważ pracownicy są przydzielani do działu, dopóki nie musieliśmy go rozbijać, aby wspierać relacje wiele do wielu.
Joe

Wiem, że żaden z popularnych RDBMS tego nie robi - jak mówi pytanie, zadałem to pytanie, aby sprawdzić, czy ktoś nie słyszał o niczym nowym w tej dziedzinie.
TML

1
-1 To nie jest poprawne zachowanie Oracle, i nie była to twoja odpowiedź, do której prowadzisz link. Jak zauważył Gary (trzeci komentarz do twojej odpowiedzi), „ natural joinnigdy nie było domyślnym”. Nawiasem mówiąc, Tom Kyte z pewnością ma rację, gdy nazywa natural join błąd oczekującym na wystąpienie
Jack mówi, spróbuj wypróbować topanswers.xyz

4

To byłoby być naprawdę fajne, czy mogę napisać to

from calendar join table1

i dbms wiedziałby, że musi to ocenić.

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

Naprawdę fajnie. Ale nie każde połączenie jest sprzężeniem równorzędnym .

FWIW, NATURAL JOINjest w standardzie SQL. Ale jestem pewien, że nie korzystałem z niego przez ostatnie 25 lat.

Jeśli zauważysz, że ciągle piszesz te same klauzule łączenia, być może potrzebujesz więcej widoków.


3

Dla wybranego edytora dostępne są narzędzia do autouzupełniania do automatycznego sugerowania odpowiednich instrukcji łączenia, jeśli chodzi o pisanie. Monit SQL RedGate do obsługi SQL Server w SSMS i Visual Studio. Wierzę, że TOAD TOADa poradzi sobie z Oracle i innymi popularniejszymi RDMS.


Nie ma prawdziwej „troski”, tylko zastanawiam się, czy jest to coś, na co ktoś chce się zwrócić.
TML

@TML Wątpię, czy ktokolwiek się tym martwi, ponieważ tak naprawdę jest to domena logiki aplikacji (gdzie logika aplikacji to rzeczy, które nie dotyczą uruchamiania serwera bazy danych, rzeczy, za które płacimy)
jcolebrand
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.