Tablo Adlandırma: Alt Çizgi vs Camelcase? ad alanları? Tekil mi Çoğul mu?


91

StackOverflow'da 'en iyi' olanı bulmaya çalışan birkaç soru / cevap okudum veya bir Veritabanındaki tabloları adlandırmak için kabul edilmiş bir yol mu demeliyim?

Geliştiricilerin çoğu, veritabanını gerektiren dile (JAVA, .NET, PHP, vb.) Bağlı olarak tabloları adlandırmaya eğilimlidir. Ancak bunun doğru olmadığını düşünüyorum.

Şimdiye kadar tabloları adlandırma şeklim şuna benzer bir şey yapıyor:

doctorsMain
doctorsProfiles
doctorsPatients
patientsMain
patientsProfiles
patientsAntecedents 

Endişelendiğim şeyler:

  • Okunabilirlik
  • Tablonun geldiği modülün hızlı tanımlanması (doktorlar || hastalar)
  • Karışıklıkları önlemek için anlaşılması kolay.

Adlandırma kuralları ile ilgili her türlü görüşü okumak istiyorum. Teşekkür ederim.

Yanıtlar:


183

Tutarlı olmak, kullandığınız belirli şemadan çok daha önemlidir.


21
Başka bir deyişle, evet, aferin, bazı tutarlı planlar belirlediniz. Onunla olsun!
Phil H

3
Yorum için +1. Ayrıca, mevcut adlandırma şemasına bir yan not olarak PascalCase, özellikle SQL Sorguları için Takma Adlar kullanmıyorsanız daha iyidir. Bu şekilde, tablo sütun adlarında camelcase'i ve Tablo Adlarında Pascal Case'i kullanabilirsiniz.
MarioRicalde

3
Tablo adları için Pascal / deve durumu bazı sorunlara yol açabilir. Her tablonun dosya sisteminde bir dosyası olacaktır ve bazıları büyük / küçük harfe duyarlı değildir (örn. OSX).
ismriv

2
@ismriv bu yalnızca tutarsızsanız bir sorundur, her zaman aynı tutarlı durumdaki tablolara / görünümlere / sütunlara atıfta bulunuyorsanız herhangi bir sorun yaşamamalısınız, bu adları yazarken tembel olmamak size büyük bir fayda sağlayacaktır. daha sonra okurken avantaj. PascalCase'i tablolar için ve camelCase'i sütunlar için kullanmak, bir adın türünü bir bakışta belirlemeye yardımcı olur ve aynı zamanda yaygın Nesne Yönelimli kuralları taklit eder.
TWiStErRob

Tamamen o tutarlılık anahtarıdır katılıyorum, ama bu eski bir sorudur ve Redshift ve Snowflake'e gibi yeni veritabanı platformlarını kullanan kişiler için tüm büyük harf veya küçük harf ya tanımlayıcılar varsayılan bunun o kadar eklersiniz o olduğunu düşünmek oldukça önemlidir senin başlangıçta adlandırma kuralları. Bu platformlarda Camel Case gibi bir adlandırma kuralı kullanmayı tercih etmek, daha sonra bazı gereksiz baş ağrılarına neden olabilir; örneğin, alıntılanan tanımlayıcıları her zaman kullanmanız gerekecek ve nesne adı çözümlemesi beklenmedik sonuçlar doğurabilir.
Nathan Griffiths

23

Genelde PascalCase kullanıyorum ve varlıklar tekil:

DoctorMain
DoctorProfile
DoctorPatient

Uygulamamdaki sınıfların adlandırma kurallarını taklit ederek her şeyi oldukça düzgün, temiz, tutarlı ve herkes için anlaşılması kolay hale getiriyor.


3
Evet evet yaparım. Bu sabah biraz sisliyim. Düzenleme yapılıyor ... teşekkürler.
Justin Niessner

3
Aynı zamanda "CapitalCase" olarak da bilinir.
corsiKa

4
30 yıllık tecrübemde "CapitalCase" adını hiç duymadım. En çok "deve davası" dendiğini duydum ve son zamanlarda "Pascal davası" ele alındı. Buraya, tarihsel olarak çoğunlukla büyük / küçük harfe duyarlı olmadığında, insanların neden SQL için deve durumu kullandığını görmeye geldim. Kesinlikle zamanın gerisinde kalmak istemiyorum.
Sinthia V

@SinthiaV Başkalarını bilmiyorum ama bizim durumumuzda bir JS ORM kullandığımız için (ne yazık ki) seçenekler db'de camelCase kullanarak 1) kuralı bozmak 2) JS'de snake_case kullanarak kuralı bozmak 3) map camelCase JS'de db'de snake_case'e. Önceleri çok fazla düşünmeden db'de camelCase kullanmaya karar verdik ve çok da kötü olmadı, ancak her şeyi alıntı yapmak biraz güçlüktür.
Andy

@SinthiaV gereksiz bir yorum olarak bu gerçek SO sorusu bağlamında olabilir, PascalCase camelCase ile aynı değildir. PascalCase her kelimenin ilk harfini büyük harfle yazarken (birinci harf de dahil olmak üzere), camelCase yalnızca ilk harften sonraki kelimeleri büyük harf yapar. Daha fazla okuma için: medium.com/better-programming/…
wonderer

11

SQL'in büyük / küçük harf duyarlı olmayan doğası destekler Underscores_Scheme. Modern yazılım, her türlü adlandırma planını destekler. Ancak bazen bazı kötü hatalar, hatalar veya insan faktörü yol açabilir UPPERCASINGEVERYTHING, böylece hem seçilmiş olanlar, o Pascal_Caseve Underscore_Caseiyi bir yerde tüm sinirler ile canlı düzeni.


10

Yukarıdakilerin çoğunun bir toplamı:

  • veritabanındaki vakaya güvenmeyin
  • ismin büyük / küçük harf veya ayırıcı kısmını dikkate almayın - sadece
  • Diliniz için standart olan ayırıcı veya büyük / küçük harf durumunu kullanın

Daha sonra isimleri ortamlar arasında kolayca (hatta otomatik olarak) çevirebilirsiniz.

Ancak başka bir husus da ekleyeceğim: Uygulamanızdaki bir sınıftan veritabanınızdaki bir tabloya geçtiğinizde başka faktörler olduğunu görebilirsiniz: veritabanı nesnesinin görünümleri, tetikleyicileri, depolanmış prosedürleri, dizinleri, kısıtlamaları vb. ayrıca isimlere de ihtiyaç duyar. Örneğin, kendinizi yalnızca tipik olarak basit bir "foo'dan * seçim" olan görünümler aracılığıyla tablolara erişirken bulabilirsiniz. Bunlar sadece '_v' sonekiyle tablo adı olarak tanımlanabilir veya bunları farklı bir şemaya koyabilirsiniz. Bu kadar basit bir soyutlama katmanının amacı, gerektiğinde bir ortamda diğerini etkilemekten kaçınmak için değişikliklere izin vermek için genişletilebilmesidir. Bu, yukarıdaki adlandırma önerilerini bozmaz - hesaba katılması gereken birkaç şey daha.


8

Alt çizgi kullanıyorum. Birkaç yıl önce bir Oracle projesi yaptım ve görünüşe göre Oracle tüm nesne isimlerimi büyük harfe zorladı, bu da herhangi bir kasa şemasını bozuyor. Ben gerçekten bir Oracle adamı değilim, bu yüzden belki bunun farkında olmadığım bir yol vardı, ama alt çizgi kullanmamı sağladı ve asla geri dönmedim.


2
11g ve üzeri sürümlerde, tablo adı çift tırnak içine alınmışsa büyük / küçük harf korunmuş gibi görünüyor. Bunu ileride başvurmak üzere buraya koyarak. Postgres'in de öyle yaptığını kesin olarak biliyorum, diğer db motorları olmayabilir.
John O

8

Soru belirli bir platforma veya DB motoruna özgü olmadığından, maksimum taşınabilirlik için söylemeliyim, her zaman küçük harfli tablo adları kullanmalısınız.

/ [a-z _] [a-z0-9 _] * / gerçekten farklı platformlar arasında sorunsuz bir şekilde çeviri yapan tek ad kalıbıdır. Küçük alfasayısal + alt çizgi her zaman tutarlı bir şekilde çalışacaktır.

Başka bir yerde belirtildiği gibi, ilişki (tablo) adları tekil olmalıdır: http://www.teamten.com/lawrence/programming/use-singular-nouns-for-database-table-names.html


Katılıyorum - alt çizgi, Pascal veya deve Kasası ile karşılaştırıldığında en az sorunu barındırır. Özellikle isimlendirirken modellere, dto'ya ve en sonunda ön uca gidersiniz.
Saulius

6

Kullandığınız dilin kurallarına bağlı olduğunu söyleyen insanlarla aynı fikirdeyim (örneğin C # için PascalCase ve Ruby için snake_case).

Asla camelCase.


2
Ada: Pascal_Case_With_Underscores
uetoyo

7
Aynı tabloya farklı adlandırma kurallarına sahip iki farklı dilde erişmek istediğinizde bu mantıklı değildir.
Daniel W.

5

Diğer birçok görüşü okuduktan sonra, dilin adlandırma kurallarını kullanmanın çok önemli olduğunu düşünüyorum, tutarlılık, yalnızca uygulamanın tek geliştiricisi iseniz (ve olacaksanız) adlandırma kurallarından daha önemlidir. Okunabilirlik istiyorsanız (ki bu çok önemlidir), her dil için adlandırma kurallarını kullanmalısınız. Örneğin MySQL'de, tüm platformlar büyük / küçük harfe duyarlı olmadığı için CamelCase kullanılmasını önermiyorum. Yani burada alt çizgi daha iyi.


1
Kesinlikle katılıyorum !!! Özellikle MySql ile onu pencerelerde çalıştırdığınızda her şey 'dan' camelCaseye kadar olur camelcase. Yani yılan kasasına sahip olmak çok daha iyi. Ayrıca Modern software however supports any kind of naming scheme, yop'un son versiyon soft için kod yazacağına dair herhangi bir garantiniz yok. Özellikle veritabanı için - sürüm güncellemesi, regresyon maliyetlerini düşündüğünüzde önemsiz değildir.
Cherry

2

Bunlar benim beş sentim. Bir proje için farklı satıcılardan alınan DB'ler kullanılırsa iki en iyi yol olduğu sonucuna vardım:

  1. Alt çizgi kullanın.
  2. Tırnaklarla deve kılıfı kullanın.

Bunun nedeni, bazı veritabanlarının tüm karakterleri büyük harfe ve bazılarını küçük harfe dönüştürmesidir. Yani, varsa myTableo olur MYTABLEveya mytableDB ile çalışacaktır zaman.


1

Maalesef bu sorunun "en iyi" cevabı yok. @David'in belirttiği gibi tutarlılık, adlandırma kuralından çok daha önemlidir.


1

Kelimelerin nasıl ayrılacağına dair geniş çeşitlilik var, bu yüzden orada daha çok neyi sevdiğinizi seçmeniz gerekecek; ama aynı zamanda, tablo adının tekil olması gerektiği konusunda neredeyse fikir birliği var gibi görünüyor.


1

Adlandırma kuralları bir dil kapsamında mevcuttur ve farklı dillerin farklı adlandırma kuralları vardır.

SQL varsayılan olarak büyük / küçük harfe duyarlı değildir; bu nedenle, snake_case yaygın olarak kullanılan bir sözleşmedir. SQL ayrıca sınırlandırılmış tanımlayıcıları da destekler; bu nedenle, camelCase (Java, alanlar == sütunlar) veya PascalCase (C #, tablolar == sınıflar ve sütunlar == alanlar) gibi bir seçenekte büyük / küçük harf karışık. DB motorunuz SQL standardını destekleyemiyorsa, bu onun sorunu. Bununla yaşamaya veya başka bir motor seçmeye karar verebilirsiniz. (Ve neden C # farklı olmak zorunda kaldı ki, her ikisini de kodlayan bizler için bir sıkıntı noktası.)

Hizmet ve uygulamalarınızda yalnızca bir dil kullanmayı düşünüyorsanız, tüm katmanlarda o dilin kurallarını kullanın. Aksi takdirde, o dilin kullanıldığı etki alanında dilin en yaygın kullanılan kurallarını kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.