Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menguatkuasakan Integriti Rujukan dengan Persatuan Polimorfik dalam MySQL?
Mengekalkan Integriti Rujukan dalam MySQL dengan Persatuan Polimorfik
Kekangan kunci asing MySQL adalah penting untuk integriti pangkalan data hubungan. Walau bagaimanapun, mengurus integriti rujukan dengan persatuan polimorfik—di mana kunci asing tunggal merujuk berbilang jadual—memberi cabaran unik.
Hubungan Polimorfik dan Integriti Data
Pertimbangkan jadual Comments
yang mengandungi ulasan yang dikaitkan dengan bahagian aplikasi yang berbeza (cth., catatan blog, imej), yang dikenal pasti oleh lajur model
. Secara langsung menguatkuasakan kekangan kunci asing seperti ini:
<code class="language-sql">FOREIGN KEY (`foreign_id`) REFERENCES blogposts(`id`)</code>
tidak mencukupi, kerana ia hanya mengesahkan terhadap blogposts
, mengabaikan nilai lajur model
. MySQL tidak mempunyai sokongan asli untuk kekangan kunci asing bersyarat berdasarkan nilai lajur.
Strategi untuk Mengendalikan Persatuan Polimorfik
Untuk mengekalkan integriti data dalam perhubungan polimorfik, pertimbangkan alternatif ini:
1. Pendekatan Supertable:
Buat Commentable
supertable yang diwarisi oleh semua jenis kandungan. Setiap jadual jenis kandungan kemudian merujuk Commentable
melalui kunci asing:
<code class="language-sql">CREATE TABLE Commentable ( id SERIAL PRIMARY KEY ); CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, foreign_id INT NOT NULL, FOREIGN KEY (foreign_id) REFERENCES Commentable(id) ); CREATE TABLE BlogPosts ( blogpost_id INT PRIMARY KEY, FOREIGN KEY (blogpost_id) REFERENCES Commentable(id) ); CREATE TABLE UserPictures ( userpicture_id INT PRIMARY KEY, FOREIGN KEY (userpicture_id) REFERENCES Commentable(id) );</code>
2. Strategi Utama Utama Komposit:
Gunakan kunci utama komposit yang merangkumi kedua-dua foreign_id
dan model
:
<code class="language-sql">CREATE TABLE Comments ( id INT, foreign_id INT, model TEXT, PRIMARY KEY (id, model) );</code>
Ini memastikan keunikan bagi setiap gabungan foreign_id
dan model
, tetapi menambahkan kerumitan pada pertanyaan. Pertimbangan teliti reka bentuk pertanyaan adalah perlu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguatkuasakan Integriti Rujukan dengan Persatuan Polimorfik dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!