Rumah > pangkalan data > tutorial mysql > Bolehkah MySQL Menguatkuasakan Kekangan Utama Asing Bersyarat untuk Persatuan Polimorfik?

Bolehkah MySQL Menguatkuasakan Kekangan Utama Asing Bersyarat untuk Persatuan Polimorfik?

Barbara Streisand
Lepaskan: 2025-01-16 11:46:58
asal
991 orang telah melayarinya

Can MySQL Enforce Conditional Foreign Key Constraints for Polymorphic Associations?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Butiran pelaksanaan:

  • Masukkan baris baharu ke dalam jadual "Entiti Boleh Dikomen" untuk menjana "id" unik sebelum memasukkan entiti baharu ke dalam jadual subjenis.
  • Gunakan "id" yang dijana sebagai "kunci asing" apabila memasukkan ke dalam jadual subjenis.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan