Bagaimanakah Rujukan Pekeliling dalam SQL Dapat Diselesaikan, Terutamanya dalam MySQL?

Patricia Arquette
Lepaskan: 2024-11-25 02:19:13
asal
349 orang telah melayarinya

How Can Circular References in SQL be Resolved, Especially in MySQL?

Rujukan Pekeliling dalam SQL: Dilema

Dalam bidang reka bentuk pangkalan data hubungan, timbul persoalan: adakah boleh diterima dua jadual untuk merujuk antara satu sama lain? Jawapannya, malangnya, bergantung pada sistem pengurusan pangkalan data (DBMS) khusus yang digunakan dan fungsi yang diingini.

Masalahnya

Seperti yang ditunjukkan dalam contoh struktur pangkalan data yang diberikan , dua jadual, produk dan gambar_produk, mempunyai kekangan utama asing yang mencipta pekeliling rujukan:

products.DEFAULT_PICTURE_ID -> products_pictures.ID
products_pictures.PRODUCT_ID -> products.ID
Salin selepas log masuk

Pekeliling ini boleh membawa kepada isu, terutamanya dalam MySQL.

Penyelesaian Kemungkinan

Pilihan 1: Asing Boleh Laras Keterasingan Utama

Satu penyelesaian ialah membuat salah satu lajur kunci asing boleh batal. Ini membenarkan INSERT awal ke dalam kedua-dua jadual tanpa melanggar kekangan integriti. Walau bagaimanapun, ia mungkin memperkenalkan kebimbangan integriti data, seperti membenarkan produk mempunyai gambar lalai yang dimiliki oleh produk lain. Untuk menangani isu ini, kekangan kunci asing boleh ditakrifkan seperti berikut:

CONSTRAINT FK_products_1 
  FOREIGN KEY (id, default_picture_id) 
  REFERENCES products_pictures (product_id, id)
  ON DELETE RESTRICT
  ON UPDATE RESTRICT
Salin selepas log masuk

Pilihan 2: IsDefault Flag

Pendekatan lain ialah menggantikan lajur DEFAULT_PICTURE_ID dalam jadual produk dengan bendera IsDefault dalam jadual products_pictures. Penyelesaian ini memerlukan penentuan kekangan atau indeks unik untuk memastikan bahawa hanya satu gambar bagi setiap produk mempunyai bendera IsDefault ditetapkan kepada benar. Walau bagaimanapun, MySQL tidak menyokong indeks separa, yang menjadikan pendekatan ini tidak praktikal.

Pilihan 3: Kekangan Boleh Ditunda

Pilihan ini melibatkan penggunaan kekangan yang boleh ditangguhkan. Kekangan yang boleh ditangguhkan membenarkan pangkalan data untuk menangguhkan sementara penguatkuasaan kekangan integriti, membolehkan untuk persediaan awal jadual dan perhubungannya. Walau bagaimanapun, MySQL tidak menyokong kekangan yang boleh ditangguhkan.

Pilihan 4: Jadual Pertengahan

Untuk menghapuskan rujukan bulat sepenuhnya, jadual ketiga boleh diperkenalkan:

product_default_picture
----------------------
product_id          NOT NULL
default_picture_id  NOT NULL
PRIMARY KEY (product_id)
FOREIGN KEY (product_id, default_picture_id)
  REFERENCES products_pictures (product_id, id)
Salin selepas log masuk

Pendekatan ini menghapuskan pekeliling dan memastikan data integriti.

Syor MySQL

Untuk MySQL, dua pilihan kekal berdaya maju:

  • Pilihan 1: Kebolehbatalan kunci asing boleh laras dengan pembetulan yang dibincangkan di atas untuk menguatkuasakan integriti data.
  • Pilihan 4: Jadual perantaraan untuk dielakkan rujukan pekeliling sama sekali.

Atas ialah kandungan terperinci Bagaimanakah Rujukan Pekeliling dalam SQL Dapat Diselesaikan, Terutamanya dalam MySQL?. 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