Kunci primer dan kunci asing adalah perekat yang mengatur beberapa tabel menjadi database relasional yang efisien. Desain kunci primer dan kunci asing mempunyai dampak yang menentukan terhadap kinerja dan ketersediaan database fisik.
Skema database harus diubah dari desain logis teoretis ke desain fisik aktual. Struktur kunci utama dan kunci asing adalah inti dari proses desain ini. Setelah database yang dirancang digunakan dalam lingkungan produksi, akan sulit untuk memodifikasi kunci-kunci ini, sehingga sangat penting dan bermanfaat untuk merancang kunci utama dan kunci asing selama tahap pengembangan.
Kunci utama:
Basis data relasional bergantung pada kunci utama - landasan skema fisik basis data. Kunci primer hanya memiliki dua tujuan pada tingkat fisik:
1. Identifikasi suatu baris secara unik.
2. Sebagai objek yang dapat direferensikan secara efektif oleh kunci asing.
Berdasarkan dua kegunaan di atas, berikut beberapa prinsip yang saya ikuti saat mendesain kunci primer pada tingkat fisik:
1. Kunci utama seharusnya tidak berarti bagi pengguna. Jika pengguna melihat data dalam tabel gabungan yang mewakili hubungan banyak-ke-banyak dan mengeluh bahwa data tersebut tidak berguna, itu membuktikan bahwa kunci utama dirancang dengan baik.
2. Kunci utama harus berupa satu kolom untuk meningkatkan efisiensi operasi penggabungan dan filter.
Catatan: Orang yang menggunakan kunci komposit biasanya memaafkan diri mereka sendiri karena dua alasan, keduanya salah. Salah satunya adalah bahwa kunci utama harus memiliki arti sebenarnya. Namun, menjadikan kunci utama bermakna hanya memberikan kemudahan untuk menghancurkan database secara artifisial. Yang kedua adalah Anda dapat menggunakan metode ini untuk menggunakan dua kunci asing sebagai kunci utama dalam tabel gabungan yang menggambarkan hubungan banyak-ke-banyak. Saya juga menentang pendekatan ini karena: kunci utama komposit sering kali menyebabkan kunci asing yang buruk. yaitu, ketika menggabungkan tabel Menjadi tabel master dari tabel budak lain, dan menjadi bagian dari kunci utama tabel ini sesuai dengan metode kedua di atas. Namun, tabel ini dapat menjadi tabel master dari tabel budak lainnya, dan kunci utamanya dapat menjadi tabel master dari tabel budak lainnya. Sebagai bagian dari kunci utama, jika diteruskan dengan cara ini, semakin lama tabel budak, semakin banyak kolom yang berisi kunci utama.
3. Jangan pernah memperbarui kunci utama. Faktanya, karena kunci utama tidak memiliki tujuan selain mengidentifikasi baris secara unik, tidak ada alasan untuk memperbaruinya. Jika kunci utama perlu diperbarui, prinsip bahwa kunci utama tidak boleh berarti bagi pengguna telah dilanggar.
Catatan: Prinsip ini tidak berlaku untuk data yang sering kali perlu diatur selama konversi data atau penggabungan beberapa database.
4. Kunci utama tidak boleh berisi data yang berubah secara dinamis, seperti stempel waktu, kolom waktu pembuatan, kolom waktu modifikasi, dll.
5. Kunci utama harus dibuat secara otomatis oleh komputer. Jika manusia melakukan intervensi dalam pembuatan kunci utama, hal ini akan memiliki arti selain mengidentifikasi baris secara unik. Setelah batas ini dilewati, mungkin ada insentif untuk memodifikasi kunci utama, sehingga sarana kunci yang digunakan oleh sistem ini untuk menghubungkan dan mengelola deretan catatan akan jatuh ke tangan orang-orang yang tidak memahami desain basis data.
Kunci asing adalah batasan integritas di tingkat basis data, yang merupakan metode implementasi basis data "integritas referensial" yang disebutkan dalam buku teori basis data dasar.
Tentu saja atribut kunci asing dapat dihilangkan. Jika Anda tidak ingin lagi menggunakan batasan ini, tentu tidak akan berdampak apa pun pada pemrograman, tetapi saat memasukkan data, pemeriksaan "integritas referensial" tidak akan dilakukan pada data yang dimasukkan. .
Misalnya ada dua tabel
A(a,b): a adalah kunci utama, b adalah kunci asing (dari Bb)
B(b,c,d): b adalah kunci utama
Jika saya menghapus atribut kunci asing pada bidang b, itu tidak akan berdampak pada pemrograman.
Seperti di atas, b di A kosong atau ada nilai di b di B. Ketika ada kunci asing, database akan otomatis memeriksa apakah b di A ada di b di B.
1. Ekspresi eksternal mengungkapkan integritas referensial: ini melekat pada data dan tidak ada hubungannya dengan program. Oleh karena itu, hal ini harus diserahkan kepada DBMS.
2. Menggunakan database eksternal itu sederhana dan intuitif, dan dapat langsung tercermin dalam model data. Ini memiliki manfaat besar dalam hal desain, pemeliharaan, dll., terutama saat menganalisis database yang ada. Manfaatnya sangat jelas - saya tidak menganalisisnya dahulu kala saya menemukan database perusahaan yang ada. Beberapa batasan integritas referensial di dalamnya dijelaskan oleh kunci asing, dan beberapa diimplementasikan menggunakan pemicu. Tentu saja, mungkin ada di dalam dokumen, tetapi mungkin tidak lengkap, tetapi kunci asing sangat jelas dan intuitif.
3. Karena kita dapat menggunakan pemicu atau program untuk menyelesaikan pekerjaan ini (mengacu pada batasan integritas referensial), DBMS telah menyediakan sarana, mengapa kita harus melakukannya sendiri? Dan harus dikatakan bahwa apa yang kami lakukan tidak sebaik RDBMS. Faktanya, RDBMS awal tidak memiliki kunci asing, tetapi sekarang semuanya memilikinya. Menurut saya masuk akal bagi vendor database untuk menambahkan fitur ini. Dari perspektif ini, kunci asing lebih nyaman.
4. Mengenai kenyamanan, berdasarkan proyek yang saya pimpin, pemrogram melaporkan bahwa memasukkan data selama debugging sangat merepotkan: jika data dapat melanggar integritas referensial, maka integritas referensial itu sendiri tidak bertentangan dengan bisnis reputasi. program trigger futures tidak boleh digunakan; jika tidak, berarti datanya salah dan tidak boleh dimasukkan ke dalam database sama sekali! Selain itu, ini juga harus menjadi bagian dari sistem pengujian: memblokir data ilegal. Faktanya, program front-end seharusnya menangani kegagalan pengiriman ini. Data adalah milik perusahaan, bukan programnya. Program yang disimpan harus dipisahkan dari datanya sebisa mungkin, dan sebaliknya.
Terakhir, izinkan saya membahas beberapa prinsip untuk membuat kunci:
1. Buat kunci asing untuk bidang terkait.
2. Semua kunci harus unik.
3. Hindari penggunaan kunci majemuk.
4. Kunci asing selalu dikaitkan dengan bidang kunci unik.
Artikel ini berasal dari blog CSDN. Harap sebutkan sumbernya saat mencetak ulang: http://blog.csdn.net/c04s31602/archive/2009/12/30/5107568.aspx