2017-04-10 2 views
0

Ich habe Probleme mit Navicat auf Ubuntu 16.04 LTS, ich versuche, das Skript auszuführen, und es am letzten Tisch sagt, dass das nicht kann Fremdschlüsseleinschränkung hinzufügen, hier ist mein Skript, weiß jemand, dass ich irgendwo falsch liege?MySQL wird keinen Fremdschlüssel mehr als einen Fremdschlüssel zu derselben Tabelle hinzufügen

Vielen Dank im Rat

Hier ist mein SQL-Skript:

CREATE TABLE `SMER` (
    `Ssmer` INT(10) NOT NULL AUTO_INCREMENT, 
    `Nazivs` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`Ssmer`) 
    ); 

CREATE TABLE `Nastavnici` (
    `Snast` INT(10) NOT NULL AUTO_INCREMENT, 
    `Imen` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`Snast`) 
    ); 

CREATE TABLE `PREDMETI` (
    `SPRED` INT(10) NOT NULL AUTO_INCREMENT, 
    `NAZIVP` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`SPRED`) 
    ); 

CREATE TABLE `Studenti` (
    `Indeks` INT(10) NOT NULL, 
    `Upisan` INT(10) NOT NULL, 
    `Imes` VARCHAR(255) NOT NULL, 
    `Mesto` VARCHAR(255), 
    `Datr` DATETIME NOT NULL, 
    `Ssmer` INT(10) NOT NULL, 
    PRIMARY KEY (`Indeks`, `Upisan`), 
    CONSTRAINT `FK_Studenti_Ssmer` FOREIGN KEY (`Ssmer`) REFERENCES `SMER` (`Ssmer`) 
    ); 

CREATE TABLE `USLOVNI` (
    `Spred` INT(10) NOT NULL, 
    `UslPredmet` INT(10) NOT NULL, 
    PRIMARY KEY (`Spred`, `UslPredmet`), 
    CONSTRAINT `FK_Uslovni_Spred` FOREIGN KEY (`Spred`) REFERENCES `PREDMETI` (`SPRED`), 
    CONSTRAINT `FK_Uslovni_UslPredmet` FOREIGN KEY (`UslPredmet`) REFERENCES `PREDMETI` (`SPRED`) 
    ); 

CREATE TABLE `Planst` (
    `Ssmer` INT(10) NOT NULL, 
    `Spred` INT(10) NOT NULL, 
    `Semestar` VARCHAR(255) DEFAULT NULL, 
    PRIMARY KEY (`Ssmer`, `Spred`), 
    CONSTRAINT `FK_Planst_Ssmer` FOREIGN KEY (`Ssmer`) REFERENCES `SMER` (`Ssmer`), 
    CONSTRAINT `FK_Planst_Spred` FOREIGN KEY (`Spred`) REFERENCES `PREDMETI` (`SPRED`) 
    ); 

CREATE TABLE `Angazovanje` (
    `Snast` INT(10) NOT NULL, 
    `Spred` INT(10) NOT NULL, 
    `Ssmer` INT(10) NOT NULL, 
    PRIMARY KEY (`Snast`, `Spred`, `Ssmer`), 
    CONSTRAINT `FK_Angazovanje_Snast` FOREIGN KEY (`Snast`) REFERENCES `Nastavnici` (`Snast`), 
    CONSTRAINT `FK_Angazovanje_Spred` FOREIGN KEY (`Spred`) REFERENCES `PREDMETI` (`SPRED`), 
    CONSTRAINT `FK_Angazovanje_Ssmer` FOREIGN KEY (`Ssmer`) REFERENCES `SMER` (`Ssmer`) 
    ); 

CREATE TABLE `Prijave` (
    `Spred` INT(10) NOT NULL, 
    `Indeks` INT(10) NOT NULL, 
    `Upisan` INT(10) NOT NULL, 
    `Snast` INT(10) NOT NULL, 
    `Datump` DATETIME DEFAULT NOW(), 
    `Ocena` INT(2) NOT NULL, 
    PRIMARY KEY (`Spred`, `Indeks`, `Upisan`, `Datump`), 
    CONSTRAINT `FK_Prijave_Spred` FOREIGN KEY (`Spred`) REFERENCES `PREDMETI` (`SPRED`), 
    CONSTRAINT `FK_Prijave_Indeks` FOREIGN KEY (`Indeks`) REFERENCES `Studenti` (`Indeks`), 
    CONSTRAINT `FK_Prijave_Upisan` FOREIGN KEY (`Upisan`) REFERENCES `Studenti` (`Upisan`), 
    CONSTRAINT `FK_Prijave_Snast` FOREIGN KEY (`Snast`) REFERENCES `Nastavnici` (`Snast`) 
    ); 

Hier ist die Fehlermeldung:

 [Err] 1215 - Cannot add foreign key constraint 
+0

Fügen Sie die genaue Fehlermeldung auch ein? –

+0

Ich bin mir nicht sicher, aber es könnte sein, dass zwei verschiedene Fremdschlüssel zu ein und derselben Tabelle 'Student' nicht erlaubt sind (zumindest nicht in allen MySQL-Versionen). Erhalten Sie immer noch denselben Fehler, wenn Sie eine der Einschränkungen entfernen? Zum Beispiel versuchen Sie, die Zeile 'CONSTRAINT FK_Prijave_Upisan FOREIGN KEY (Upisan) REFERENZEN Studenti (Upisan),' und lassen Sie uns wissen, wenn der Fehler immer noch existiert ... –

+0

Wenn ich diese Einschränkung zu entfernen, funktioniert es auch – tehnodrom

Antwort

1

Sie haben zwei FKs von Ihrem Prijave Tabelle auf Ihre Studenti Tabelle zeigen . MySQL spielt damit nicht gut.

Versuchen Sie, diese

CONSTRAINT `FK_Prijave_Indeks` FOREIGN KEY (`Indeks`, `Upisan`) 
           REFERENCES `Studenti` (`Indeks`, `Upisan`), 

statt dessen.

CONSTRAINT `FK_Prijave_Indeks` FOREIGN KEY (`Indeks`) REFERENCES `Studenti` (`Indeks`), /* wrong !*/ 
CONSTRAINT `FK_Prijave_Upisan` FOREIGN KEY (`Upisan`) REFERENCES `Studenti` (`Upisan`), 
+0

Das war's. Ich wusste nicht, dass das so gemacht werden muss. – tehnodrom

Verwandte Themen