Menurut posting SO populer itu dianggap praktik yang buruk untuk awalan nama tabel. Di perusahaan saya setiap kolom diawali dengan nama tabel. Ini sulit bagi saya untuk membaca. Saya tidak yakin alasannya, tetapi penamaan ini sebenarnya adalah standar perusahaan. Saya tidak tahan dengan konvensi penamaan, tetapi saya tidak memiliki dokumentasi untuk mendukung alasan saya.
Yang saya tahu adalah bahwa membaca AdventureWorks jauh lebih sederhana. Dalam hal ini perusahaan kami DB Anda akan melihat tabel, Person dan mungkin memiliki nama kolom:
Person_First_Name
atau mungkin bahkan
Person_Person_First_Name (jangan tanya saya mengapa Anda melihat orang 2x)
Mengapa dianggap praktik yang buruk untuk melakukan pra-perbaiki nama kolom? Apakah garis bawah juga dianggap jahat di SQL?
Catatan: Saya memiliki Pro SQL Server 2008 - Desain dan implementasi Database Relasi. Referensi untuk buku itu dipersilakan.
Jawaban:
Garis bawah bukan kejahatan, hanya sulit untuk diketik. Yang buruk adalah mengubah standar midstream tanpa memperbaiki semua objek yang ada. Sekarang Anda memiliki personId, Person_id, dll. Dan tidak dapat mengingat tabel mana yang menggunakan garis bawah atau tidak. Konsistensi dalam penamaan (bahkan jika Anda secara pribadi tidak menyukai nama-nama) membantu membuatnya lebih mudah dikodekan.
Secara pribadi, satu-satunya tempat yang saya rasa perlu menggunakan tablename dalam sebuah kolom adalah pada kolom ID (penggunaan just ID adalah antipattern dalam desain basis data seperti yang dapat diberitahukan kepada siapa pun yang telah melakukan kueri pelaporan yang luas. Sangat menyenangkan untuk mengubah nama 12 kolom dalam kueri Anda setiap kali Anda menulis laporan.) Itu juga membuatnya lebih mudah untuk segera mengetahui FK di tabel lain karena mereka memiliki nama yang sama.
Namun, dalam database yang matang, itu lebih berfungsi daripada layak untuk mengubah standar yang ada. Terima saja itu adalah standar dan terus maju, ada jauh lebih banyak hal kritis yang perlu diperbaiki terlebih dahulu.
sumber
Argumen untuk awalan nama kolom akan mencegah nama "tabrakan" ketika bergabung dengan beberapa tabel DAN ketika pembuat kueri tidak menggunakan alias.
Kedua kueri akan memiliki dua kolom "nama" ( name_1, name_2 ) tanpa "memberi tahu" ke entitas mana itu berada. Dan Anda tidak pernah bisa yakin dengan nama kolom yang dihasilkan (apakah itu name_2 atau name_3 atau ...). Jika Anda menggunakan nama tabel awalan, nama kolom akan PERSON_NAME , COMPANY_NAME sehingga Anda tahu setiap nama yang mana entitas itu milik, ditambah Anda tahu bahwa nama kolom akan tetap konstan (jika Anda mendapatkan mereka di Jawa menggunakan JDBC misalnya ).
Kedua argumen dapat diabaikan jika Anda menggunakan aliasing, tapi saya pikir sebagian besar konvensi pengkodean yang diberlakukan di perusahaan datang sebagai konsekuensi dari banyak (junior) programmer tidak mengikuti praktik yang baik. Dalam kasus ini, misalnya, menggunakan wildcard pada pernyataan SELECT dapat menyebabkan masalah tanpa awalan nama.
Sedangkan untuk garis bawah pada nama tabel dan kolom, saya menggunakannya secara luas karena saya hanya menggunakan huruf kecil dalam nama plus garis bawah sebagai pemisah. Hanya menggunakan huruf kecil membantu membedakan pengidentifikasi dari kata kunci SQL (yang saya ketik di semua huruf besar):
sumber
Menambahkan awalan semacam itu ke nama kolom akan membuat tabel lebih sulit untuk berkembang. Sebagai contoh: jika pada akhirnya Anda menyadari bahwa Anda ingin / perlu mengubah nama tabel, Anda harus mengubah seluruh struktur tabel Anda (yaitu, tidak hanya nama tabel, tetapi nama semua kolomnya). Ini juga akan membuat lebih sulit memperbarui indeks tabel dan kode klien yang menanyakannya.
sumber
Ada pengecualian jika digunakan secara bijak (sesuai jawaban Patrick Karcher di tautan Anda) untuk nama kolom umum (biasanya hanya ID, kadang-kadang Nama) yang terlalu sering ambigu .
Praktik terbaik lainnya adalah selalu memenuhi syarat kolom dan objek di kueri Anda. Jadi awalan kolom menjadi diperdebatkan dan mengacaukan kode Anda.
Bandingkan ini: mana yang paling mudah dilihat?
sumber
SELECT name, salary FROM dbo.Person
? : PCREATE VIEW [dbo].[vwMeritPercentage] with schemabinding AS SELECT [Performance Score] as dblMinScore, ISNULL(( SELECT TOP 1 [Performance Score] FROM dbo.Budget b WHERE b.[Performance Score] > budget.[Performance Score] ORDER BY [Performance Score] ), 100.00) as dblMaxScore, [Merit Minimum] as dblMinPercentage, [Merit Midpoint] as dblBudgetPercentage, [Merit Maximum] as dblMaxPercentage FROM dbo.Budget;
Secara umum, sepertinya tidak ada standar di mana-mana. Pertanyaan yang Anda tautkan memiliki beberapa jawaban pilihan tinggi dengan konvensi yang sama sekali berbeda. Tentu saja, semua orang akan mempertahankan standar mereka sendiri, dan jauh lebih penting untuk menjaga konvensi yang konsisten dalam suatu proyek.
Yang mengatakan, nama kolom awalan tampaknya terlalu banyak. Anda sudah tahu tabel apa yang Anda gunakan, dan situasi dengan dua kolom dari tabel yang berbeda dengan nama yang sama dapat dengan mudah diselesaikan dengan menggunakan alias tabel atau kolom.
sumber
Di TSQL Anda bisa merujuk ke bidang dalam bentuk TableName.FieldName jika Anda ingin menghindari ambiguitas sehingga menambahkan nama tabel ke nama bidang benar-benar menghilangkan keterbacaan membuatnya TableName.TableName_FieldName atau serupa. Saya pikir menggunakan garis bawah atau bukan lebih merupakan pilihan pribadi. Saya lebih suka CamelCase dan saya menggunakan _ ketika saya ingin menambahkan akhiran atau sejenisnya misalnya TableName_Temp, tapi itu hanya saya.
sumber
Saya pernah bekerja pada sistem di mana kami memutuskan untuk menggunakan kode pendek untuk awalan kolom. Bidang PK menggunakan "nama tabel lengkap" sebagai awalan, dan semua kolom lainnya menggunakan 2-4 karakter secara konsisten sebagai awalannya. Setiap kolom juga menggunakan domain data sebagai sufiksnya. Jika dilakukan secara konsisten, itu bisa sangat bagus dan bersih. Itu omong kosong bahwa standar penamaan dari satu jenis atau yang lain melibatkan pengkodean ceroboh. Kehadiran standar yang konsisten adalah yang penting. Saya telah melihat sejumlah database yang tidak konsisten karena tidak ada standar yang jelas, dan bahwa lebih dari apa pun akan menunjukkan kepada saya bahwa mungkin ada masalah dalam struktur data. Jika perancang database bahkan tidak dapat secara konsisten memberi nama objek dan anak-anak mereka,
sumber
Awalan adalah praktik buruk karena menyebabkan masalah yang dirancang untuk mencegahnya. Seperti yang Anda nyatakan, sangat sulit untuk membaca kolom awalan. Jika Anda berakhir dengan nama kolom duplikat dalam kueri tempat Anda bergabung dengan dua tabel, Anda bisa mengatasinya, atau merupakan tampilan, prosedur tersimpan atau fungsi yang ditentukan pengguna tabular yang melakukannya untuk Anda jika Anda terus-menerus bergabung dengan tabel tertentu.
Sejauh menggunakan menggarisbawahi dalam nama tabel, itu adalah argumen agama. Pada akhirnya jika meningkatkan visibilitas dan membuat segalanya menjadi lebih mudah. Saya biasanya tidak akan memiliki spasi atau tabel dalam kolom atau nama tabel. Namun, saya dapat membuat pengecualian untuk tabel atau tampilan yang hanya digunakan oleh paket pelaporan, atau diekspor ke file CSV.
sumber
Banyak database memiliki batasan ketat pada jumlah karakter dalam nama kolom (yaitu Oracle).
Jika Anda bekerja dengan database yang memungkinkan nama kolom panjang, tetapi Anda kemudian memutuskan bahwa Anda ingin memigrasi struktur itu ke sistem database lain, awalan akan meningkatkan kemungkinan nama kolom Anda tidak valid.
Meskipun Anda bekerja dengan SQL Server sekarang, tidak ada yang bisa memprediksi masa depan, dan mungkin saja perangkat lunak Anda mungkin harus bekerja pada banyak basis data di masa depan.
sumber
Pertimbangkan untuk menulis kamus data (atau "registri"). Maksud saya dokumen yang berisi semua elemen data dalam model Anda: nama, deskripsi, dll. Itu harus independen dari implementasi model misalnya tidak harus menyebutkan nama tabel. Bagaimana Anda menyatukan nama seperti 'ID', 'Type' dan 'Code'?
Salah satu pendekatan adalah mengikuti pedoman standar internasional ISO / IEC 11179 - setelah semua, mengapa menciptakan kembali kemudi? Struktur dasarnya adalah:
[Object] [Qualifier] Property RepresentationTerm
dengan pembatas di antara elemen-elemen: SQL tidak bermain bagus dengan spasi dalam nama kolom dan garis bawah bekerja dengan baik secara visual.
Saya merasa bahwa seseorang di organisasi Anda mencoba mengikuti panduan ini ketika mereka muncul dengan nama elemen seperti
Person_Person_First_Name
.Contoh yang ingin saya tampilkan adalah kamus data Layanan Kesehatan Bangsa Inggris (NHS) .
Jadi saya tidak berpikir konvensi penamaan yang Anda harus kerjakan dengan suara terlalu buruk.
Pada implementasi misalnya dalam SQL, beberapa orang suka menghilangkan sub-elemen Objek, Kualifikasi dan Properti ketika nama tabel memberikan konteks misalnya
person_first_name
menjadifirst_name
dalamPerson
tabel dll. Namun, aturan praktis bahwa elemen data tidak boleh mengubah namanya hanya karena lokasi itu dalam model fisik sepertinya bagus. Siapa pun yang berpikir itu bukan ide yang baik untuk mengikuti aturan ini harus diberi tugas mendokumentasikan semua variasi nama yang telah mereka gunakan :)Anda akan menemukan ringkasan bagus ISO 11179 dalam buku Gaya Pemrograman Joe Celko , termasuk bukti untuk lebih memilih garis bawah sebagai pembatas dalam nama kolom.
sumber
Beberapa merasa lebih mudah dalam kode untuk mengetahui dari mana tabel data berasal, namun, jika Anda berbicara tentang sistem berorientasi objek Anda harus menggunakan konteks nama untuk mengetahui dari mana asalnya, dalam hal ini nama tabel.
Secara pribadi, awalan nama tabel merupakan indikasi bahwa para pengembang tidak terlalu ahli dan ketika Anda menggali lebih dalam, Anda akan menemukan banyak konvensi pengkodean yang buruk lainnya dan jika saya harus menebak aplikasinya memiliki terlalu banyak tabel, buggy, dll.
sumber