Konvensi penamaan nama kolom dan praktik terbaik

19

Saya ingin pendapat ahli tentang praktik terbaik dalam hal penamaan kolom .

Latar belakangnya adalah bahwa menurut Wikipedia , sintaks berikut,

SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID);

lebih efisien daripada

SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID);

Namun, JOIN ... USINGsintaks hanya berfungsi dari semua kolom kunci utama yang memiliki nama unik secara global . Jadi saya bertanya-tanya apakah ini dianggap sebagai hal yang benar untuk dilakukan.

Secara pribadi, saya selalu terbiasa membuat tabel dengan kolom PK id, dan kolom kunci asing othertable_id. Tetapi dengan cara itu tidak mungkin untuk menggunakan USINGatau NATURAL JOIN.

Tautan apa pun ke gaya desain atau panduan praktik terbaik untuk desain meja juga akan dihargai!

Kerrek SB
sumber
3
Wikipedia salah. Versi pertama tidak berarti lebih efisien daripada yang kedua. Di bawah tenda basis data akan membuat kueri identik absolut
a_horse_with_no_name

Jawaban:

13

Ini telah ditanyakan sebelumnya pada SO.

Di mana Anda memiliki nama umum dan sangat ambigu, lalu awali dengan nama tabel. Artinya, apa pun yang Anda harus miliki alias di hampir setiap permintaan.

Jadi untuk meja Karyawan saya harus

EmployeeID
EmployeeName
Comment
Salary
StartDate
EndDate
InsertedDateTime
...

Dan Wikipedia sebenarnya mengatakan:

Akan tetapi, konstruksi USING lebih dari sekadar gula sintaksis, karena himpunan hasil berbeda dari himpunan hasil versi dengan predikat eksplisit. Secara khusus, setiap kolom yang disebutkan dalam daftar USING akan muncul hanya sekali, dengan nama yang tidak memenuhi syarat, daripada satu kali untuk setiap tabel dalam gabungan.

Itu kurang satu kolom. Anda tidak akan pernah menggunakan SELECT *jadi intinya adalah moot ...

gbn
sumber
Saya tidak berpikir untuk mencari SO - konyol saya. Apakah Anda memiliki tautan ke pertanyaan SO yang sangat bagus? Bagaimanapun, terima kasih, saya akan tetap berpegang pada penamaan "ID unik" untuk selanjutnya!
Kerrek SB
@ Krrk SB: sebenarnya, saya belum. Saya cenderung mengabaikannya karena masing-masing dijawab atau ditutup dengan cepat :-) Maaf
gbn
Saya ingin melihat pertanyaan serupa di SO, kalau ada yang bisa menggali tautan. Saya datang ke sini karena saya tidak dapat menemukan pertanyaan di sana, dan saya yakin itu sudah ditanyakan. Saya segera menemukan pertanyaan ini.
Nicholas Shanks
Itu di programmer.SE. Pertarungan roti besar yang bagus untuk Anda ... programmers.stackexchange.com/questions/114728/
gbn
6

Buku ini membahas tentang penggunaan ID sebagai antipattern SQL dan saya setuju dengan penulis. http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/ref=sr_1_1?s=books&ie=UTF8&qid=1330025134&sr=1-1

Ini adalah masalah khusus ketika Anda melakukan pelaporan kompleks dan membutuhkan lebih dari satu id seperti yang harus Anda alias. Menggunakan ID tablename juga membuatnya lebih mudah untuk mengidentifikasi FK yang benar untuk bergabung (karena mereka memiliki nama yang sama) dan membuat kesalahan dari bergabung dengan hal yang salah lebih kecil kemungkinannya.

Yang mengatakan, banyak basis data tidak mendukung sintaks MENGGUNAKAN yang membuat masalah yang Anda ajukan bukan masalah untuk basis data ini. jika struktur tabel berubah. Jadi misalkan Anda menambahkan bidang yang disebut tanggal dimodifikasi ke kedua tabel, Anda tidak ingin bergabung dengan itu tetapi gabungan alami akan melakukannya.

HLGEM
sumber
4

Lebih baik secara eksplisit memberikan nama tabel dan nama kolom seperti Employees.EmployeeID dengan ekspresi di mana bergabung ada

Eralper
sumber