Mewujudkan hubungan kunci asing antara dua jadual kadangkala boleh menimbulkan cabaran, terutamanya apabila berurusan dengan rujukan bulat dan memastikan integriti data. Artikel ini menangani senario khusus yang melibatkan kekangan kunci asing yang kompleks yang memastikan data rujukan wujud dalam kedua-dua jadual.
Pertimbangkan dua jadual: SystemVariables dan VariableOptions. SystemVariables mewakili pembolehubah sistem, manakala VariableOptions menyenaraikan pilihan yang mungkin untuk pembolehubah ini. Setiap pilihan pembolehubah mempunyai kunci asing yang menunjuk kepada pembolehubah yang sepadan dalam SystemVariables. Seterusnya, setiap pembolehubah sistem mempunyai kunci asing yang merujuk kepada pilihan yang dipilih pada masa ini dalam VariableOptions.
Isu ini timbul daripada keperluan untuk kekangan pangkalan data tambahan untuk menguatkuasakan bahawa setiap choice_id dalam SystemVariables merujuk pilihan yang sah dalam VariableOptions. Pada asasnya, mesti ada hubungan langsung antara choice_id dan variable_id.
Penyelesaian terletak pada melanjutkan kunci asing yang merujuk kepada pilihan yang dipilih untuk memasukkan kedua-dua choice_id dan variable_id. Ini memastikan bahawa rujukan wujud dalam kedua-dua jadual.
Berikut ialah contoh bagaimana ini boleh dilaksanakan dalam PostgreSQL 9.1:
CREATE TABLE systemvariables ( variable_id int PRIMARY KEY, choice_id int, variable text ); CREATE TABLE variableoptions ( option_id int PRIMARY KEY, variable_id int REFERENCES systemvariables ON UPDATE CASCADE ON DELETE CASCADE, option text ); ALTER TABLE systemvariables ADD CONSTRAINT systemvariables_choice_id_fk FOREIGN KEY (choice_id, variable_id) REFERENCES variableoptions(option_id, variable_id);
Kekangan kunci asing yang diperluaskan ini secara berkesan menguatkuasakan integriti data yang diingini peraturan. Memasukkan atau mengemas kini rekod yang melanggar peraturan ini akan mengakibatkan ralat.
Untuk mengendalikan senario di mana kedua-dua kunci asing boleh ditangguhkan, pendekatan yang sedikit berbeza diperlukan. Dalam PostgreSQL, kekangan kunci asing yang boleh ditangguhkan disokong dengan klausa DITANGGUHKAN AWALNYA. Ini membolehkan pemasukan entri berkaitan dalam kedua-dua jadual tanpa segera menguatkuasakan kekangan kunci asing. Kekangan disemak pada akhir urus niaga, menyelesaikan masalah telur ayam.
Berikut ialah contoh bagaimana ini boleh dilaksanakan:
CREATE TABLE systemvariables ( variable_id int PRIMARY KEY NOT NULL, variable text NOT NULL, choice_id int NOT NULL ); CREATE TABLE variableoptions ( option_id int PRIMARY KEY NOT NULL, option text NOT NULL, variable_id int NOT NULL REFERENCES systemvariables ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, UNIQUE (option_id, variable_id) -- needed for the foreign key ); ALTER TABLE systemvariables ADD CONSTRAINT systemvariables_choice_id_fk FOREIGN KEY (choice_id, variable_id) REFERENCES variableoptions(option_id, variable_id) DEFERRABLE INITIALLY DEFERRED;
Pendekatan ini memastikan kedua-duanya asing kunci dikuatkuasakan, walaupun entri berkaitan dimasukkan secara sewenang-wenangnya turutan.
Kekangan kunci asing yang kompleks boleh dilaksanakan dalam PostgreSQL menggunakan pelbagai teknik, bergantung pada keperluan khusus. Memperluas kunci asing, menggunakan kekangan kunci asing yang boleh ditangguhkan, dan memahami batasan tindakan melata adalah penting untuk memastikan integriti data dan mengurus rujukan pekeliling dengan berkesan. Dengan memanfaatkan teknik ini, pembangun boleh membina skema pangkalan data yang mantap yang mengekalkan konsistensi data dan mencegah rasuah data.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kekangan Utama Asing Kompleks dalam SQLAlchemy untuk Integriti Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!