MySQL için bir adlandırma kuralı var mı?


163

İşte nasıl yaparım:

  1. Tablo adları küçük harflidir, kelimeleri ayırmak için alt çizgi kullanır ve tekildir (ör foo. foo_bar, Vb.).
  2. Genelde (her zaman değil) bir otomatik artış PK'm var. : Ben aşağıdaki yöntemi kullanın tablename_id(örneğin foo_id, foo_bar_idvb.)
  3. Bir tablo yabancı anahtar olan bir sütun içerdiğinde, o anahtarın sütun adını hangi tablodan olursa olsun kopyalarım. Örneğin, tablo ki foo_barFK sahiptir foo_id( foo_idPK olan foo).
  4. Referans bütünlüğünü uygulamak için FK'leri tanımlarken aşağıdakileri kullanıyorum: tablename_fk_columnname(örneğin, örnek 3'ü ilerletmek, olurdu foo_bar_foo_id). Bu bir tablo adı / sütun adı kombinasyonu olduğundan, veritabanı içinde benzersiz olduğu garanti edilir.
  5. Sütunları şu şekilde sıralıyorum: PK'ler, FK'ler, sonra kalan sütunlar alfabetik olarak

Bunu yapmanın daha iyi, daha standart bir yolu var mı?


6
Otomatik arttırma PK için sadece "id" kullanmak yanlış mı? Neden? Sütunun adı yalnızca tablonun bağlamında anlam taşır. Yani her tabloda bir "id" var ve FK için birçok id_ <table_name> olabilir.
Zbyszek

3
@Zbyszek Bence buna karşı en basit neden sadece tutarlılık / basitlik içindir. Aksine kalmadan daha id_tableB=> oh hayır farklı adlandırılmış sütun id , tutarlılık id_tableB> = id_tableBsadece kıvrımlara görünüyor ... ya OP yapar gibidir: foo_id=> foo_idziyade foo_id=>id
Don Cheadle

Yanıtlar:


106

İlk ve en önemlisi şunu söyleyebilirim: tutarlı olun.

Sorunuzda özetlediğiniz sözleşmelerle neredeyse orada olduğunuzu düşünüyorum. Birkaç yorum olsa:

1 ve 2 puanlarının iyi olduğunu düşünüyorum.

Nokta 3 - ne yazık ki bu her zaman mümkün değildir. foo_barSütunları olan foo_idve another_foo_idher ikisi de footablo foo_idsütununu referans alan tek bir tabloyla nasıl başa çıkacağınızı düşünün . Bununla nasıl başa çıkacağınızı düşünmek isteyebilirsiniz. Bu biraz bir köşe durumda olsa!

Nokta 4 - Nokta 3'e benzer. Birden fazla referans sütununa sahip olmak için yabancı anahtar adının sonuna bir sayı girmek isteyebilirsiniz.

Nokta 5 - Bundan kaçınırım. Size çok az şey sağlar ve daha sonraki bir tarihte tabloya sütun eklemek veya tablodan sütun kaldırmak istediğinizde baş ağrısı haline gelir.

Diğer bazı noktalar:

Endeks Adlandırma Kuralları

Dizinler için bir adlandırma kuralı tanıtmak isteyebilirsiniz - bu, yürütmek isteyebileceğiniz herhangi bir veritabanı meta veri çalışması için çok yardımcı olacaktır. Örneğin, sadece bir endeks aramak foo_bar_idx1veya foo_idx1- tamamen size bağlı olmakla birlikte, dikkate almaya değer.

Tekil ve Çoğul Sütun İsimleri

Sütun adlarınızdaki çoğul ve tekli gibi dikenli sorunu ve tablo adlarınızı çözmek iyi bir fikir olabilir. Bu konu DB topluluğunda büyük tartışmalara neden olmaktadır . Hem tablo adları hem de sütunlar için tekil formlarla yapışırdım. Orada. Ben söyledim.

Burada asıl mesele tutarlılık!


5. maddeden daha iyi ne olabilir? Neden baş ağrısı olabilir?
Rasshu

8
Takip etmek için, bu verry'yi
Enissay

1
İki ad (DocumentChapter, DocumentVersion, DocumentType vb.) Oluşan modellerin nesneleri tutan tablolarımı adlandırmak için iyi bir "düzeni" bulmakta sorun yaşıyorum. Örneğin DocumentType için bunu adlandırabilir documenttypeveya document_type. Ben ikincisini tercih ederim, ama çoğu zaman ben çok çok fazla ilişki var ve ben gibi bir tabloya ihtiyacım var document_document_type. Bunun nasıl ele alınacağı konusunda herhangi bir öneriniz var mı?
lexith

@ rsb2097 Ynt: nokta 5 - Bir sütun (sonuna kadar) ekledikten sonra sipariş geçersiz hale gelebilir. Gereksiz bir ek yük olduğundan sütunların yeniden sıralanmasını gerektiren herhangi bir kısıtlama eklememelisiniz.
Will Sheppard

21

Tutarlılık, herhangi bir adlandırma standardının anahtarıdır. Mantıksal ve tutarlı olduğu sürece% 99 oradasınız.

Standardın kendisi çok kişisel bir tercihtir - eğer standardınızı beğenirseniz, onunla çalıştırın.

Sorunuzu açık bir şekilde cevaplamak için - hayır, MySQL'in tercih edilen bir adlandırma kuralı / standardı yoktur, bu nedenle kendinizinkini yuvarlamak iyidir (ve sizinki mantıklı görünür).



4

Neyse ki, PHP geliştiricileri tanıdığım bazı geliştirme toplulukları gibi "Deve vaka bigotları" değildir.

Sözleşmeleriniz kulağa hoş geliyor.

A) basit ve b) tutarlı oldukları sürece - herhangi bir sorun görmüyorum :)

PS: Şahsen, 5) aşırı kilolu olduğunu düşünüyorum ...


2
Devasa olmaktan çok, deve davası aslında DB topluluğunun çoğu tarafından kaşlarını çattı çünkü bazı RDBMS'ler vakaları soydukları (veya her şeyi büyük harfle değiştirecekleri) noktaya duyarsızdır, bu yüzden işler gerçekten çok hızlı bir şekilde çirkinleşir.
mal-wan

@mwan: hangi RDBMS'leri belirtebilir misiniz? Ve ben kendim bir deve kasası jokeyiyim. Büyük / küçük harf, şemamde yalnızca bir amaca hizmet eder, birleştirme tablolarını belirtmek ve (alanlar söz konusu olduğunda) sözcük sınırlarını belirtmek için _'in yalnızca bir othertable_id değerini belirtmesi olabilir (yani, tablo adı = othertable ve bu tablodaki alan = id ). Ayrıca, diğer RDBMS büyük / küçük harfe duyarlı değilse, gerçekten önemli olan nedir? Asla aynı tablonun büyük ve küçük bir versiyonuna sahip olmayacağım! Oh, ve büyük / küçük harf duyarsız bir
RDBMS'yi tercih etmem

7
CamelCase'i sevmeyen MySQL kullanıcılarının ironisini ve kullandığımız ürünün adını
seviyorum

1
@ DBX12 Bilgiçlikçi olmak için, bu camelCase değil, PascalCase, ama sizin açınız hala duruyor.
MarredCheese

@MarredCheese Bunu hiç düşünmedim, ama haklısın. camelCase'in başında kambur olmamalıdır.
DBX12

1

Basit Yanıt: HAYIR

Eh, en azından Oracle veya topluluk tarafından teşvik edilen bir adlandırma kuralı, hayır, ancak, temel olarak, MySQL belgelerinde belirtildiği gibi tanımlayıcılar için kurallara ve sınırlara uymanız gerekir: https://dev.mysql.com /doc/refman/8.0/en/identifiers.html

Takip ettiğiniz adlandırma kuralı hakkında, bence sorun yok, sadece 5 sayı biraz gereksiz, veritabanlarını yönetmek için çoğu görsel araç sütun adlarını sıralamak için bir seçenek sunuyor (DBeaver kullanıyorum ve buna sahip), bu yüzden amaç masanıza güzel bir görsel sunum yapıyorsa, bahsettiğim bu seçeneği kullanabilirsiniz.

Kişisel deneyim, ben recommed istiyorsunuz:

  • Küçük harf kullanın . Bu, veritabanlarınızı bir sunucudan diğerine geçirdiğinizde neredeyse birlikte çalışabilirlik sağlar. Bazen lower_case_table_namesdoğru yapılandırılmamış ve sunucunuz sadece camelCase veya PascalCase standardınızı (büyük / küçük harfe duyarlılık sorunu) tanıyarak hata atmaya başlar.
  • Kısa isimler . Basit ve anlaşılır. En kolay ve hızlı tablonuzu veya sütunlarınızı tanımlamak daha iyidir. Güven bana, kısa bir süre içinde çok sayıda farklı sorgu yaptığınızda, yazmanın (ve okunmanın) basit olması daha iyidir.
  • Ön eklerden kaçının . Aynı veritabanını farklı uygulamaların tabloları için kullanmadığınız sürece önek kullanmayın. Bu, sorgularınıza yalnızca daha fazla ayrıntı ekler. Bunun yararlı olabileceği durumlar vardır, örneğin, birincil anahtarları ve yabancı anahtarları tanımlamak istediğinizde, genellikle tablo adlarının kimlik sütunları için önek olarak kullanılır.
  • Kelimeleri ayırmak için alt çizgi kullanın . Bir tablo, sütun vb. Adlandırmak için hala birden fazla kelime kullanmak istiyorsanız, ayırmak için_çizgi_ifadeleri_kullanmak için alt çizgi kullanın , bu okunaklılığa yardımcı olur (gözleriniz ve stresli beyniniz size teşekkür edecektir).
  • Tutarlı olun . Kendi standardınız olduğunda, onu takip edin. Kuralları oluşturan ve onları kıran ilk kişi olmayın, bu utanç vericidir.

Peki ya "Çoğul ve Tekil" adlandırma? Bu en çok kişisel tercihlerin durumudur. Benim durumumda tablolar için çoğul isimler kullanmaya çalışıyorum çünkü bir tabloyu bir elemanlar koleksiyonu veya bir paket ihtiva eden öğeler olarak düşünüyorum, bu yüzden çoğul bir isim benim için anlamlı; ve sütunlar için tekil adlar çünkü sütunları bu tablo öğelerine tekil olarak tanımlanan özellikler olarak görüyorum.

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.