Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Kunci Asing Komposit dalam MySQL?

Bagaimana untuk Melaksanakan Kunci Asing Komposit dalam MySQL?

Susan Sarandon
Susan Sarandonasal
2024-12-23 15:52:10464semak imbas

How to Implement a Composite Foreign Key in MySQL?

Kunci Asing Komposit dalam SQL

Reka bentuk pangkalan data selalunya melibatkan penciptaan perhubungan antara jadual. Apabila kunci utama satu jadual terdiri daripada berbilang lajur, ia menjadi mencabar untuk memautkannya kepada kunci asing dalam jadual lain. Soalan ini meneroka cara mewujudkan hubungan antara dua jadual dengan kunci primer komposit dan kunci asing.

Pernyataan Masalah

Pertimbangkan dua jadual berikut:

CREATE TABLE IF NOT EXISTS `tutorial` (
  `beggingTime` time NOT NULL,
  `day` varchar(8) NOT NULL,
  `tutorId` int(3) NOT NULL,
  `maxMembers` int(2) NOT NULL,
  `minMembers` int(1) NOT NULL,
  PRIMARY KEY (`beggingTime`,`day`,`tutorId`),
  KEY `tutorId` (`tutorId`)
);

CREATE TABLE IF NOT EXISTS `group` (
  `groupId` tinyint(3) NOT NULL AUTO_INCREMENT,
  `status` varchar(20) NOT NULL,
  `groupName` varchar(50) NOT NULL,
  PRIMARY KEY (`groupId`)
);

Objektifnya adalah untuk mencipta medan dalam jadual kumpulan yang memaut ke kunci utama komposit dalam jadual tutorial. Timbul persoalan: bagaimanakah kita boleh mengaitkan jadual ini dengan berkesan?

Penyelesaian

Menurut dokumentasi MySQL, adalah mungkin untuk menyediakan pemetaan kunci asing kepada kunci komposit. Ini memerlukan mencipta berbilang lajur dalam jadual kunci asing:

ALTER TABLE `group` ADD COLUMN `beggingTime` time NOT NULL;
ALTER TABLE `group` ADD COLUMN `day` varchar(8) NOT NULL;
ALTER TABLE `group` ADD COLUMN `tutorId` int(3) NOT NULL;

ALTER TABLE `group` ADD FOREIGN KEY (`beggingTime`,`day`,`tutorId`) 
    REFERENCES tutorial(`beggingTime`,`day`,`tutorId`);

Pendekatan ini mencipta lajur tambahan dalam jadual kumpulan yang sepadan dengan komponen kunci utama komposit dalam jadual tutorial.

Pengesyoran

Walaupun mencipta kunci asing komposit adalah mungkin, ia bukan selalunya merupakan pilihan reka bentuk yang terbaik. Seperti yang dicadangkan oleh respons lain, adalah disyorkan untuk mempertimbangkan semula reka bentuk jadual dan menggunakan kunci utama satu lajur untuk jadual tutorial. Ini akan meningkatkan prestasi pangkalan data dan memudahkan pengurusan perhubungan.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kunci Asing Komposit dalam MySQL?. 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