Apakah ada konvensi penamaan untuk MySQL?

162

Begini cara saya melakukannya:

  1. Nama tabel adalah huruf kecil, menggunakan garis bawah untuk memisahkan kata, dan tunggal (mis foo. foo_bar, Dll.
  2. Saya umumnya (tidak selalu) memiliki PK kenaikan otomatis. Saya menggunakan konvensi berikut: tablename_id(mis foo_id. foo_bar_id, Dll).
  3. Ketika tabel berisi kolom yang merupakan kunci asing, saya hanya menyalin nama kolom kunci itu dari tabel apa pun itu berasal. Sebagai contoh, katakanlah tabel foo_barmemiliki FK foo_id(di mana foo_idadalah PK foo).
  4. Ketika mendefinisikan FK untuk menegakkan integritas referensial, saya menggunakan yang berikut: tablename_fk_columnname(misalnya melanjutkan 3, itu akan menjadi foo_bar_foo_id). Karena ini adalah kombinasi nama tabel / nama kolom, dijamin unik dalam database.
  5. Saya memesan kolom-kolom seperti ini: PK, FK, lalu kolom lainnya secara alfabet

Apakah ada cara yang lebih baik dan lebih standar untuk melakukan ini?

StackOverflowNewbie
sumber
6
Apakah salah menggunakan untuk peningkatan otomatis PK hanya "id"? Mengapa? Nama kolom hanya memiliki arti dalam konteks tabel. Jadi saya punya satu "id" di setiap tabel, dan mungkin memiliki banyak id_ <table_name> untuk FK.
Zbyszek
3
@Zbyszek Saya pikir alasan paling sederhana terhadap itu hanyalah untuk konsistensi / kesederhanaan. Daripada memiliki id_tableB=> oh tidak ada kolom dengan nama yang berbeda id , konsistensi dari id_tableB=> id_tableBterlihat lebih rapi ... atau seperti yang dilakukan OP: foo_id=> foo_iddaripada foo_id=>id
Don Cheadle

Jawaban:

106

Saya akan mengatakan itu pertama dan terutama: konsisten.

Saya rasa Anda hampir sampai di sana dengan konvensi yang telah Anda uraikan dalam pertanyaan Anda. Beberapa komentar:

Poin 1 dan 2 menurut saya bagus.

Butir 3 - sayangnya ini tidak selalu memungkinkan. Pikirkan tentang bagaimana Anda akan mengatasi satu tabel foo_baryang memiliki kolom foo_iddan another_foo_idkeduanya merujuk pada kolom footabel foo_id. Anda mungkin ingin mempertimbangkan bagaimana menangani ini. Ini adalah sedikit kasus sudut sekalipun!

Poin 4 - Mirip dengan Poin 3. Anda mungkin ingin memperkenalkan nomor di akhir nama kunci asing untuk memenuhi memiliki lebih dari satu kolom referensi.

Poin 5 - Saya akan menghindari ini. Ini memberi Anda sedikit dan akan menjadi sakit kepala ketika Anda ingin menambah atau menghapus kolom dari tabel di kemudian hari.

Beberapa poin lainnya adalah:

Konvensi Penamaan Indeks

Anda mungkin ingin memperkenalkan konvensi penamaan untuk indeks - ini akan sangat membantu untuk setiap pekerjaan metadata database yang mungkin ingin Anda lakukan. Misalnya Anda mungkin hanya ingin memanggil indeks foo_bar_idx1atau foo_idx1- sepenuhnya terserah Anda tetapi patut dipertimbangkan.

Nama Kolom Singular vs Plural

Mungkin merupakan ide yang baik untuk mengatasi masalah pelipatan jamak vs tunggal dalam nama kolom Anda serta nama tabel Anda. Subjek ini sering menyebabkan perdebatan besar dalam komunitas DB. Saya akan tetap dengan bentuk tunggal untuk nama tabel dan kolom. Sana. Saya sudah mengatakannya.

Hal utama di sini tentu saja adalah konsistensi!

Tom Mac
sumber
Apa yang lebih baik dari poin 5? Kenapa bisa menjadi sakit kepala?
Rasshu
7
Untuk menindaklanjuti, saya menemukan verry ini bermanfaat bagi mereka yang akan datang ke sini nanti: launchbylunch.com/posts/2014/Feb/16/sql-naming-conventions/…
Enissay
1
Saya mengalami kesulitan menemukan "skema" yang baik untuk penamaan tabel saya yang menampung objek model yang terdiri dari dua nama (DocumentChapter, DocumentVersion, DocumentType dll). Misalnya untuk DocumentType saya bisa memberi nama documenttypeatau document_type. Saya lebih suka yang terakhir, tetapi sebagian besar waktu saya memiliki banyak hubungan banyak dan saya perlu tabel yang terlihat seperti document_document_type. Ada saran bagaimana menangani ini?
lexith
@ rsb2097 Re: point 5 - Setelah menambahkan satu kolom (sampai akhir) pesanan bisa menjadi tidak valid. Anda tidak boleh menambahkan kendala apa pun yang mengharuskan pemesanan ulang kolom karena itu adalah overhead yang tidak perlu.
Will Sheppard
21

Konsistensi adalah kunci standar penamaan apa pun. Selama itu logis dan konsisten, Anda 99% di sana.

Standar itu sendiri adalah preferensi pribadi yang sangat banyak - jadi jika Anda menyukai standar Anda, maka jalankan dengan itu.

Untuk menjawab pertanyaan Anda secara langsung - tidak, MySQL tidak memiliki konvensi / standar penamaan yang disukai, jadi menggulirkan sendiri tidak masalah (dan pertanyaan Anda tampaknya logis).

mal-wan
sumber
4

Untungnya, pengembang PHP bukan "fanatik unta" seperti komunitas pengembangan yang saya tahu.

Kebaktian Anda terdengar bagus.

Asal mereka a) sederhana, dan b) konsisten - Saya tidak melihat masalah :)

PS: Secara pribadi, saya kira 5) berlebihan ...

paulsm4
sumber
2
Jauh dari menjadi fanatik, kawanan unta sebenarnya disukai oleh banyak komunitas DB karena beberapa RDBMS 'tidak peka terhadap titik di mana mereka akan menghapus kasus (atau mengubah segalanya menjadi huruf besar) sehingga segala sesuatunya menjadi sangat buruk dengan sangat cepat.
mal-wan
@wan: bisakah Anda menentukan RDBMS yang mana? Dan saya sendiri seorang joki unta. Caps hanya melayani satu tujuan dalam skema saya, untuk menunjukkan tabel bergabung dan (dalam kasus bidang) untuk menunjukkan batas kata, sehingga _ dapat secara eksklusif untuk menunjukkan othertable_id (yaitu nama tabel = othertable dan bidang dalam tabel itu = id ). Selain itu, jika RDBMS lainnya tidak peka huruf besar-kecil, apa masalahnya? Saya tidak akan pernah memiliki versi huruf besar dan kecil dari tabel yang sama! Oh, dan saya tidak akan memilih RDBMS yang tidak case-sensitive - Saya lebih suka menulis kode yang konsisten
Samuel Fullman
7
Saya suka ironi pengguna MySQL yang tidak menyukai CamelCase dan nama produk yang kami gunakan: MySQL, ditulis dalam CamelCase
DBX12
1
@ DBX12 Untuk menjadi bertele-tele, itu PascalCase, bukan camelCase, tapi poin Anda masih berlaku.
MarredCheese
@ MarsredCheese Tidak pernah memikirkannya, tetapi Anda benar. camelCase seharusnya tidak memiliki punuk pada awalnya.
DBX12
1

Jawaban Sederhana: TIDAK

Ya, setidaknya konvensi penamaan yang didorong oleh Oracle atau komunitas, tidak, pada dasarnya, Anda harus menyadari mengikuti aturan dan batasan untuk pengidentifikasi, seperti ditunjukkan dalam dokumentasi MySQL: https://dev.mysql.com /doc/refman/8.0/id/identifiers.html

Tentang konvensi penamaan yang Anda ikuti, saya pikir tidak apa-apa, hanya nomor 5 yang sedikit tidak perlu, saya pikir sebagian besar alat visual untuk mengelola basis data menawarkan opsi untuk menyortir nama kolom (saya menggunakan DBeaver, dan memilikinya), jadi jika purpouse memiliki presentasi visual yang bagus dari meja Anda, Anda dapat menggunakan opsi ini saya sebutkan.

Berdasarkan pengalaman pribadi, saya akan merekomendasikan ini:

  • Gunakan huruf kecil . Ini hampir memastikan interoperabilitas ketika Anda memigrasi database Anda dari satu server ke yang lain. Kadang-kadang lower_case_table_namestidak dikonfigurasi dengan benar dan server Anda mulai melempar kesalahan hanya dengan tidak mengenali standar camelCase atau PascalCase Anda (masalah sensitivitas huruf).
  • Nama pendek . Sederhana dan jelas. Yang paling mudah dan cepat adalah mengidentifikasi tabel atau kolom Anda, semakin baik. Percayalah, ketika Anda membuat banyak pertanyaan berbeda dalam waktu singkat lebih baik memiliki semua yang mudah untuk ditulis (dan dibaca).
  • Hindari awalan . Kecuali Anda menggunakan database yang sama untuk tabel aplikasi yang berbeda, jangan gunakan awalan. Ini hanya menambah lebih banyak verbositas ke kueri Anda. Ada situasi di mana ini bisa berguna, misalnya, ketika Anda ingin mengidentifikasi kunci utama dan kunci asing, yang biasanya nama tabel digunakan sebagai awalan untuk kolom id.
  • Gunakan garis bawah untuk memisahkan kata . Jika Anda masih ingin menggunakan lebih dari satu kata untuk memberi nama tabel, kolom, dll., Jadi gunakan garis bawah untuk separating_the_words , ini membantu keterbacaan (mata dan otak Anda yang tertekan akan berterima kasih).
  • Bersikaplah konsisten . Setelah Anda memiliki standar sendiri, ikuti itu. Jangan menjadi orang yang membuat aturan dan adalah orang pertama yang melanggarnya, itu memalukan.

Dan bagaimana dengan penamaan "Plural vs Singular"? Ya, inilah sebagian besar situasi preferensi pribadi. Dalam kasus saya, saya mencoba menggunakan nama jamak untuk tabel karena saya pikir tabel sebagai kumpulan elemen atau paket berisi elemenig, jadi nama jamak masuk akal bagi saya; dan nama tunggal untuk kolom karena saya melihat kolom sebagai atribut yang menggambarkan secara tunggal untuk elemen tabel tersebut.

Fabrizio Valencia
sumber