Apa konvensi penamaan untuk MongoDB?

188

Apakah ada seperangkat konvensi penamaan yang disukai untuk hak MongoDB seperti database, koleksi, nama bidang?

Saya berpikir seperti ini:

  • Database: terdiri dari tujuan (kata dalam bentuk tunggal) dan diakhiri dengan "db" - semua huruf kecil: imagedb, resume, memberdb, dll.
  • Koleksi: jamak dalam huruf kecil: gambar, resume,
  • Bidang dokumen: lowerCamelCase, mis. MemberFirstName, fileName, dll
Andrey
sumber

Jawaban:

128
  1. Keep'em singkat: Mengoptimalkan Penyimpanan Objek Kecil , SERVER-863 . Konyol tapi benar.

  2. Saya kira cukup banyak aturan yang sama yang berlaku untuk basis data hubungan harus diterapkan di sini. Dan setelah sekian dekade, masih belum ada kesepakatan apakah tabel RDBMS harus dinamai tunggal atau jamak ...

  3. MongoDB berbicara JavaScript, jadi gunakan konvensi penamaan JS dari camelCase.

  4. Dokumentasi resmi MongoDB menyebutkan Anda dapat menggunakan garis bawah, juga pengenal bawaan dinamai _id(tetapi ini mungkin untuk menunjukkan bahwa _idini dimaksudkan untuk bersifat pribadi, internal, tidak pernah ditampilkan atau diedit.

Tomasz Nurkiewicz
sumber
95
3 dan 4 agak kontradiktif - JS lebih suka camelcase, Mongo tampaknya lebih suka garis bawah ... tetapi ketika ragu, pilihlah garis bawah. Orang-orang yang terbiasa dengan huruf non-latin akan berterima kasih.
Matt Zukowski
1
Lihat pertanyaan ini untuk debat tunggal vs jamak: stackoverflow.com/questions/338156/…
Jason
4
Saya tidak yakin saya akan mengatakan "JS lebih suka camelcase". JS sendiri tidak memiliki preferensi, tetapi mungkin benar untuk mengatakan bahwa sebagian besar programmer JS cenderung menggunakan case unta.
treeface
1
@ wajah Saya pikir Matt merujuk pada fakta metode built-in JS semua menggunakan camelCase, baik di node maupun di browser
Luke Taylor
1
Pengidentifikasi _idbawaan kemungkinan besar diawali dengan garis bawah untuk mengikuti konvensi JavaScript umum yang menunjukkan bahwa kunci tersebut dimaksudkan untuk menjadi kunci internal / pribadi. Dengan kata lain, _idini tidak dimaksudkan untuk diedit atau disajikan kepada siapa pun yang melihat data koleksi.
Beau Smith
58

DATABASE

  • camelCase
  • tambahkan DB di akhir nama
  • make singular (koleksi jamak)

MongoDB menyatakan contoh yang bagus:

Untuk memilih basis data yang akan digunakan, dalam mongo shell, keluarkan pernyataan penggunaan <db>, seperti dalam contoh berikut:

gunakan
myDB gunakan myNewDB

Konten dari: https://docs.mongodb.com/manual/core/databases-and-collections/#databases

KOLEKSI

  • Nama huruf kecil: menghindari masalah sensitivitas huruf, nama koleksi MongoDB sensitif huruf.

  • Jamak: lebih jelas memberi label koleksi sesuatu sebagai jamak, misalnya "file" daripada "file"

  • > Tidak ada pemisah kata: Menghindari masalah di mana orang yang berbeda (salah) memisahkan kata (nama pengguna <-> user_name, first_name <->
    nama depan). Yang ini untuk diperdebatkan menurut beberapa orang di
    sekitar sini, tetapi asalkan argumennya diisolasikan ke nama koleksi, saya rasa tidak seharusnya;) Jika Anda menemukan diri Anda meningkatkan
    keterbacaan nama koleksi Anda dengan menambahkan garis bawah atau
    untaCasing koleksi Anda nama mungkin terlalu panjang atau harus menggunakan
    periode yang sesuai yang merupakan standar untuk
    kategorisasi koleksi .

  • Notasi titik untuk koleksi detail yang lebih tinggi: Memberikan beberapa indikasi tentang bagaimana koleksi terkait. Misalnya, Anda dapat yakin bahwa Anda dapat menghapus "users.pagevisits" jika Anda menghapus "pengguna", asalkan orang yang merancang skema melakukan pekerjaan dengan baik.

Konten dari: http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

Untuk koleksi saya mengikuti pola yang disarankan ini sampai saya menemukan dokumentasi resmi MongoDB.

BBi7
sumber
25

Bahkan jika tidak ada konvensi yang ditentukan tentang ini, referensi manual secara konsisten dinamai setelah koleksi referensi dalam dokumentasi Mongo, untuk hubungan satu-ke-satu. Nama selalu mengikuti struktur <document>_id.

Misalnya, dalam dogskoleksi, sebuah dokumen akan memiliki referensi manual ke dokumen eksternal yang dinamai seperti ini:

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

Ini mengikuti konvensi Mongo tentang penamaan _idpengidentifikasi untuk setiap dokumen.

danza
sumber
1
saya tidak menyebutkan camelCase dalam jawaban saya, jadi saya akan menggunakanowner_id
danza
8

Konvensi penamaan untuk koleksi

Untuk menyebutkan koleksi, beberapa tindakan pencegahan harus diambil:

  1. Koleksi dengan string kosong ("") bukan nama koleksi yang valid.
  2. Nama koleksi tidak boleh mengandung karakter nol karena ini menentukan akhir nama koleksi.
  3. Nama koleksi tidak boleh dimulai dengan awalan "sistem." karena ini disediakan untuk koleksi internal.
  4. Sebaiknya tidak mengandung karakter "$" dalam nama koleksi karena berbagai driver yang tersedia untuk basis data tidak mendukung "$" dalam nama koleksi.

    Hal-hal yang perlu diingat saat membuat nama database adalah:

  5. Database dengan string kosong ("") bukan nama database yang valid.
  6. Nama basis data tidak boleh lebih dari 64 byte.
  7. Nama database bersifat case-sensitive, bahkan pada sistem file non-case-sensitive. Oleh karena itu baik untuk menjaga nama dalam huruf kecil.
  8. Nama basis data tidak boleh mengandung karakter ini “/, \,.,“, *, <,>,:, |,?, $, ”. Itu juga tidak bisa mengandung spasi tunggal atau karakter nol.

Untuk informasi lebih lanjut. Silakan periksa tautan di bawah ini: http://www.tutespace.com/2016/03/schema-design-and-naming-conventions-in.html

Shrinivas Kalangutkar
sumber
3

Saya pikir itu semua preferensi pribadi. Preferensi saya berasal dari menggunakan NHibernate, di .NET, dengan SQL Server, jadi mereka mungkin berbeda dari apa yang orang lain gunakan.

  • Basis data: Aplikasi yang sedang digunakan .. mis: Stackoverflow
  • Koleksi: Nama tunggal, apa yang akan menjadi koleksi, mis: Pertanyaan
  • Bidang dokumen, mis: MemberFirstName

Jujur saja, tidak masalah, asalkan konsisten untuk proyek. Mulailah bekerja dan jangan memusingkan detailnya: P

Rex Morgan
sumber
1
Saya pikir salah satu yang bisa memiliki konsekuensi adalah bidang dokumen, karena mereka akan disimpan di dalam setiap dokumen. Seperti yang ditunjukkan Tomasz, menjaga mereka tetap pendek harus menghemat ruang / bandwidth. Saya pikir itu jauh lebih penting bahwa Anda menggunakan sesuatu yang membuatnya mudah dimengerti.
Rex Morgan
2

Sampai kita mendapatkan SERVER-863 menjaga nama field sesingkat mungkin disarankan terutama di mana Anda memiliki banyak catatan.

Tergantung pada kasus penggunaan Anda, nama bidang dapat memiliki dampak besar pada penyimpanan. Tidak dapat memahami mengapa ini bukan prioritas yang lebih tinggi untuk MongoDb, karena ini akan berdampak positif pada semua pengguna. Jika tidak ada yang lain, kita bisa mulai lebih deskriptif dengan nama bidang kita, tanpa berpikir dua kali tentang bandwidth & biaya penyimpanan.

Silakan pilih .

FlappySocks
sumber
Hanya untuk memperbarui calon pembaca di masa depan dari jawaban ini, MongoDB melakukan kompresi akhir-akhir ini, jadi nama field yang panjang tidak lagi menjadi masalah.
Hubro