Menguatkuasakan Integriti Rujukan Antara Jadual dalam Pangkalan Data Berbeza: Penyelesaian
Mencipta perhubungan kunci asing secara langsung antara jadual dalam pangkalan data yang berasingan selalunya mengakibatkan ralat "Rujukan kunci asing silang pangkalan data tidak disokong." Had ini memerlukan kaedah alternatif untuk mengekalkan integriti rujukan. Satu pendekatan sedemikian melibatkan penggunaan pencetus pangkalan data.
Memanfaatkan Pencetus Pangkalan Data
Pencetus membenarkan pelaksanaan kod tersuai sebagai tindak balas kepada peristiwa pangkalan data tertentu (INSERT, UPDATE, DELETE). Kita boleh menggunakan pencetus pada jadual dalam pangkalan data sekunder (database2.table2) yang mengandungi kunci asing untuk menguatkuasakan kekangan.
Contoh Pelaksanaan
Pencetus boleh dilaksanakan seperti berikut:
<code class="language-sql">CREATE TRIGGER dbo.MyTableTrigger ON dbo.MyTable AFTER INSERT, UPDATE AS BEGIN IF NOT EXISTS(SELECT PK FROM OtherDB.dbo.TableName WHERE PK IN (SELECT FK FROM INSERTED)) BEGIN -- Handle the integrity violation (e.g., rollback transaction or raise an error) END END</code>
Pencetus ini memintas operasi INSERT dan UPDATE pada dbo.MyTable
. Ia mengesahkan sama ada kunci utama yang dirujuk wujud dalam OtherDB.dbo.TableName
. Jika rujukan kunci asing tidak sah, pencetus mengendalikan pelanggaran, berpotensi melancarkan transaksi atau menimbulkan pengecualian.
Pertimbangan Penting:
Walaupun pencetus menawarkan penyelesaian, ia bukanlah pendekatan yang optimum. Amalan terbaik kekal untuk mereka bentuk skema pangkalan data anda dengan kedua-dua jadual berada dalam pangkalan data yang sama untuk membenarkan kekangan kunci asing langsung. Kaedah berasaskan pencetus ini harus dianggap sebagai penyelesaian untuk situasi di mana penstrukturan semula pangkalan data tidak praktikal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguatkuasakan Integriti Rujukan Antara Jadual dalam Pangkalan Data Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!