MongoDB için adlandırma kuralları nelerdir?


188

MongoDB hakları için veritabanları, koleksiyonlar, alan adları gibi bir dizi tercih edilen adlandırma kuralı var mı?

Bu çizgiler boyunca düşünüyordum:

  • Veritabanları: amaçtan (tekil kelime) oluşur ve “db” ile biter - tümü küçük harf: imagedb, resumedb, memberdb, vb.
  • Koleksiyonlar: küçük harf çoğul: resimler, özgeçmişler,
  • Belge alanları: lowerCamelCase, ör. MemberFirstName, fileName, vb.

Yanıtlar:


128
  1. Kısa tutun: Küçük Nesnelerin Depolanmasını Optimize Etme , SERVER-863 . Aptalca ama gerçek.

  2. İlişkisel veritabanları için geçerli olan kuralların hemen hemen hepsinin burada geçerli olması gerektiğini düşünüyorum. Ve onlarca yıl sonra, RDBMS tablolarının tekil veya çoğul olarak adlandırılması konusunda hala bir anlaşma yok ...

  3. MongoDB JavaScript konuşuyor, bu yüzden camelCase'in JS adlandırma kurallarını kullanın.

  4. MongoDB resmi belgelerinde alt çizgileri kullanabileceğinizden bahsedilir, ayrıca yerleşik tanımlayıcı da adlandırılır _id(ancak bu _idözel, dahili, asla görüntülenmeyen veya düzenlenmemiş olması amaçlanıyor olabilir.


95
3 ve 4 birbiriyle çelişiyor - JS deveyi tercih ediyor, Mongo alt çizgileri tercih ediyor gibi görünüyor ... ama şüphe duyduğunuzda alt çizgilere gidin. Latin olmayan alfabelere alışkın olan insanlar size teşekkür edecektir.
Matt Zukowski

1
Tekli çoğul tartışmaya karşı bu soruya bakın: stackoverflow.com/questions/338156/…
Jason

4
"JS deveyi tercih ediyor" demediğimden emin değilim. JS'nin kendisinin bir tercihi yoktur, ancak çoğu JS programcısının deve davası kullanma eğiliminde olduğunu söylemek doğrudur .
treeface

1
@treeface Matt'in JS'nin yerleşik yöntemlerinin tümünün hem düğümde hem de tarayıcılarda camelCase kullandığından bahsettiğini düşünüyorum
Luke Taylor

1
_idYerleşik tanımlayıcı büyük olasılıkla, anahtarın dahili / özel anahtar olması gerektiğini belirten ortak bir JavaScript kuralını izlemek için bir alt çizgi ile ön eklenir. Başka bir deyişle, _idbir koleksiyonun verilerini görüntüleyen hiç kimseye düzenlenmesi veya sunulması amaçlanmamıştır.
Beau Smith

58

VERİ TABANI

  • camelCase
  • adın sonuna DB ekle
  • tekil olun (koleksiyonlar çoğuldur)

MongoDB buna güzel bir örnek veriyor:

Kullanılacak bir veritabanı seçmek için, mongo kabuğunda, aşağıdaki örnekte olduğu gibi use <db> deyimini verin:

myDB
kullanın myNewDB kullanın

İçerik: https://docs.mongodb.com/manual/core/databases-and-collections/#databases

KOLEKSİYONLAR

  • Küçük harf adları: büyük / küçük harf duyarlılığı sorunlarını önler, MongoDB koleksiyon adları büyük / küçük harfe duyarlıdır.

  • Çoğul: bir şeyin koleksiyonunu çoğul olarak etiketlemek daha açıktır, örneğin "dosya" yerine "dosyalar"

  • > Sözcük ayırıcı yok: Farklı kişilerin (yanlış) sözcükleri ayırdığı (kullanıcı adı <-> kullanıcı_adı, ad_adı <->
    ad) sorunları önler . Bu,
    buradaki birkaç kişiye göre tartışmaya açık ancak argümanın koleksiyon adlarına izole edilmesi şartıyla, olması gerektiğini düşünmüyorum;) Kendinize
    alt çizgi veya
    deve ekleyerek koleksiyon adınızın okunabilirliğini geliştirdiğinizi fark ederseniz adı muhtemelen çok uzun veya
    koleksiyon
    kategorilendirmesi için standart olan uygun dönemleri kullanmalıdır .

  • Daha yüksek detay koleksiyonları için nokta gösterimi: Koleksiyonların nasıl ilişkili olduğuna dair bazı bilgiler verir. Örneğin, şemayı tasarlayan kişilerin iyi bir iş çıkarması koşuluyla, "kullanıcıları" sildiyseniz "users.pagevisits" i silebileceğinizden emin olabilirsiniz.

İçerik: http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

Koleksiyonlar için resmi MongoDB belgelerini bulana kadar bu önerilen kalıpları takip ediyorum.


25

Bu konuda bir kural belirtilmemiş olsa bile , bire bir ilişkiler için manuel referanslar sürekli olarak Moğol belgelerinde referans verilen koleksiyondan sonra adlandırılır. Adı her zaman yapıyı takip eder <document>_id.

Örneğin, bir dogskoleksiyonda bir dokümanın aşağıdaki gibi harici dokümanlara manuel referansları olacaktır:

{
  name: 'fido',
  owner_id: '5358e4249611f4a65e3068ab',
  race_id: '5358ee549611f4a65e3068ac',
  colour: 'yellow'
  ...
}

Bu _id, her belge için tanımlayıcı adlandırma Moğol kuralını izler .


1
cevabımda camelCase bahsetmedim, bu yüzden kullanacağımowner_id
danza

8

Koleksiyon için adlandırma kuralı

Bir koleksiyona isim vermek için alınması gereken birkaç önlem:

  1. Boş dizeli (“”) bir koleksiyon geçerli bir koleksiyon adı değil.
  2. Bir koleksiyon adı boş karakter içermemelidir, çünkü bu toplama adının sonunu tanımlar.
  3. Koleksiyon adı “system” ön ekiyle başlamamalıdır. çünkü bu iç koleksiyonlar için ayrılmıştır.
  4. Koleksiyon adına “$” karakterini dahil etmemek iyi olur çünkü veritabanı için çeşitli sürücüler koleksiyon adında “$” desteklemez.

    Bir veritabanı adı oluştururken akılda tutulması gereken şeyler şunlardır:

  5. Boş dize (“”) olan bir veritabanı geçerli bir veritabanı adı değil.
  6. Veritabanı adı 64 bayttan fazla olamaz.
  7. Veritabanı adı, büyük / küçük harfe duyarlı olmayan dosya sistemlerinde bile büyük / küçük harfe duyarlıdır. Bu nedenle ismi küçük harflerle tutmak iyidir.
  8. Bir veritabanı adı “/, \,.,“, *, <,>,:, |,?, $, ”Karakterlerinden hiçbirini içeremez. Ayrıca tek bir boşluk veya boş karakter içeremez.

Daha fazla bilgi için. Lütfen aşağıdaki bağlantıyı kontrol edin: http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html


3

Bence hepsi kişisel tercih. Tercihlerim, .NET'te NHibernate'i SQL Server ile kullanmaktan geliyor, bu yüzden muhtemelen diğerlerinin kullandığından farklı.

  • Veritabanları: Kullanılan uygulama .. ör .: Stackoverflow
  • Koleksiyonlar: Tekil isim, bir koleksiyon ne olacak, ör: Soru
  • Belge alanları, ör: MemberFirstName

Dürüst olmak gerekirse, proje için tutarlı olduğu sürece çok fazla önemli değil. Sadece işe git ve ayrıntıları terletme: P


1
Bence sonuçları olabilecek belge alanlarıdır, çünkü her belgenin içinde saklanırlar. Tomasz'in işaret ettiği gibi, onları kısa tutmak yer / bant genişliği tasarrufu sağlamalıdır. Yine de anlaşılması kolay bir şey kullanmanız çok daha önemli.
Rex Morgan

2

SERVER-863'ü alana kadar mümkün olduğunca kısa alan adları tutmak size kayıtların Özellikle bir çok yerde önerilir.

Kullanım durumunuza bağlı olarak alan adlarının depolama üzerinde büyük etkisi olabilir. Bunun tüm kullanıcılar üzerinde olumlu bir etkisi olacağından, bunun neden MongoDb için daha yüksek bir öncelik olmadığını anlayamıyorum. Başka bir şey yoksa, bant genişliği ve depolama maliyetleri hakkında iki kez düşünmeden alan adlarımızla daha açıklayıcı olmaya başlayabiliriz.

Lütfen oy verin .


Sadece bu cevabın gelecekteki potansiyel okuyucularını güncellemek için, MongoDB bugünlerde sıkıştırma yapıyor, bu yüzden uzun alan adları artık gerçekten bir sorun değil.
Hubro
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.