Rumah >pangkalan data >tutorial mysql >Bolehkah Lajur Pangkalan Data Tunggal Rujukan Berbilang Kunci Asing?

Bolehkah Lajur Pangkalan Data Tunggal Rujukan Berbilang Kunci Asing?

Linda Hamilton
Linda Hamiltonasal
2024-12-25 10:17:191025semak imbas

Can a Single Database Column Reference Multiple Foreign Keys?

Kekunci Asing Berbilang Rujukan dalam Lajur Pangkalan Data

Dalam reka bentuk pangkalan data, kekangan kunci asing memainkan peranan penting dalam mengekalkan integriti rujukan dan memastikan ketepatan data. Lazimnya, lajur kunci asing merujuk lajur kunci utama dalam jadual lain, mewujudkan hubungan satu-ke-banyak atau banyak-ke-banyak antara rekod. Walau bagaimanapun, persoalan timbul: Bolehkah kita mentakrifkan satu lajur yang bertindak sebagai kunci asing kepada berbilang jadual?

Bolehkah Lajur Rujukan Berbilang Kunci Asing?

Jawapannya ialah tidak. Menurut prinsip pangkalan data, adalah tidak dibenarkan untuk mempunyai satu lajur merujuk berbilang kunci asing secara serentak. Sekatan ini dikuatkuasakan oleh semua sistem pengurusan pangkalan data hubungan utama (RDBMS).

Penjelasan

Tujuan utama kunci asing adalah untuk mewujudkan pautan langsung antara rekod dalam jadual yang berbeza. Setiap nilai kunci asing harus mengenal pasti baris secara unik dalam jadual yang dirujuk. Percubaan untuk merujuk berbilang kunci asing dalam satu lajur akan melanggar prinsip asas ini.

Alternatif kepada Kunci Asing Berbilang Rujukan

Jika anda perlu mewujudkan hubungan antara rekod dalam berbilang jadual, terdapat pendekatan alternatif untuk dipertimbangkan:

  1. Sertai Jadual: Buat jadual berasingan yang mengandungi kunci utama jadual berkaitan. Jadual gabungan ini berfungsi sebagai perantara untuk menyambungkan rekod merentas berbilang jadual.
  2. Kunci Komposit: Tentukan kunci utama yang terdiri daripada berbilang lajur. Ini membolehkan anda membuat kekangan kunci asing yang merujuk berbilang lajur secara serentak.

Contoh Menggunakan Kunci Komposit

Pertimbangkan contoh yang disediakan dalam soalan:

CREATE TABLE pdf_created (
    `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
    `pdf_id` INT(10) NOT NULL,
    `item_type` INT(3) UNSIGNED NOT NULL,
    `item_id` INT(10) UNSIGNED NOT NULL,
    PRIMARY KEY (`id`, `item_type`, `item_id`)
);

CREATE TABLE `header` (
    `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
    `title` VARCHAR(255)
);

CREATE TABLE `service` (
    `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
    `desc` VARCHAR(65535) NOT NULL
);

CREATE TABLE `product` (
    `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
    `desc` VARCHAR(65535) NOT NULL
);

Dalam skema ini, lajur item_id dalam jadual pdf_created boleh merujuk kedua-dua lajur id dalam jadual produk dan lajur id dalam jadual perkhidmatan. Ini dicapai dengan mentakrifkan kunci utama komposit pada jadual pdf_created menggunakan kedua-dua lajur id dan item_type.

Kesimpulan

Walaupun tidak mungkin untuk mempunyai satu lajur secara langsung merujuk berbilang kunci asing dalam pangkalan data hubungan, pendekatan alternatif seperti jadual gabungan atau kunci komposit boleh digunakan untuk mewujudkan hubungan yang diperlukan antara rekod.

Atas ialah kandungan terperinci Bolehkah Lajur Pangkalan Data Tunggal Rujukan Berbilang Kunci Asing?. 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