Heim >Datenbank >MySQL-Tutorial >Wie implementiert man einen zusammengesetzten Fremdschlüssel in MySQL?

Wie implementiert man einen zusammengesetzten Fremdschlüssel in MySQL?

Susan Sarandon
Susan SarandonOriginal
2024-12-23 15:52:10468Durchsuche

How to Implement a Composite Foreign Key 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn