Rumah > pangkalan data > tutorial mysql > Bilakah Rujukan Pekeliling dalam SQL Boleh Diterima?

Bilakah Rujukan Pekeliling dalam SQL Boleh Diterima?

Linda Hamilton
Lepaskan: 2024-11-25 13:03:15
asal
584 orang telah melayarinya

When is Circular Referencing in SQL Acceptable?

Adakah Rujukan Pekeliling dalam SQL Boleh Diterima?

Dalam reka bentuk pangkalan data, kebimbangan umum timbul apabila berurusan dengan jadual yang merujuk antara satu sama lain dalam cara pekeliling. Untuk memahami konsep ini, mari kita periksa pangkalan data sampel:

CREATE TABLE products (
  ID int(10) unsigned NOT NULL AUTO_INCREMENT,
  NAME varchar(255) NOT NULL,
  ...
  DEFAULT_PICTURE_ID int(10) unsigned DEFAULT NULL,
  FOREIGN KEY (DEFAULT_PICTURE_ID) REFERENCES products_pictures (ID)
);

CREATE TABLE products_pictures (
  ID int(10) unsigned NOT NULL AUTO_INCREMENT,
  IMG_PATH varchar(255) NOT NULL,
  PRODUCT_ID int(10) unsigned NOT NULL,
  FOREIGN KEY (PRODUCT_ID) REFERENCES products (ID)
);
Salin selepas log masuk

Dalam senario ini, jadual produk mempunyai lajur DEFAULT_PICTURE_ID yang merujuk kepada jadual products_pictures, manakala jadual products_pictures mempunyai lajur PRODUCT_ID yang merujuk kembali kepada jadual produk. Ini mewujudkan rujukan bulat.

Akibat Rujukan Pekeliling

Rujukan bulat dalam SQL boleh membawa kepada isu, terutamanya jika rujukan diisytiharkan sebagai BUKAN NULL. Memasukkan atau mengemas kini rekod dalam reka bentuk sedemikian menjadi bermasalah kerana situasi ayam-dan-telur: jadual manakah yang perlu dikemas kini dahulu? Selain itu, pemadaman rekod boleh mengakibatkan pelanggaran integriti rujukan.

Alternatif Yang Boleh Diterima

Terdapat beberapa pendekatan untuk menangani rujukan pekeliling dalam SQL.

  • Jadikan Satu Kunci Asing Boleh Dibatalkan: Pilihan ini melibatkan menjadikan salah satu kunci asing boleh batal, membolehkan anda memasukkan rekod ke dalam satu jadual tanpa merujuk yang lain. Walau bagaimanapun, adalah penting untuk memastikan integriti data dengan melaksanakan kekangan untuk menghalang rekod yatim.
  • Gunakan Jadual Gabungan Berasingan: Alternatif lain ialah mencipta jadual gabungan berasingan yang mengaitkan kedua-dua jadual melalui set kunci asing baharu. Pendekatan ini menghapuskan rujukan bulat dan membolehkan anda mentakrifkan kunci asing BUKAN NULL.
  • Pertimbangkan Menggunakan Kekangan Boleh Ditunda: Dalam sistem pangkalan data tertentu, seperti PostgreSQL dan Oracle, kekangan yang boleh ditangguhkan boleh digunakan untuk menangguhkan penguatkuasaan kunci asing sehingga selepas transaksi dilakukan. Walau bagaimanapun, ciri ini tidak disokong dalam MySQL.

Kesimpulan:

Walaupun rujukan bulat dalam SQL mungkin menggoda untuk perhubungan pemodelan, ia boleh menimbulkan komplikasi dan isu prestasi. Memilih salah satu alternatif yang lebih sesuai, seperti kunci asing yang boleh dibatalkan, jadual sambung atau kekangan yang boleh ditunda, adalah disyorkan untuk reka bentuk pangkalan data yang boleh dipercayai dan boleh diselenggara.

Atas ialah kandungan terperinci Bilakah Rujukan Pekeliling dalam SQL Boleh Diterima?. 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