Rumah > pangkalan data > tutorial mysql > Adakah Kekangan Rujukan Pekeliling dalam SQL Sah, dan Bagaimana Ia Boleh Diselesaikan?

Adakah Kekangan Rujukan Pekeliling dalam SQL Sah, dan Bagaimana Ia Boleh Diselesaikan?

Barbara Streisand
Lepaskan: 2024-11-28 16:47:15
asal
110 orang telah melayarinya

Are Circular Referential Constraints in SQL Valid, and How Can They Be Resolved?

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?

Contoh Rujukan Pekeliling

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

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.

Kesahihan dan Implikasi

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!

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