Hubungan Rujukan Kendiri dalam SQL
Dalam skema pangkalan data, ada kemungkinan dua jadual boleh merujuk antara satu sama lain. Walau bagaimanapun, adalah penting untuk mempertimbangkan akibat daripada perhubungan rujukan kendiri sedemikian.
Seperti yang ditunjukkan dalam reka bentuk jadual yang disediakan, produk jadual dan gambar_produk membentuk rujukan bulat: produk.DEFAULT_PICTURE_ID merujuk produk_gambar.ID dan produk_gambar Rujukan .PRODUCT_ID products.ID.
Kebimbangan Circularity
Rujukan bulatan antara jadual boleh memperkenalkan kerumitan dan isu yang berpotensi:
Pilihan untuk Mitigasi
Untuk mengelakkan kelemahan rujukan pekeliling, pertimbangkan pilihan berikut:
Pilihan 1: Kunci Asing Boleh Null
Jadikan salah satu lajur kunci asing boleh batal. Ini membolehkan penciptaan rekod dalam satu jadual tanpa perlu mencipta rekod terlebih dahulu dalam jadual berkaitan, dengan itu menyelesaikan masalah ayam-dan-telur. Walau bagaimanapun, kekangan tambahan diperlukan untuk mengelakkan perhubungan tidak sah, seperti yang ditunjukkan dalam contoh yang disediakan.
Pilihan 2: IsDefault Indicator
Ganti kunci asing dalam jadual produk dengan lajur Boolean IsDefault dalam jadual products_pictures. Pendekatan ini memerlukan kekangan peringkat jadual tambahan untuk memastikan hanya satu imej bagi setiap produk boleh ditetapkan sebagai lalai. MySQL, walau bagaimanapun, tidak menyokong kekangan pengindeksan separa tersebut.
Pilihan 3: Kekangan Boleh Ditunda
Pilihan ini melibatkan penangguhan penguatkuasaan kekangan kunci asing sehingga selepas pemasukan data. Walaupun DBMS tertentu menyokong ini, ia tidak tersedia dalam MySQL.
Pilihan 4: Jadual Sertaan Tambahan
Perkenalkan jadual gabungan yang berasingan untuk mewujudkan hubungan antara produk dan jadual produk_gambar. Ini menghapuskan rujukan bulat dan membenarkan kunci asing diisytiharkan sebagai tidak batal.
Ringkasan untuk MySQL
Daripada pilihan yang dibincangkan, MySQL menyokong dua yang berikut:
Atas ialah kandungan terperinci Bagaimanakah Rujukan Pekeliling dalam Pangkalan Data SQL Diuruskan dengan Berkesan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!