2017-01-11 4 views
0

Dies ist die genaue Fehlermeldung, dass WAMP zurückgibt, wenn ich das Kind Code aus einer externen Datei-LAUF entries.txtkann nicht Externe Index Einschränkungen

ERROR 1215 (HY000): nicht Externe Index Einschränkungen Can

Ich muss in der Lage sein, die übergeordneten Tabellen mit der untergeordneten Tabelle zu verbinden, so dass Verbindungen zwischen den Tabellen leicht hergestellt werden können. Die Frage lautet:

erstellen und eine dritte Tabelle entries, wieder mit Hilfe von Abfrageskripten aufgerufen füllen. Diese Tabelle sollte foreign keys enthalten, um zu ermöglichen, dass sinnvolle Links mit den anderen beiden Tabellen zusammen mit den Daten jeder Prüfung gemacht werden.

Geordnete Tabellen:

CREATE TABLE IF NOT EXISTS students(
student_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
first_name VARCHAR(20) NOT NULL, 
middle_name VARCHAR(20), 
last_name VARCHAR(40) NOT NULL, 
email VARCHAR(60) NOT NULL, 
password CHAR(40) NOT NULL, 
reg_date DATETIME NOT NULL, 
PRIMARY KEY (student_id), 
UNIQUE (email)); 

CREATE TABLE IF NOT EXISTS subjects(
subject_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
subject_name CHAR(30) NOT NULL, 
level_of_entry VARCHAR(10) NOT NULL, 
exam_board CHAR(20) NOT NULL, 
PRIMARY KEY (subject_id)); 

Child Table:

CREATE TABLE IF NOT EXISTS entries(

date_of_exam DATETIME NOT NULL,  
first_name VARCHAR, 
middle_name VARCHAR, 
last_name VARCHAR, 
subject_name CHAR, 
level_of_entry VARCHAR, 
exam_board CHAR, 

INDEX idx_first_name(first_name), 
INDEX idx_middle_name(middle_name), 
INDEX idx_last_name(last_name), 
INDEX idx_subject_name(subject_name), 
INDEX idx_level_of_entry(level_of_entry), 
INDEX idx_exam_board(exam_board),  
PRIMARY KEY (date_of_exam), 

CONSTRAINT fk_first_name FOREIGN KEY (first_name) REFERENCES students(first_name), 
CONSTRAINT fk_middle_name FOREIGN KEY (middle_name) REFERENCES students(middle_name), 
CONSTRAINT fk_last_name FOREIGN KEY (last_name) REFERENCES students(last_name), 
CONSTRAINT fk_subject_name FOREIGN KEY (subject_name) REFERENCES subjects(subject_name), 
CONSTRAINT fk_level_of_entry FOREIGN KEY (level_of_entry) REFERENCES subjects(level_of_entry), 
CONSTRAINT fk_exam_board FOREIGN KEY (exam_board) REFERENCES subjects(exam_board)  
)ENGINE=InnoDB; 
+0

Warum hat der Name in zwei verschiedenen Tabellen? Sind es zwei verschiedene Namen? Dito für 'exam_board'. –

Antwort

0

Ein Fremdschlüssel in der untergeordneten Tabelle nur den Primärschlüssel der übergeordneten Tabelle verweisen muss. Sie müssen keine Klone aller Attributspalten der übergeordneten Tabellen erstellen, sondern nur die Primärschlüsselspalte. Wenn Sie die anderen Attribute lesen müssen, schreiben Sie eine Abfrage mit einer JOIN.

CREATE TABLE IF NOT EXISTS entries(
    student_id INT UNSIGNED NOT NULL, 
    subject_id INT UNSIGNED NOT NULL, 
    date_of_exam DATETIME NOT NULL,  
    PRIMARY KEY (student_id, subject_id, date_of_exam), 
    CONSTRAINT fk_student FOREIGN KEY (student_id) REFERENCES students(student_id), 
    CONSTRAINT fk_subject FOREIGN KEY (subject_id) REFERENCES subjects(subject_id), 
)ENGINE=InnoDB; 
Verwandte Themen