Kekangan Rujukan Pekeliling dalam SQL: Kerumitan Navigasi
Dalam reka bentuk pangkalan data, mewujudkan hubungan antara jadual melalui kekangan kunci asing adalah amalan biasa. Walau bagaimanapun, apabila jadual merujuk antara satu sama lain dalam gelung, mencipta kebergantungan bulat, ia menimbulkan persoalan: adakah skema sedemikian sah?
Pertimbangkan skema berikut dengan dua jadual, produk dan gambar_produk, merujuk antara satu sama lain:
CREATE TABLE products ( ID int(10) unsigned NOT NULL AUTO_INCREMENT, DEFAULT_PICTURE_ID int(10) unsigned DEFAULT NULL, FOREIGN KEY (DEFAULT_PICTURE_ID) REFERENCES products_pictures (ID) ON DELETE SET NULL ON UPDATE SET NULL ); CREATE TABLE products_pictures ( ID int(10) unsigned NOT NULL AUTO_INCREMENT, PRODUCT_ID int(10) unsigned NOT NULL, FOREIGN KEY (PRODUCT_ID) REFERENCES products (ID) ON DELETE CASCADE );
Dalam reka bentuk ini, products.DEFAULT_PICTURE_ID merujuk kepada products_pictures.ID dan products_pictures.PRODUCT_ID merujuk kembali kepada products.ID, mewujudkan rujukan bulat.
Konsensus umum di kalangan pakar ialah rujukan pekeliling dalam skema pangkalan data tidak disyorkan. Ia boleh membawa kepada kerumitan dan ketidakkonsistenan apabila melakukan operasi pangkalan data seperti sisipan dan kemas kini.
Pilihan 1: Lajur Kunci Asing Boleh Null
Untuk menangani isu ini, satu pilihan adalah untuk benarkan یکی از jika dua lajur kunci asing boleh batal. Ini menyelesaikan masalah "ayam-dan-telur" jadual mana untuk memasukkan data dahulu. Walau bagaimanapun, ia memperkenalkan kebimbangan integriti data di mana produk boleh mempunyai gambar lalai yang dimiliki oleh produk lain.
Pilihan 2: Lajur IsDefault
Pendekatan lain ialah mengalih keluar lajur DEFAULT_PICTURE_ID daripada produk dan tambah lajur bit IsDefault dalam products_pictures. Ini membenarkan hanya satu gambar bagi setiap produk mempunyai set bit IsDefault.
Pilihan 3: Kekangan Boleh Ditunda
Kekangan tertunda membenarkan kekangan tertentu disemak dan dikuatkuasakan kemudian, menyelesaikannya isu rujukan pekeliling. Pilihan ini tidak disokong dalam MySQL.
Pilihan 4: Jadual Asingkan untuk Gambar Lalai
Untuk menghapuskan kebergantungan bulat dan memastikan integriti data, pertimbangkan untuk mencipta jadual berasingan, seperti sebagai product_default_picture, yang menyimpan perhubungan gambar lalai produk. Pendekatan ini membenarkan kedua-dua lajur kunci asing tidak boleh dibatalkan.
Kesimpulannya, walaupun rujukan pekeliling mungkin sah secara teknikal dalam sesetengah sistem pangkalan data, ia secara amnya tidak digalakkan. Pertimbangkan pilihan yang dibentangkan di atas untuk menangani rujukan bulat dalam skema MySQL anda dan memastikan integriti data.
Atas ialah kandungan terperinci Adakah Kekangan Rujukan Pekeliling dalam SQL Sah, dan Bagaimana Ia Boleh Diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!