Dalam reka bentuk pangkalan data, mungkin terdapat situasi di mana anda ingin mewujudkan hubungan antara jadual yang berbeza menggunakan satu lajur sebagai kunci asing untuk berbilang jadual sasaran. Walau bagaimanapun, senario khusus ini, seperti yang dibentangkan dalam coretan kod SQL di bawah, tidak boleh dilaksanakan:
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, `quantity` INT(3) NOT NULL, PRIMARY KEY (`id`), KEY `FK_pdf_id` (`pdf_id`), CONSTRAINT `FK_pdf_id` FOREIGN KEY (`pdf_id`) REFERENCES `pdf` (`id`), KEY `FK_item_type` (`item_type`), CONSTRAINT `FK_item_type` FOREIGN KEY (`item_type`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, KEY `FK_item_id` (`item_id`), CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `service` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `header` (`id`) ON DELETE CASCADE ON UPDATE CASCADE );
Sebabnya ialah penguatkuasaan kekangan kunci asing yang memerlukan satu lajur untuk memadankan kunci utama dalam berbilang jadual adalah mustahil dalam teori pangkalan data hubungan. Walaupun anda boleh membuat lajur dalam jadual pdf_created yang merujuk lajur yang sepadan dalam produk, perkhidmatan, pengepala dan jadual item, mewujudkan kekangan kunci asing untuk setiap rujukan ini secara serentak adalah tidak dibenarkan.
Walau bagaimanapun, adalah mungkin. untuk menggunakan nilai lajur yang dirujuk untuk cantuman tanpa menentukan kekangan kunci asing yang jelas. Kunci asing pada asasnya ialah lajur yang mengandungi nilai kunci utama jadual yang berkaitan. Ini membolehkan anda untuk menyertai rekod antara jadual berdasarkan nilai kunci asing yang dikongsi mereka. Dalam senario yang diberikan, anda boleh meminta lajur item_id dalam jadual pdf_created merujuk kunci utama dalam produk, perkhidmatan, pengepala dan jadual item. Dengan berbuat demikian, anda boleh menyertai jadual pdf_created dengan mana-mana jadual sasaran ini menggunakan lajur item_id sebagai syarat penyertaan.
Atas ialah kandungan terperinci Bolehkah Lajur Tunggal Berfungsi sebagai Kunci Asing Berbilang dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!