Sebuah pertanyaan baru - baru ini tentang stackoverflow memicu diskusi tentang ketidakmampuan kunci primer. Saya telah berpikir bahwa itu adalah semacam aturan bahwa kunci utama harus tidak berubah. Jika ada kemungkinan suatu hari kunci primer akan diperbarui, saya pikir Anda harus menggunakan kunci pengganti. Namun itu tidak dalam standar SQL dan beberapa fitur "pembaruan kaskade" RDBMS memungkinkan kunci utama untuk berubah.
Jadi pertanyaan saya adalah: apakah masih merupakan praktik yang buruk untuk memiliki kunci utama yang dapat berubah? Apa kontra jika memiliki kunci primer yang bisa berubah?
sumber
Kunci utama harus terdiri dari tupel apa pun yang diperlukan untuk menentukan keunikan. Apakah data dapat berubah atau tidak tidak relevan. Hanya keunikan catatan yang penting. Itu adalah desain konseptual dari database.
Ketika kita bergerak ke ranah implementasi, maka hal paling aman untuk dilakukan adalah cukup menggunakan kunci pengganti.
sumber
Ya, menurut saya kunci utama harus tidak berubah.
Bahkan jika ada kunci kandidat yang jelas, saya selalu menggunakan kunci pengganti. Dalam beberapa kesempatan saya belum melakukan ini, saya hampir selalu menyesalinya. Dan tidak peduli seberapa kekal menurut Anda kuncinya, Anda tidak dapat melindungi terhadap kesalahan entri data - memberi tahu pengguna bahwa mereka tidak dapat mengedit sedikit informasi itu karena itu adalah kunci utama tidak mencuci dengan sedih.
sumber
Mekanisme cache di antara basis data dan pengguna akan kehilangan efektivitas jika kunci primer berubah.
sumber
Kenapa tidak? Karena Anda ingin menghilangkan kolom?
Hanya karena persyaratan menyebut tiga kolom menjadi unik, bukan berarti harus menjadi kunci utama. Anda mungkin berpikir bahwa aturan itu akan bertahan selamanya (Ingat selama pertemuan itu ketika manajer departemen pinhead bersumpah tidak akan pernah berubah? Anda tahu, yang baru saja dipecat.), Tetapi tidak.
Saya tidak dibayar untuk setiap pembaruan kaskade yang saya terapkan dan bonus jika saya mengkodekannya sendiri.
Komputer tidak memerlukan makna apa pun untuk kunci; IMHO, kunci untuk komputer, biarkan orang-orang mengacaukan sisa data.
sumber
Bukan praktik yang buruk untuk memiliki kunci yang nilainya dapat berubah.
Properti kunci yang baik termasuk stabilitas. Kekekalan ideal tetapi bukan prasyarat. Memperkenalkan kunci buatan demi ketidakberdayaan adalah praktik buruk.
Ambil contoh Nomor Buku Standar Internasional (ISBN) . Ini sangat stabil tetapi tidak berubah: kadang penerbit buku membuat kesalahan dan - horor! - Nomor ISBN duplikat dapat terjadi. Apakah ini berarti ISBN tidak boleh diterima sebagai kunci kandidat dalam basis data yang terkomputerisasi? Tentu saja tidak. Salah satu kelebihan ISBN adalah memiliki sumber tepercaya yang akan menyelesaikan masalah bagi semua pengguna secara global.
Ada beberapa kelengkapan lain dari ISBN kunci yang baik yang tidak memiliki kekurangan kunci integer otomatis yang tidak berarti, misalnya keakraban (semua orang dalam perdagangan buku tahu atau terbiasa dengan ISBN), dapat diverifikasi (ISBN dicetak pada semua buku modern), dapat divalidasi dengan mengacu pada DBMS (ISBN adalah lebar tetap dan termasuk checksum), dll.
sumber
Segala sesuatu yang mungkin bisa berubah harus. Ini membantu untuk memastikan kebenaran dan membantu ketika Anda ingin membuat aplikasi Anda multithreaded.
sumber
Ya, kunci utama harus tidak berubah, bersamaan dengan menjadi non-null dan unik. Namun, saya belum menemukan database yang menegakkan ketidakmampuan kunci primer sehingga Anda mungkin dapat melanjutkan dan mengubah nilainya jika Anda benar-benar menginginkannya.
sumber
Seperti beberapa komentar sudah mengatakannya, salah satu solusinya adalah menggunakan kunci utama baru
Misalnya (mengikuti contoh @onedaywhen), katakanlah ada tabel Buku yang menyimpan daftar buku dan kami "menggunakan" untuk menentukan ISBN sebagai kunci utama. Namun, beberapa penulis melakukan kesalahan dengan mengetikkan ISBN yang salah sehingga, mereka meminta untuk mengubah ISBN, itu melibatkan tugas-tugas berikutnya:
(*) ini mungkin sepele untuk menemukan semua referensi untuk model database yang menggunakan Kunci Asing tetapi beberapa model tidak memilikinya.
Kami mengubahnya sebagai
Di mana InternalBookId baru bahkan bisa menjadi nilai autonumerik.
Kontra tentang hal itu:
itu menambah bidang baru yang menggunakan lebih banyak ruang / sumber daya.
bisa mengharuskan untuk menulis ulang seluruh model.
model baru bisa kurang menjelaskan diri.
Sang profesional
Meja baru:
sumber