Kekangan kunci asing bersyarat dalam MySQL: menyelesaikan masalah persatuan polimorfik
Kekangan kunci asing menguatkuasakan integriti data dengan memastikan bahawa nilai dalam satu jadual merujuk kepada nilai yang sepadan dalam jadual lain yang berkaitan. Walau bagaimanapun, dalam beberapa kes, jadual mungkin memerlukan kunci asing yang merujuk jadual berbeza berdasarkan syarat. Ini dipanggil Kekangan Kunci Asing Bersyarat.
Dalam kes ini, cabarannya adalah untuk mencipta jadual Comments
yang boleh menyimpan ulasan untuk pelbagai bahagian aplikasi. Contohnya, ulasan pada catatan blog dan imej pengguna. Sebaik-baiknya, kekangan kunci asing pada Comments
dalam jadual foreign_id
hanya boleh digunakan apabila model
ditetapkan kepada 'blogpost'.
Penyelesaian: Persatuan Polimorfik
Malangnya, MySQL tidak secara langsung menyokong kekangan kunci asing bersyarat. Sebaliknya, penyelesaiannya melibatkan penggunaan corak reka bentuk yang dipanggil Persatuan Polimorfik. Skema ini memperkenalkan jadual perantaraan bernama Commentable
.
<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) );</code>
Setiap jenis kandungan (cth., BlogPost
, UserPicture
) menjadi subjenis Commentable
dan merujuknya melalui kunci asing.
<code class="language-sql">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>
Sebelum menambah data pada jadual subjenis ini, baris baharu mesti dimasukkan ke dalam jadual Commentable
untuk menjana ID unik. ID yang dijana ini kemudiannya digunakan sebagai kunci asing dalam jadual subjenis.
Dengan menggunakan corak reka bentuk ini, anda boleh menguatkuasakan kekangan integriti rujukan, memastikan ulasan pada catatan blog hanya merujuk siaran blog dan ulasan pada gambar pengguna hanya merujuk gambar pengguna.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kekangan Utama Asing Bersyarat dalam MySQL untuk Persatuan Polimorfik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!