Saya mengerti satu manfaat dari pengganti / kunci buatan secara umum - mereka tidak berubah dan itu bisa sangat nyaman. Ini benar apakah mereka satu atau beberapa bidang - selama mereka 'buatan'.
Namun, kadang-kadang tampaknya merupakan masalah kebijakan untuk memiliki bidang bilangan bulat yang bertambah secara otomatis sebagai kunci utama dari setiap tabel. Apakah ini selalu merupakan ide terbaik untuk memiliki kunci bidang tunggal dan mengapa (atau mengapa tidak)?
Untuk lebih jelas, pertanyaan ini bukan tentang buatan vs alami - tetapi tentang apakah semua kunci buatan harus bidang tunggal
database-design
primary-key
surrogate-key
Jack Douglas
sumber
sumber
Jawaban:
Saya akan mengatakan tidak, tidak selalu, tetapi sebagian besar waktu ya. .
Ini adalah beberapa keadaan di mana Anda tidak memerlukan pengganti atau kunci buatan:
tabel pencarian dengan kunci bisnis unik yang ditetapkan secara eksternal untuk
bisnis Anda dan yang tidak memiliki peluang untuk berubah untuk
tujuan praktis apa pun , maka menggunakan kunci bisnis secara langsung dapat membuat
segalanya lebih sederhana. Contohnya mungkin daftar
kode negara bagian atau provinsi atau daftar nomor standar ANSI, dll.
Ada juga beberapa situasi di mana kunci pengganti bilangan bulat tua monoton yang setia tidak ideal. Anda dapat memiliki kunci yang merupakan pengganti alfanumerik. Ini dapat mencakup:
Kenapa sebagian besar waktu ya? Jawaban paling mendasar untuk pertanyaan itu adalah benar-benar neraka jika Anda perlu mengubah nilai kunci utama pada tabel apa pun. Karena hampir semua hal yang dapat dilihat atau disentuh oleh pengguna dapat dibuktikan dengan pembaruan di beberapa titik, menggunakan nilai kunci yang terlihat mengundang banyak sekali. Menggunakan kunci pengganti akan membuat Anda tidak jatuh ke dalam perangkap ini.
Karena itu, ingatlah bahwa ada ruang untuk YAGNI dalam menerapkan konsep ini. Anda tidak perlu memaksakan tabel kode dengan kunci IDENTITAS ke setiap sudut dan celah skema Anda, kalau-kalau seseorang memutuskan bahwa simbol untuk jenis kelamin laki-laki di meja karyawan Anda perlu diubah dari M ke X atau sesuatu yang konyol.
sumber
Tidak.
Saya akan mengatakan pasti ada kasus ketika kunci bidang tunggal lebih rendah daripada kunci majemuk, setidaknya untuk tujuan kunci asing . Itu tidak berarti Anda tidak harus memiliki kunci pengganti bidang tunggal juga jika Anda suka, tapi saya pribadi lebih suka kunci yang paling sering digunakan sebagai target kunci asing untuk disebut kunci utama
Saya akan mencoba mengilustrasikan poin saya dalam contoh-contoh berikut, di mana:
brand
adalah car marque, mis. Ford, Toyota dlldealer
adalah dealer fisik, terkait dengan merek (mis. dealer Ford yang hanya menjual Ford)model
adalah jenis mobil misalnya Ford Focus, Ford Fiesta dllstock
adalah jumlah halaman depan mobil saat ini untuk setiap dealerJika kita membuat kunci pengganti bidang tunggal untuk
dealer
danmodel
sebagai berikut:maka dimungkinkan untuk memasukkan baris ke dalam
stock
tautan yang menghubungkan Forddealer
ke model "Toyota". Menambahkanbrand_id references brand
untukstock
hanya membuat masalah lebih buruk. Di sisi lain jika kita menyimpan kunci asing sebagai bagian dari kunci utama sebagai berikut:sekarang aturan bahwa "Ford" dealer hanya dapat menyediakan mobil "Ford" ditegakkan secara alami oleh model.
Perhatikan bahwa dalam contoh 'kunci komposit',
dealer_id
mungkin atau mungkin tidak unik, sesuai dengan preferensi. Itu tidak perlu unik (yaitu kunci alternatif), tetapi sangat sedikit yang hilang dengan membuatnya jadi (mungkin ruang penyimpanan kecil) dan itu bisa sangat berguna sehingga cara saya biasanya mengaturnya, misalnya:sumber
"tergantung"
Ya: Bidang IDENTITAS / AUTONUMBER pengganti baik ketika kunci alami lebar dan non-numerik. Catatan: ini mengasumsikan penyatuan "PK" dan indeks berkerumun yang terjadi secara default di SQL Server dan Sybase dll
Tidak: banyak / banyak tabel ketika 2 kunci induk cukup. Atau ketika kunci alami pendek dan panjang tetap misalnya kode mata uang
Tentu saja, ORM braindead (baca: (n) Hibernate) dapat mengalahkan aturan ini ...
Edit: baca pertanyaan lagi
Tabel banyak / banyak dengan 2 kunci induk pengganti akan memiliki beberapa kolom PK.
Namun, tidak perlu kolom pengganti lain.
Jika sebuah tabel memiliki kunci pengganti (IDENTITAS dll), maka itu tidak perlu beberapa kolom.
Anda dapat memiliki kunci super yang menyertakan pengganti tetapi ini akan untuk menegakkan aturan lain (misalnya subtipe )
sumber