Heim >Datenbank >MySQL-Tutorial >Wie implementiert man einen zusammengesetzten Fremdschlüssel in MySQL?
Zusammengesetzter Fremdschlüssel in SQL
Datenbankdesign beinhaltet oft die Erstellung von Beziehungen zwischen Tabellen. Wenn der Primärschlüssel einer Tabelle aus mehreren Spalten besteht, wird es schwierig, ihn mit einem Fremdschlüssel in einer anderen Tabelle zu verknüpfen. In dieser Frage wird untersucht, wie eine Beziehung zwischen zwei Tabellen mit einem zusammengesetzten Primärschlüssel und einem Fremdschlüssel hergestellt wird.
Problemstellung
Betrachten Sie die folgenden beiden Tabellen:
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`) );
Das Ziel besteht darin, ein Feld in der Gruppentabelle zu erstellen, das mit dem zusammengesetzten Primärschlüssel in der Tutorial-Tabelle verknüpft ist. Es stellt sich die Frage: Wie können wir diese Tabellen effektiv in Beziehung setzen?
Lösung
Laut MySQL-Dokumentation ist es möglich, eine Fremdschlüsselzuordnung zu zusammengesetzten Schlüsseln einzurichten. Dazu müssen mehrere Spalten in der Fremdschlüsseltabelle erstellt werden:
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`);
Dieser Ansatz erstellt zusätzliche Spalten in der Gruppentabelle, die den Komponenten des zusammengesetzten Primärschlüssels in der Tutorial-Tabelle entsprechen.
Empfehlung
Die Erstellung eines zusammengesetzten Fremdschlüssels ist zwar möglich, aber nicht immer die beste Designwahl. Wie bereits in anderen Antworten vorgeschlagen, wird empfohlen, das Tabellendesign zu überdenken und einen einspaltigen Primärschlüssel für die Tutorial-Tabelle zu verwenden. Dadurch wird die Datenbankleistung verbessert und das Beziehungsmanagement vereinfacht.
Das obige ist der detaillierte Inhalt vonWie implementiert man einen zusammengesetzten Fremdschlüssel in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!