Rumah >pangkalan data >tutorial mysql >Bolehkah Kunci Asing Rujukan Berbilang Jadual dalam SQL?

Bolehkah Kunci Asing Rujukan Berbilang Jadual dalam SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-24 01:51:291048semak imbas

Can a Foreign Key Reference Multiple Tables in SQL?

Kekangan Utama Asing Polimorfik: Pendekatan Serbaguna

Kekangan kunci asing konvensional mewujudkan hubungan langsung antara dua jadual yang ditentukan. Walau bagaimanapun, bagaimana jika anda memerlukan hubungan polimorfik dengan lajur merujuk kepada salah satu daripada beberapa jadual induk yang mungkin?

Adakah Kunci Asing kepada Berbilang Jadual Mungkin?

Malangnya, jawapannya negatif. Kekangan kunci asing hanya boleh merujuk jadual induk tunggal. Had ini timbul daripada keperluan untuk integriti dan ketekalan data dalam sistem pangkalan data.

Pertimbangan Praktikal

Walaupun terdapat batasan yang wujud, terdapat pendekatan praktikal yang mencontohi tingkah laku seseorang kunci asing kepada berbilang jadual:

  1. Jadual Kesatuan: Buat jadual kesatuan tunggal yang menggabungkan lajur daripada semua jadual induk yang mungkin. Lajur kunci asing dalam jadual anak merujuk kepada jadual kesatuan. Apabila memasukkan atau mengemas kini data, jadual kesatuan menentukan jadual induk sebenar yang hendak disisipkan atau dikemas kini.
  2. Lajur Taip: Perkenalkan lajur jenis dalam jadual anak untuk membezakan antara jenis jadual induk yang mungkin . Lajur kunci asing kemudian merujuk jadual induk yang sepadan dengan jenis yang dinyatakan dalam lajur jenis.

Contoh dalam MySQL dan PostgreSQL

Dalam MySQL, perkara berikut pernyataan mewujudkan jadual kesatuan:

<code class="sql">CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;</code>

Kekangan kunci asing dalam jadual anak kemudiannya ialah:

<code class="sql">ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>

Dalam PostgreSQL, pendekatan yang serupa digunakan:

<code class="sql">CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;</code>

Kekangan kunci asing menjadi:

<code class="sql">ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>

Kesimpulan

Walaupun kunci asing terus kepada berbilang jadual tidak boleh dilaksanakan, strategi alternatif membenarkan polimorfik hubungan kunci asing dalam sistem pangkalan data SQL. Strategi ini mengekalkan integriti data sambil menyediakan fleksibiliti untuk menampung berbilang jadual induk.

Atas ialah kandungan terperinci Bolehkah Kunci Asing Rujukan Berbilang Jadual dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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