Konwencje nazewnictwa PostgreSQL

193

Gdzie mogę znaleźć szczegółowy podręcznik na temat konwencji nazewnictwa PostgreSQL? (nazwy tabel a wielkość liter wielbłąda, sekwencje, klucze podstawowe, ograniczenia, indeksy itp.)

boj
źródło
Cóż, jeśli pójdziemy trochę dalej i przyjrzymy się
ogólnemu konwergencji

Odpowiedzi:

254

Jeśli chodzi o nazwy tabel, wielkość liter itp., Dominującą konwencją jest:

  • Słowa kluczowe SQL: UPPER CASE
  • nazwy (identyfikatory): lower_case_with_underscores

Na przykład :

UPDATE my_table SET name = 5;

To nie jest wyryte w kamieniu, ale nieco o identyfikatorach w dolnej przypadku jest wysoce zalecane, IMO. Postgresql traktuje wielkość liter w identyfikatorze w sposób niewrażliwy, gdy nie jest cytowany (faktycznie składa je do małych liter wewnętrznie) i rozróżnia wielkość liter w przypadku cytowania; wiele osób nie zdaje sobie sprawy z tej osobliwości. Używanie zawsze małych liter jest bezpieczne. W każdym razie dopuszczalne jest użycie camelCaselub PascalCase(lub UPPER_CASE), o ile jesteś konsekwentny: albo podawaj identyfikatory zawsze, albo nigdy (i obejmuje to tworzenie schematu!).

Nie znam wielu innych konwencji ani przewodników po stylu. Klucze zastępcze są zwykle tworzone z sekwencji (zwykle z serialmakrem), wygodnie byłoby trzymać się tego nazewnictwa dla tych sekwencji, jeśli utworzysz je ręcznie ( tablename_colname_seq).

Zobacz także niektóre dyskusje tutaj , tutaj i (dla ogólnego SQL) tutaj , wszystkie z kilkoma powiązanymi linkami.

Uwaga: Postgresql 10 wprowadził identity kolumny jako zamiennik szeregowy zgodny z SQL .

leonbloy
źródło
3
FWIW, jedyną cechą charakterystyczną jest to, że Pg składa się na małe litery, podczas gdy standard SQL mówi, że powinien składać się na wielkie litery. DBMS, które się nie składają, to dziwne niestandardowe.
Craig Ringer
6
Dla nowego użytkownika Postgres jest to dość frustrujące. Konieczność ciągłego wybierania cudzysłowów lub brzydkiej konwencji nazewnictwa jest do kitu. To jest do bani tyłek.
d512
1
@ user1334007 Konwencja nie jest brzydka - i przeczytaj komentarz Craiga powyżej. I nie ma potrzeby cytowania, jeśli nie cytowałeś podczas tworzenia tabel (to znaczy, jeśli jesteś konsekwentny).
leonbloy
4
@leonbloy, jeśli nie zacytujesz przy tworzeniu tabeli, Postgres będzie pisał małymi literami w nazwach tabel i nazw pól. Możesz używać wielbłąda przy pisaniu zapytań, ale wynik pokaże wszystkie małe litery, co jest trudne do odczytania, gdy pola składają się z wielu słów (data ostatniej aktualizacji). Jeśli chcesz, aby nazwy kolumn były czytelne w wynikach zapytania, musisz albo zacytować wszystko, albo użyć przypadku węża, który według IMO jest brzydki. Byłoby znacznie lepiej, gdyby Postgres zostawił twoje nazwiska w spokoju i nie wymagał od ciebie podawania ofert.
d512,
11
Nienawidzę słów kluczowych dużymi literami, po prostu nienawidzę, konwencji lub nie. W przypadku słów kluczowych nie ma zależności wielkości liter. Wolę wszystkie małe litery. Tak, wiem, że to tylko preferencja, ale to także zwykły komentarz. ;-)
Craig,
28

Tak naprawdę nie ma formalnej instrukcji, ponieważ nie ma jednego stylu ani standardu.

Tak długo, jak rozumiesz zasady nazewnictwa identyfikatorów , możesz używać tego, co chcesz.

W praktyce uważam, że jest łatwiejszy w użyciu, lower_case_underscore_separated_identifiersponieważ nie jest "Double Quote"im potrzebne wszędzie, aby zachować obudowę, spacje itp.

Jeśli chcesz nazwać swoje tabele i funkcje "@MyAṕṕ! ""betty"" Shard$42", możesz to zrobić, choć pisanie wszędzie byłoby trudne.

Najważniejsze rzeczy do zrozumienia to:

  • Chyba cytowany dwukrotnie, identyfikatory są case-składane do małych liter, tak MyTable, MYTABLEi mytableto wszystko to samo, ale "MYTABLE"i "MyTable"są różne;

  • Chyba że podwójnie cytowany:

    Identyfikatory SQL i słowa kluczowe muszą zaczynać się od litery (az, ale także litery ze znakami diakrytycznymi i literami niełacińskimi) lub podkreślenia (_). Kolejnymi znakami w identyfikatorze lub słowie kluczowym mogą być litery, znaki podkreślenia, cyfry (0–9) lub znaki dolara ($).

  • Musisz podwójnie podać słowa kluczowe, jeśli chcesz ich użyć jako identyfikatorów.

W praktyce zdecydowanie zalecamy, aby nie używać słów kluczowych jako identyfikatorów. Przynajmniej unikaj słów zastrzeżonych. To, że możesz nazwać tabelę "with", nie oznacza, że ​​powinieneś.

Craig Ringer
źródło
1
Dziękujemy za link do dokumentu na temat zasad nazewnictwa identyfikatorów . Miałem trudności ze znalezieniem tego konkretnego tematu.
Basil Bourque,
1
„Uważam, że jest łatwiejszy w użyciu lower_case_underscore_separated_identifiers” ... ostatnio słyszałem, że jest to opisywane jako „przypadek węża”
bvj