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 ... USING
sintaks 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 USING
atau NATURAL JOIN
.
Tautan apa pun ke gaya desain atau panduan praktik terbaik untuk desain meja juga akan dihargai!
database-design
join
naming-convention
Kerrek SB
sumber
sumber
Jawaban:
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
Dan Wikipedia sebenarnya mengatakan:
Itu kurang satu kolom. Anda tidak akan pernah menggunakan
SELECT *
jadi intinya adalah moot ...sumber
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.
sumber
Lebih baik secara eksplisit memberikan nama tabel dan nama kolom seperti Employees.EmployeeID dengan ekspresi di mana bergabung ada
sumber