Nazewnictwo tabel: podkreślenie czy Camelcase? przestrzenie nazw? Liczba pojedyncza czy mnoga?

89

Czytałem kilka pytań / odpowiedzi na StackOverflow, próbując znaleźć „najlepszy”, lub powinienem powiedzieć, akceptowany sposób nazwania tabel w bazie danych.

Większość programistów ma tendencję do nazywania tabel w zależności od języka, który wymaga bazy danych (JAVA, .NET, PHP itp.). Jednak po prostu czuję, że to nie w porządku.

Sposób nazywania tabel do tej pory polega na zrobieniu czegoś takiego:

doctorsMain
doctorsProfiles
doctorsPatients
patientsMain
patientsProfiles
patientsAntecedents 

Martwię się o:

  • Czytelność
  • Szybka identyfikacja modułu, z którego pochodzi tabela (lekarze || pacjenci)
  • Łatwe do zrozumienia, aby uniknąć nieporozumień.

Chciałbym zapoznać się z opiniami dotyczącymi konwencji nazewnictwa. Dziękuję Ci.

MarioRicalde
źródło

Odpowiedzi:

180

Konsekwencja jest o wiele ważniejsza niż to, jakiego konkretnego schematu używasz.

David Oneill
źródło
21
Innymi słowy, tak, dobra robota, zidentyfikowałeś kilka spójnych schematów. Kontynuuj robienie tego!
Phil H
3
+1 dla komentarza. Na marginesie obecnego schematu nazewnictwa PascalCase jest lepszy, zwłaszcza jeśli nie używasz aliasów dla zapytań SQL. W ten sposób możesz po prostu użyć camelcase w nazwach kolumn tabeli i Pascal Case w Table Names.
MarioRicalde
3
Pascal / camel dla nazw tabel może prowadzić do pewnych problemów. Każda tabela będzie miała plik w systemie plików, a niektóre z nich nie uwzględniają wielkości liter (np. OSX).
ismriv
2
@ismriv to tylko problem, jeśli jesteś niespójny, jeśli zawsze odnosisz się do tabel / widoków / kolumn z tym samym spójnym przypadkiem, nie powinieneś mieć żadnych problemów, a nie leniwość podczas pisania tych nazw przyniesie ci duże korzyści przewagę później podczas czytania. Używanie PascalCase dla tabel i camelCase dla kolumn pomaga zidentyfikować typ nazwy na pierwszy rzut oka, a także naśladuje typowe konwencje zorientowane obiektowo.
TWiStErRob
I całkowicie zgadzam się, że konsekwencja jest kluczem, ale jest to stara sprawa i dla osób korzystających z nowszych platform baz danych, takich jak przesunięcie ku czerwieni i Snowflake, że domyślny albo wszystko dużymi literami lub małymi literami identyfikatorów, chciałbym dodać, że to jest bardzo ważne, aby myśleć o swoich konwencje nazewnictwa od samego początku. Wybranie konwencji nazewnictwa, takiej jak Camel Case na tych platformach, może później spowodować niepotrzebne bóle głowy, np. Będziesz musiał cały czas używać identyfikatorów w cudzysłowie, a rozpoznawanie nazw obiektów może dać nieoczekiwane rezultaty.
Nathan Griffiths
22

Zwykle używam PascalCase, a jednostki są pojedyncze:

DoctorMain
DoctorProfile
DoctorPatient

Naśladuje konwencje nazewnictwa klas w mojej aplikacji, dzięki czemu wszystko jest schludne, czyste, spójne i łatwe do zrozumienia dla każdego.

Justin Niessner
źródło
3
Tak ... tak, chcę. Dziś rano jestem trochę zamglony. Edycja ... dzięki.
Justin Niessner
3
Jest również znany jako „CapitalCase”.
corsiKa
3
W moim 30-letnim doświadczeniu nigdy nie słyszałem, żeby nazywało się to „CapitalCase”. Słyszałem, że jest to najczęściej określane jako „sprawa wielbłąda”, a „sprawa Pascala” została ostatnio podjęta. Przyszedłem tutaj, aby zobaczyć, dlaczego ludzie wydają się używać wielbłąda w języku SQL, podczas gdy historycznie w większości nie uwzględniono wielkości liter. Na pewno nie chcę zostać w tyle.
Sinthia V,
@SinthiaV Nie wiem o innych, ale w naszym przypadku, ponieważ używamy JS ORM (niestety), opcje to 1) złam konwencję używając camelCase w db 2) złam konwencję używając snake_case w JS 3) map camelCase w JS do snake_case w db. Bez większego zastanowienia zdecydowaliśmy się użyć camelCase w bazie danych i nie było tak źle, ale cytowanie wszystkiego jest trochę kłopotliwe.
Andy
@SinthiaV jako bezużyteczny komentarz, który może być w kontekście rzeczywistego pytania SO, PascalCase to nie to samo, co camelCase. PascalCase zamienia pierwszą literę każdego słowa na wielką literę (w tym przede wszystkim pierwszą), podczas gdy funkcja camelCase zapisuje wielką literę tylko po pierwszej. Dalsza lektura: medium.com/better-programming/…
ciekawy
11

Charakter obsługi SQL bez rozróżniania wielkości liter Underscores_Scheme. Nowoczesne oprogramowanie obsługuje jednak wszelkiego rodzaju schematy nazewnictwa. Czasami jednak niektóre paskudne błędy, błędy lub czynnik ludzki mogą prowadzić do UPPERCASINGEVERYTHINGtego, że ci, którzy wybrali oba Pascal_Casei Underscore_Caseschemat, żyją ze wszystkimi nerwami w dobrym miejscu.

terR0Q
źródło
10

Agregacja większości z powyższych:

  • nie polegaj na wielkości liter w bazie danych
  • nie uwzględniaj wielkości liter lub separatora w nazwie - tylko słowa
  • używaj dowolnego separatora lub wielkości liter, które są standardem w Twoim języku

Następnie możesz łatwo tłumaczyć (nawet automatycznie) nazwy między środowiskami.

Ale dodałbym jeszcze jedną uwagę: może się okazać, że istnieją inne czynniki, kiedy przechodzisz z klasy w aplikacji do tabeli w bazie danych: obiekt bazy danych ma widoki, wyzwalacze, przechowywane procesy, indeksy, ograniczenia itp. również potrzebują nazw. Na przykład może się okazać, że uzyskujesz dostęp do tabel tylko za pośrednictwem widoków, które zazwyczaj są po prostu prostym „wybierz * z foo”. Można je zidentyfikować jako nazwę tabeli za pomocą tylko przyrostka „_v” lub umieścić je w innym schemacie. Celem takiej prostej warstwy abstrakcji jest to, że w razie potrzeby można ją rozszerzyć, aby umożliwić zmiany w jednym środowisku, aby uniknąć wpływu na inne. To nie zniweczy powyższych sugestii dotyczących nazewnictwa - tylko kilka rzeczy do uwzględnienia.

KenFar
źródło
8

Używam podkreśleń. Zrobiłem projekt Oracle kilka lat temu i wydawało się, że Oracle wymusiło na wszystkich moich nazwach obiektów pisanie dużymi literami, co niweczy każdy schemat wielkości liter. Nie jestem facetem z Wyroczni, więc może istniał sposób na obejście tego, którego nie byłem świadomy, ale spowodowało to, że użyłem podkreślenia i nigdy nie wróciłem.

Promień
źródło
2
W wersji 11g i nowszych wielkość liter wydaje się być zachowywana, jeśli nazwa tabeli jest ujęta w podwójne cudzysłowy. Umieszczam to tutaj na przyszłość. Wiem z całą pewnością, że Postgres również to robi, inne silniki db mogą nie.
John O
8

Ponieważ pytanie nie jest specyficzne dla konkretnej platformy lub silnika DB, muszę powiedzieć, że dla maksymalnej przenośności należy zawsze używać nazw tabel małymi literami.

/ [a-z _] [a-z0-9 _] * / to naprawdę jedyny wzorzec nazw, który bezproblemowo tłumaczy się między różnymi platformami. Małe litery alfanumeryczne + podkreślenie zawsze będą działać spójnie.

Jak wspomniano w innym miejscu, nazwy relacji (tabel) powinny być podawane w liczbie pojedynczej: http://www.teamten.com/lawrence/programming/use-singular-nouns-for-database-table-names.html

bogate wspomnienie
źródło
Zgadzam się - podkreślenie ma najmniej problemów w porównaniu z Pascalem czy Camel Casing. Szczególnie, gdy nazewnictwo przenosi się do modeli, dto i frontendu na końcu.
Saulius,
6

Zwykle zgadzam się z ludźmi, którzy twierdzą, że zależy to od konwencji języka, którego używasz (np. PascalCase dla C # i snake_case dla Ruby).

Jednak nigdy camelCase.

Mark Rendle
źródło
2
Ada: Pascal_Case_With_Underscores
uetoyo
6
Nie ma to sensu, gdy chcesz uzyskać dostęp do tej samej tabeli za pomocą dwóch różnych języków, które mają różne konwencje nazewnictwa.
Daniel W.
5

Po przeczytaniu wielu innych opinii myślę, że bardzo ważne jest stosowanie konwencji nazewnictwa języka, spójność jest ważniejsza niż konwencje nazewnictwa tylko wtedy, gdy jesteś (i będziesz) jedynym twórcą aplikacji. Jeśli chcesz mieć czytelność (która ma ogromne znaczenie), lepiej używaj konwencji nazewnictwa dla każdego języka. Na przykład w MySQL nie sugeruję używania CamelCase, ponieważ nie wszystkie platformy uwzględniają wielkość liter. Więc tutaj podkreślenie idzie lepiej.

Vlad Manuel Mureșan
źródło
1
Całkowicie się zgadzam !!! Zwłaszcza w przypadku MySql, gdy uruchamiasz go w systemie Windows, wszystko staje się od camelCasedo camelcase. Więc posiadanie etui węża jest znacznie lepsze. Ponadto Modern software however supports any kind of naming schemenie masz żadnych gwarancji, że yop napisze kod dla ostatniej wersji programu. Szczególnie w przypadku bazy danych - aktualizacja wersji nie jest trywialna, gdy myślisz o kosztach regresji.
Cherry
2

To moje pięć centów. Doszedłem do wniosku, że jeśli w jednym projekcie są używane bazy danych od różnych dostawców, są dwa najlepsze sposoby:

  1. Użyj podkreślenia.
  2. Użyj wielbłąda z cytatami.

Powodem jest to, że niektóre bazy danych konwertują wszystkie znaki na wielkie, a inne na małe. Tak więc, jeśli masz myTable, stanie się MYTABLElub mytablebędziesz pracować z DB.

Pavel_K
źródło
1

Niestety nie ma „najlepszej” odpowiedzi na to pytanie. Jak stwierdził @David, spójność jest znacznie ważniejsza niż konwencja nazewnictwa.

Kane
źródło
1

istnieje duża różnorodność w zakresie oddzielania słów, więc będziesz musiał wybrać to, co lubisz bardziej; ale jednocześnie wydaje się, że istnieje prawie zgoda co do tego, że nazwa tabeli powinna być pojedyncza.

Javier
źródło
1

Konwencje nazewnictwa istnieją w zakresie języka, a różne języki mają różne konwencje nazewnictwa.

SQL domyślnie nie rozróżnia wielkości liter; więc snake_case jest powszechnie używaną konwencją. SQL obsługuje również identyfikatory rozdzielane; więc mieszana wielkość liter w opcji, jak camelCase (Java, gdzie pola == kolumny) lub PascalCase (C #, gdzie tabele == klasy i kolumny == pola). Jeśli twój silnik DB nie obsługuje standardu SQL, to jest jego problem. Możesz zdecydować się z tym żyć lub wybrać inny silnik. (A dlaczego C # po prostu musiał być inny, jest irytacją dla tych z nas, którzy kodują w obu).

Jeśli zamierzasz używać tylko jednego języka w swoich usługach i aplikacjach, używaj konwencji tego języka na wszystkich warstwach. W przeciwnym razie użyj najczęściej używanych konwencji języka w domenie, w której ten język jest używany.

Chris Golledge
źródło