Saya tahu ini sudah terlambat, dan pertanyaan sudah dijawab dengan sangat baik, tetapi saya ingin memberikan pendapat saya tentang # 3 tentang awalan nama kolom.
Semua kolom harus dinamai dengan awalan yang unik untuk tabel tempat mereka didefinisikan.
Misalnya tabel yang diberikan "pelanggan" dan "alamat", mari kita pergi dengan awalan "cust" dan "addr", masing-masing. "pelanggan" akan memiliki "cust_id", "cust_name", dll. di dalamnya. "address" akan memiliki "addr_id", "addr_cust_id" (FK kembali ke pelanggan), "addr_street", dll. di dalamnya.
Ketika saya pertama kali disajikan dengan standar ini, saya sangat menentangnya; Saya benci ide itu. Saya tidak tahan dengan semua pengetikan dan redundansi ekstra itu. Sekarang saya sudah memiliki pengalaman yang cukup sehingga saya tidak akan pernah kembali.
Hasil dari melakukan ini adalah bahwa semua kolom dalam skema database Anda unik. Ada satu manfaat utama untuk ini, yang mengalahkan semua argumen yang menentangnya (menurut saya, tentu saja):
Anda dapat mencari seluruh basis kode dan andal menemukan setiap baris kode yang menyentuh kolom tertentu.
Manfaat dari # 1 sangat besar. Saya dapat mencela kolom dan tahu persis file apa yang perlu diperbarui sebelum kolom dapat dihapus dengan aman dari skema. Saya dapat mengubah arti kolom dan tahu persis kode apa yang perlu di refactored. Atau saya dapat dengan mudah mengetahui apakah data dari suatu kolom bahkan digunakan di bagian tertentu dari sistem. Saya tidak dapat menghitung berapa kali ini telah mengubah proyek yang berpotensi besar menjadi proyek yang sederhana, atau jumlah jam yang kami hemat dalam pekerjaan pengembangan.
Manfaat lain yang relatif kecil adalah Anda hanya perlu menggunakan alias-tabel ketika Anda bergabung sendiri:
SELECT cust_id, cust_name, addr_street, addr_city, addr_state
FROM customer
INNER JOIN address ON addr_cust_id = cust_id
WHERE cust_name LIKE 'J%';