Apakah ada penjelasan yang bagus tentang cara menggunakan konstruksi kunci asing MySQL?
Saya tidak begitu mendapatkannya dari dokumen MySQL sendiri. Sampai sekarang saya telah menangani hal-hal seperti kunci asing dengan gabungan dan kode pemrograman.
Dan bagian kedua dari pertanyaannya, apakah ada perbaikan yang harus dilakukan dengan menggunakan kunci asing bawaan MySQL?
sumber
JOIN
mungkin jauh lebih tidak efisien daripada dua DELETE menggunakan FULL TABLE SCANManfaat utama menggunakan kunci asing nyata adalah memastikan integritas data, dan dapat mengatur tindakan berjenjang pada item terkait ketika sesuatu diubah atau dihapus.
Misalnya, bayangkan Anda memprogram forum. Anda memiliki tabel "topik" dengan kunci utama
topics.topic_id
, dan Anda memiliki tabel "posting" di mana posting dilampirkan ke topik dengan kolomposts.topic_id
, yang merupakan kunci asing ke tabel topik.Hubungan kunci asing ini memastikan bahwa setiap posting dilampirkan ke topik yang valid. Jika satu-satunya topik yang Anda miliki memiliki ID # 1, tidak mungkin ada postingan di database yang dilampirkan ke topik # 2. Database memastikan ini.
Untuk keuntungan berjenjang, Anda bisa mengaturnya sehingga jika topik dihapus dari tabel topik, database secara otomatis menghapus semua posting di tabel posting yang dilampirkan ke topik ini. Ini bagus karena menghilangkan langkah yang harus Anda ingat untuk dilakukan secara manual, yang bisa menjadi sangat rumit ketika Anda memiliki banyak tabel yang ditautkan bersama. Dengan kunci asing, semua hubungan dapat dibersihkan secara otomatis.
sumber
1. KUNCI FOREIGN hanya memastikan data Anda konsisten.
2. Jika kita menerapkan delete cascade ke definisi foreign key, baris referensi akan dihapus secara otomatis ketika baris induk akan dihapus.
3. Jika kita menerapkan Update Cascade ke definisi kunci asing, baris Anak akan diperbarui secara otomatis ketika baris induk akan diperbarui.
Query: ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENSI parent (id) ON UPDATE CASCADE ON DELETE CASCADE;
sumber
Keuntungan utamanya adalah Anda dapat membatasi nilai mana yang dapat Anda masukkan ke dalam tabel; jika Anda mencoba memasukkan nilai yang tidak ada di tabel yang direferensikan, Anda tidak akan dapat melakukannya.
Selain itu, jika Anda memperbarui atau menghapus nilai dalam tabel yang direferensikan, Anda dapat mengaturnya untuk secara otomatis memperbarui nilai atau menghapus secara berjenjang setiap baris yang berisi nilai tersebut.
Ini memang fitur hebat yang memanfaatkan kode Anda.
sumber