2016-04-26 16 views
1

Ich verwende MySQL auf meine Übung Aufgabe im Tutorial, aber ich habe ein Problem beim Erstellen einer Tabelle mit Fehler "falsche Einschränkung".MySQL - Fehlernummer 150: "Foreign Key Constraint ist falsch gebildet"

Bitte schauen Sie und schlagen Sie mir vor, wie ich es beheben kann. Vielen Dank!

* Ein Kurs-Angebot ein Kurs in einem bestimmten Semester angeboten * Studenten in Kurs-Angeboten einschreiben, nicht Kurse * Dozenten Kursopfer zugeordnet ist, Kurse nicht

CREATE TABLE `students` (
    `student_id` char(8) NOT NULL, 
    `max_load` tinyint(4) NOT NULL, 
    PRIMARY KEY (`student_id`) 
) 
CREATE TABLE `courses` (
`course_code` char(8) NOT NULL, 
`course_title` varchar(100) NOT NULL, 
PRIMARY KEY (`course_code`) 
) 
CREATE TABLE `lecturers` (
    `lecturer_id` char(8) NOT NULL, 
    `lecturer_name` varchar(50) NOT NULL, 
    PRIMARY KEY (`lecturer_id`) 
) 

CREATE TABLE `course_offerings` (
    `course_code` char(8) NOT NULL, 
    `semester` tinyint(4) NOT NULL, 
    `year` year(4) NOT NULL, 
    `lecturer_id` char(8) NOT NULL, 
    PRIMARY KEY (`course_code`,`semester`,`year`), 
    FOREIGN KEY (`course_code`) REFERENCES `courses` (`course_code`), 
    FOREIGN KEY (`lecturer_id`) REFERENCES `lecturers` (`lecturer_id`) 
) 

CREATE TABLE `enrolment` (
`student_id` char(8) NOT NULL, 
`course_code` char(8) NOT NULL, 
`semester` tinyint(4) NOT NULL, 
`year` year(4) NOT NULL, 
PRIMARY KEY (`student_id`,`course_code`,`semester`,`year`), 
FOREIGN KEY (`student_id`) REFERENCES students(`student_id`), 
FOREIGN KEY (`course_code`) REFERENCES course_offerings(`course_code`), 
FOREIGN KEY (`semester`) REFERENCES course_offerings(`semester`), 
FOREIGN KEY (`year`) REFERENCES course_offerings(`year`) 
) 

Antwort

1

Versuchen Sie einen zusammengesetzten Fremdschlüssel unter enrolment zu haben? Wenn dies der Fall ist, könnte das folgende sein, was Sie wollen.

CREATE TABLE `enrolment` (
    `student_id` char(8) NOT NULL, 
    `course_code` char(8) NOT NULL, 
    `semester` tinyint(4) NOT NULL, 
    `year` year(4) NOT NULL, 
PRIMARY KEY (`student_id`,`course_code`,`semester`,`year`), 
FOREIGN KEY (`student_id`) 
    REFERENCES students(`student_id`), 
FOREIGN KEY (`course_code`, `semester`, `year`) 
    REFERENCES course_offerings(`course_code`, `semester`, `year`)) 

Ich würde Ihnen vorschlagen, eine id Spalte in course_offerings zu erstellen und Primärschlüssel machen, halten course_code, Semester und Jahr UNIQUE Schlüssel kombiniert. Verwenden Sie diese id als Fremdschlüssel, so dass Sie 1 Spalte anstelle von 3 Spalten benötigen.

+1

Vielen Dank, ich werde Ihrem Vorschlag folgen. –

0

Sie benötigen überprüfen Sie die Art der Spalte zwischen Quell- und Zieltabelle semester Tinyint NOT NULL, year Jahr NOT NULL, vs semester Tinyint (4) NOT NULL, year Jahr (4) NICHT NUL L,

+0

tut es helfen, auch nachdem ich das alles überprüfen. Die Länge (4), (8) für Jahr und Tinyint ... werden vom Assistenten automatisch hinzugefügt, da sie die Standardlänge dieser Typen sind. –

-1

Wie wäre es damit?

ALTER TABLE `kategori_transportasi` ADD FOREIGN KEY (`no_ktp_pemesan`) REFERENCES `tbl_daftar_customer` (
`no_ktp_pemesan`); 

MySQL sagte: Dokumentation

#1005 - Can't create table `kuda_express`.`#sql-d64_216` (errno: 150 "Foreign key constraint is incorrectly formed") (Details…) 
Verwandte Themen