W przypadku Oracle, będziemy chcieli, aby nie nazwać kolumn „id” lub „name” lub coś rodzajowe.
Problem polega na tym, że domyślnie w starszych wersjach Oracle będzie próbować łączyć tabele na podstawie podobnych nazw kolumn, więc jeśli wszystko dobrze nazwałam, to ostatecznie skończyłem też na określeniu domyślnej klauzuli łączenia między moimi tabelami.
Ale nawet jeśli nie używasz Oracle, nie wybierając nazw pojawiających się w wielu tabelach, oznacza to również, że nie musisz wtedy męczyć się z aliasingiem za każdym razem, gdy musisz dokonać wyboru w dwóch tabelach:
SELECT
instrument.name as instrument_name,
instrument.abbr as instrument_abbr,
source.name as source_name,
source.abbr as source_abbr,
...
FROM ...
Jeśli więc wybór wielu tabel jest normą, dłuższe nazwy kolumn oszczędzają pisanie. (jeśli używasz tylko jednej tabeli na raz ... czy naprawdę potrzebujesz relacyjnej bazy danych?)
... a oszczędzanie na pisaniu prowadzi nas do kolejnego problemu w Oracle - przynajmniej w 8i (obecna wersja, kiedy wziąłem kursy Oracle SQL Tuning i Data Modeling) buforowanie planów wykonania opiera się tylko na pierwszych tak wielu znakach zapytanie (nie pamiętasz dokładnej wartości ... 1024?), więc jeśli masz zapytania, które różnią się tylko czymś na końcu klauzuli where i naprawdę długą listę wyodrębnianych kolumn, możesz może trafić w wydajność, ponieważ nie może poprawnie buforować planu wykonania.
Oracle miał przewodnik na temat wybierania, jak twierdzą, dobrych nazw tabel i kolumn, co jest w zasadzie przewodnikiem usuwania liter, dopóki nie zawierają około 5-8 znaków, ale nigdy tak bardzo mi na tym nie zależało.
...
Gdy sprawy potoczą się inaczej:
- kolumny są zawsze pojedyncze (tabele są zawsze w liczbie mnogiej)
- wszystkie nazwy są pisane małymi literami, na wypadek, gdyby było w nich rozróżniana wielkość liter
- w wyniku powyższego użyj podkreślników zamiast wielbłąda.
aktualizacja : dla tych, którzy nie są zaznajomieni z zachowaniem łączenia Oracle, zobacz ostatni przykład Mastering Oracle SQL: Join Warunki , w którym wspomniano:
Co się stało? Powodem jest to, że oprócz dostawcy_id te dwie tabele mają inną parę kolumn o wspólnej nazwie. Ta kolumna to nazwa. Tak więc, gdy poprosisz o naturalne połączenie między dostawcą a tabelami części, połączenie odbywa się nie tylko poprzez zrównanie kolumny dostawca_id dwóch tabel, ale także kolumnę nazwy z dwóch tabel. Ponieważ żadna nazwa dostawcy nie jest taka sama jak nazwa części od tego samego dostawcy, zapytanie nie zwraca żadnych wierszy.
Zgodnie ze „starą składnią złączenia” (8i i wcześniejsze) „NATURAL JOIN” było domyślnym zachowaniem łączenia i uważam, że nadal tak jest, jeśli nie określisz warunku łączenia. Kiedyś „NATURAL JOIN” było oficjalną opcją w 9i, ogólną rekomendacją było, aby jej nie używać , ponieważ złe nazewnictwo kolumn może cię zepsuć, co jest moim zaleceniem dla dobrych nazw kolumn.