2017-01-11 4 views
0

Это точная ошибка, WAMP возвращается, когда я запускаю дочерний код из внешнего файла под названием entries.txtНевозможно добавить внешний сдерживающий Индекс

ERROR 1215 (HY000): Невозможно добавить внешний сдерживающий Индекс

Мне нужно уметь подключать родительские таблицы к дочерней таблице, чтобы ссылки легко могли быть сделаны между таблицами. Вопросительные гласит:

Создать и заполнить третью таблицу под названием entries, снова с помощью сценариев запросов. Эта таблица должна содержать foreign keys, чтобы обеспечить разумные ссылки с двумя другими таблицами вместе с датами каждого экзамена.

Родительские Таблицы:

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)); 

Детский стол:

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

Зачем стоит имя в двух разных таблицах? Это два разных имени? То же самое для 'exam_board'. –

ответ

0

внешнего ключа в дочерней таблице, должен ссылаться на первичный ключ только родительской таблицы. Вам не нужно создавать клоны каждого столбца атрибута родительских таблиц, только столбца первичного ключа. Если вам нужно прочитать другие атрибуты, вы должны написать запрос с 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;