Kekangan kunci asing bersyarat MySQL: cabaran dan penyelesaian
Dalam reka bentuk pangkalan data, integriti data adalah penting. Kekangan kunci asing digunakan untuk mengekalkan perhubungan antara jadual, tetapi dalam beberapa kes mungkin perlu untuk menguatkuasakan kekangan secara bersyarat berdasarkan nilai lajur tertentu. Sebagai contoh, reka jadual "Ulasan" untuk menyimpan ulasan untuk pelbagai entiti seperti catatan blog dan gambar pengguna.
Adakah MySQL menyokong kekangan kunci asing bersyarat?
Tidak disokong. Kekangan kunci asing MySQL mesti secara eksplisit merujuk satu jadual, memastikan setiap baris dalam jadual rujukan mempunyai baris yang sepadan dalam jadual yang dirujuk. Kekangan bersyarat melanggar prinsip reka bentuk pangkalan data hubungan.
Penyelesaian: Persatuan Polimorfik dan "Super Table"
Adalah disyorkan untuk menggunakan teknologi "polymorphic association" untuk menyelesaikan masalah ini. Teknik ini melibatkan penciptaan "hypertable" yang menyimpan atribut umum semua entiti yang mempunyai rujukan kunci asing. Dalam contoh ini, buat jadual "Entiti Boleh Diulas":
<code class="language-sql">CREATE TABLE Commentable ( id SERIAL PRIMARY KEY );</code>
Entiti anda (seperti "Catatan Blog" dan "Imej Pengguna") kemudiannya akan menjadi subjenis jadual hiper ini:
<code class="language-sql">CREATE TABLE BlogPosts ( blogpost_id INT PRIMARY KEY, -- 注意,此 ID 不是自动生成的 ... FOREIGN KEY (blogpost_id) REFERENCES Commentable(id) ); CREATE TABLE UserPictures ( userpicture_id INT PRIMARY KEY, -- 注意,此 ID 不是自动生成的 ... FOREIGN KEY (userpicture_id) REFERENCES Commentable(id) );</code>
Butiran pelaksanaan:
Pendekatan ini memastikan integriti rujukan sambil mengekalkan fleksibiliti untuk menampung pelbagai jenis entiti dan menyimpan ulasan dalam satu jadual "Ulasan".
Atas ialah kandungan terperinci Bolehkah MySQL Menguatkuasakan Kekangan Utama Asing Bersyarat untuk Persatuan Polimorfik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!