Penamaan Tabel: Garis Bawah vs Camelcase? ruang nama? Singular vs Jamak?

91

Saya telah membaca beberapa pertanyaan / jawaban di StackOverflow mencoba menemukan cara 'terbaik', atau harus saya katakan harus diterima, untuk memberi nama tabel pada Database.

Sebagian besar pengembang cenderung memberi nama tabel tergantung pada bahasa yang membutuhkan database (JAVA, .NET, PHP, dll). Namun saya hanya merasa ini tidak benar.

Cara saya menamai tabel sampai sekarang adalah melakukan sesuatu seperti:

doctorsMain
doctorsProfiles
doctorsPatients
patientsMain
patientsProfiles
patientsAntecedents 

Hal-hal yang saya khawatirkan adalah:

  • Keterbacaan
  • Identifikasi cepat dari modul tempat tabel berasal (dokter || pasien)
  • Mudah dimengerti, untuk mencegah kebingungan.

Saya ingin membaca pendapat apa pun tentang konvensi penamaan. Terima kasih.

MarioRicalde
sumber

Jawaban:

183

Menjadi konsisten jauh lebih penting daripada skema khusus yang Anda gunakan.

David Oneill
sumber
21
Dengan kata lain, ya, bagus, Anda telah mengidentifikasi beberapa skema yang konsisten. Langsung saja!
Phil H
3
+1 untuk komentar. Selain itu, di samping catatan skema penamaan saat ini PascalCase lebih baik, khususnya jika Anda tidak menggunakan Alias ​​untuk SQL Queries. Dengan cara ini Anda bisa menggunakan camelcase pada nama kolom tabel dan Pascal Case pada Nama Tabel.
MarioRicalde
3
Kasus pascal / unta untuk nama tabel dapat menyebabkan beberapa masalah. Setiap tabel akan memiliki file di sistem file, dan beberapa di antaranya tidak peka huruf besar / kecil (misalnya OSX).
ismriv
2
@ismriv itu hanya masalah jika Anda tidak konsisten, jika Anda selalu mengacu pada tabel / tampilan / kolom dengan kasus konsisten yang sama Anda seharusnya tidak memiliki masalah, tidak malas saat menulis nama-nama ini akan memberi Anda keuntungan besar keuntungan nanti saat membaca. Menggunakan PascalCase untuk tabel dan camelCase untuk kolom membantu mengidentifikasi tipe nama secara sekilas dan juga meniru konvensi Umum Berorientasi Objek.
TWiStErRob
Saya setuju bahwa konsistensi adalah kunci, tapi ini merupakan pertanyaan lama dan bagi mereka yang menggunakan platform database yang lebih baru seperti pergeseran merah dan Snowflake yang default baik semua huruf besar atau huruf kecil pengenal, saya akan menambahkan bahwa itu adalah cukup penting untuk berpikir tentang Anda konvensi penamaan tepat di awal. Memilih untuk menggunakan konvensi penamaan seperti Camel Case pada platform ini dapat menyebabkan Anda sakit kepala yang tidak perlu di kemudian hari misalnya Anda harus menggunakan pengidentifikasi yang dikutip sepanjang waktu dan resolusi nama objek mungkin menghasilkan hasil yang tidak diharapkan.
Nathan Griffiths
23

Saya biasanya menggunakan PascalCase dan entitasnya tunggal:

DoctorMain
DoctorProfile
DoctorPatient

Ini meniru konvensi penamaan untuk kelas di aplikasi saya menjaga semuanya tetap rapi, bersih, konsisten , dan mudah dimengerti untuk semua orang.

Justin Niessner
sumber
3
Ya ... ya saya lakukan. Saya sedikit berkabut pagi ini. Sedang mengedit ... terima kasih.
Justin Niessner
3
Ini juga dikenal sebagai "CapitalCase".
corsiKa
4
Saya belum pernah mendengarnya disebut "CapitalCase" selama 30 tahun pengalaman saya. Saya paling sering mendengarnya disebut "kasus unta" dan "kasus Pascal" baru-baru ini diambil. Saya datang ke sini untuk melihat mengapa orang-orang tampaknya menggunakan kasus unta untuk SQL ketika sebagian besar tidak peka huruf besar / kecil secara historis. Saya tentu tidak ingin ketinggalan zaman.
Sinthia V
@SinthiaV Saya tidak tahu tentang orang lain tetapi dalam kasus kami karena kami menggunakan JS ORM (sayangnya) opsinya adalah 1) melanggar konvensi dengan menggunakan camelCase di db 2) melanggar konvensi dengan menggunakan snake_case di JS 3) peta camelCase di JS ke snake_case di db. Kami memutuskan tanpa banyak pemikiran awal untuk menggunakan camelCase di db, dan itu tidak terlalu buruk, tetapi mengutip semuanya agak merepotkan.
Andy
@SinthiaV sebagai komentar tidak berguna ini mungkin dalam konteks pertanyaan SO yang sebenarnya, PascalCase tidak sama dengan camelCase. PascalCase menggunakan huruf besar pada huruf pertama dari setiap kata (yang terpenting termasuk yang pertama) sedangkan camelCase hanya menggunakan huruf besar setelah kata pertama. Bacaan lebih lanjut: medium.com/better-programming/…
penasaran
11

Sifat dukungan SQL yang tidak peka huruf besar / kecil Underscores_Scheme. Namun perangkat lunak modern mendukung segala jenis skema penamaan. Namun terkadang beberapa bug, kesalahan, atau faktor manusia yang buruk dapat menyebabkan UPPERCASINGEVERYTHINGmereka, yang memilih keduanya Pascal_Casedan Underscore_Caseskema hidup dengan semua saraf di tempat yang baik.

terR0Q
sumber
10

Agregasi dari sebagian besar di atas:

  • jangan mengandalkan case di database
  • jangan pertimbangkan kasus atau pemisah bagian dari nama - hanya kata-katanya
  • gunakan pemisah atau casing apa pun yang merupakan standar untuk bahasa Anda

Kemudian Anda dapat dengan mudah menerjemahkan (bahkan secara otomatis) nama antar lingkungan.

Tetapi saya akan menambahkan pertimbangan lain: Anda mungkin menemukan bahwa ada faktor-faktor lain ketika Anda berpindah dari kelas di aplikasi Anda ke tabel di database Anda: objek database memiliki tampilan, pemicu, procs tersimpan, indeks, batasan, dll - itu juga butuh nama. Jadi misalnya, Anda mungkin mendapati diri Anda hanya mengakses tabel melalui tampilan yang biasanya hanya berupa "pilih * dari foo" sederhana. Ini dapat diidentifikasi sebagai nama tabel hanya dengan akhiran '_v' atau Anda dapat meletakkannya di skema yang berbeda. Tujuan dari lapisan abstraksi yang sederhana adalah bahwa lapisan tersebut dapat diperluas bila diperlukan untuk memungkinkan perubahan dalam satu lingkungan untuk menghindari dampak yang lain. Ini tidak akan merusak saran penamaan di atas - hanya beberapa hal lagi yang perlu diperhitungkan.

KenFar
sumber
8

Saya menggunakan garis bawah. Saya melakukan proyek Oracle beberapa tahun yang lalu, dan tampaknya Oracle memaksa semua nama objek saya menggunakan huruf besar, yang mana akan mengalahkan skema casing apa pun. Saya sebenarnya bukan orang Oracle, jadi mungkin ada cara lain yang tidak saya sadari, tetapi hal itu membuat saya menggunakan garis bawah dan saya tidak pernah kembali.

sinar
sumber
2
Dalam 11g dan lebih tinggi, kasus tampaknya dipertahankan jika nama tabel dibungkus dengan tanda kutip ganda. Taruh ini di sini untuk referensi di masa mendatang. Saya tahu dengan pasti Postgres melakukannya juga, mesin db lain mungkin tidak.
John O
8

Karena pertanyaannya tidak spesifik untuk platform atau mesin DB tertentu, saya harus mengatakan untuk portabilitas maksimum, Anda harus selalu menggunakan nama tabel huruf kecil.

/ [a-z _] [a-z0-9 _] * / adalah satu-satunya pola nama yang diterjemahkan dengan mulus di antara platform yang berbeda. Alfa-numerik huruf kecil + garis bawah akan selalu berfungsi secara konsisten.

Seperti disebutkan di tempat lain, nama relasi (tabel) harus tunggal: http://www.teamten.com/lawrence/programming/use-singular-nouns-for-database-table-names.html

kaya remer
sumber
Saya setuju - garis bawah memiliki masalah paling sedikit dibandingkan dengan Pascal atau Casing unta. Khususnya ketika Anda menamai perjalanan ke model, dto dan frontend di bagian akhir.
Saulius
6

Saya cenderung setuju dengan orang-orang yang mengatakan itu tergantung pada konvensi bahasa yang Anda gunakan (mis. PascalCase untuk C # dan snake_case untuk Ruby).

Jangan pernah camelCase.

Mark Rendle
sumber
2
Ada: Pascal_Case_With_Underscores
uetoyo
7
Ini tidak masuk akal bila Anda ingin mengakses tabel yang sama dengan dua bahasa berbeda yang memiliki konvensi penamaan berbeda.
Daniel W.
5

Setelah membaca banyak pendapat lain, saya pikir sangat penting untuk menggunakan konvensi penamaan bahasa, konsistensi lebih penting daripada konvensi penamaan hanya jika Anda (dan akan menjadi) satu-satunya pengembang aplikasi. Jika Anda menginginkan keterbacaan (yang sangat penting) Anda lebih baik menggunakan konvensi penamaan untuk setiap bahasa. Di MySQL misalnya, saya tidak menyarankan menggunakan CamelCase karena tidak semua platform peka huruf besar kecil. Jadi di sini garis bawah lebih baik.

Vlad Manuel Mureșan
sumber
1
Sangat setuju!!! Apalagi dengan MySql ketika Anda menjalankannya di windows semuanya jadi dari camelCasesampai camelcase. Jadi memiliki kotak ular jauh lebih baik. Juga tentang Modern software however supports any kind of naming schemeAnda tidak memiliki jaminan bahwa yop akan menulis kode untuk versi lunak terakhir. Khusus untuk database - update versi bukanlah hal yang sepele bila memikirkan biaya regresi.
Cherry
2

Ini adalah lima sen saya. Saya sampai pada kesimpulan bahwa jika DB dari vendor yang berbeda digunakan untuk satu proyek, ada dua cara terbaik:

  1. Gunakan garis bawah.
  2. Gunakan kasus unta dengan tanda kutip.

Alasannya adalah karena beberapa database akan mengubah semua karakter menjadi huruf besar dan beberapa menjadi huruf kecil. Jadi, jika Anda memilikinya myTableakan menjadi MYTABLEatau mytablekapan Anda akan bekerja dengan DB.

Pavel_K
sumber
1

Sayangnya tidak ada jawaban "terbaik" untuk pertanyaan ini. Seperti yang dikatakan @David, konsistensi jauh lebih penting daripada konvensi penamaan.

Kane
sumber
1

ada banyak variasi tentang cara memisahkan kata, jadi di sana Anda harus memilih apa pun yang lebih Anda suka; tetapi pada saat yang sama, tampaknya hampir ada kesepakatan bahwa nama tabel harus tunggal.

Javier
sumber
1

Konvensi penamaan ada dalam lingkup bahasa, dan bahasa yang berbeda memiliki konvensi penamaan yang berbeda.

SQL peka huruf besar / kecil secara default; jadi, snake_case adalah konvensi yang banyak digunakan. SQL juga mendukung pengenal yang dibatasi; jadi, kasus campuran dalam opsi, seperti camelCase (Java, di mana bidang == kolom) atau PascalCase (C #, di mana tabel == kelas dan kolom == bidang). Jika mesin DB Anda tidak dapat mendukung standar SQL, itulah masalahnya. Anda dapat memutuskan untuk menerimanya atau memilih mesin lain. (Dan mengapa C # harus berbeda adalah titik kejengkelan bagi kita yang mengkode keduanya.)

Jika Anda bermaksud untuk hanya menggunakan satu bahasa di layanan dan aplikasi Anda, gunakan konvensi bahasa itu di semua lapisan. Selain itu, gunakan konvensi bahasa yang paling banyak digunakan di domain tempat bahasa itu digunakan.

Chris Golledge
sumber