2013-07-31 3 views
0

У меня есть две викторины для таблиц в quizId является основным ключом. Я установил его в auto_increment. У меня есть еще одна таблица quizQuestions, в которой я хочу, чтобы quizID таблицы викторины был ключом foriegn. Эти запросы:AutoIncrement с иностранным ключом

CREATE TABLE IF NOT EXISTS quiz (
     quizId int(11) NOT NULL AUTO_INCREMENT, 
     subject varchar(30) DEFAULT NULL, 
     examDate date DEFAULT NULL, 
     PRIMARY KEY (quizId) 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 


    CREATE TABLE IF NOT EXISTS quizQuestions 
    (
     quizId int(11) NOT NULL AUTO_INCREMENT, 
     questionId int(11) NOT NULL AUTO_INCREMENT, 
     question varchar(30) DEFAULT NULL, 
     option1 varchar(30) DEFAULT NULL, 
     option2 varchar(30) DEFAULT NULL, 
     option3 varchar(30) DEFAULT NULL, 
     option4 varchar(30) DEFAULT NULL, 
     answer varchar(30) DEFAULT NULL, 
     PRIMARY KEY (questionId), 
     Foreign Key (quizId) references quiz(quizId) 
    ) 

Теперь я хочу спросить, что это моя первая линия правильно quizQuestions, я должен указать quizId, как AUTO_INCREMENT в quizQuestions таблице также, как quizId является первичным ключом таблицы викторины?

+2

Нет ... Вы не требует '' AUTO_INCREMENT' на quizId 'в' quizQuestions', поскольку вы явно создаете отношения ... что, вероятно, также и то, что вы хотите, как я понимаю из вашей схемы ... Однако, если вы ожидаете отношения «один ко многим» ... тогда вы можете захотеть рассмотреть возможность использования 'AUTO_INCREMENT' для другого атрибута для различения нескольких дочерних элементов для этой таблицы' quizQuestions'. – Vikram

ответ

2

quizId не должен быть auto_increment, и в этом случае он не будет компилироваться, поскольку это не первичный ключ. Как отмечалось, поскольку вы создаете отношения «один-ко-многим», вы должны сделать внешний ключ quizId и первичный ключ автоинкремента questionId (как и вы).

Обратите внимание, что если вы сделаете quizId как первичный, так и иностранные вы можете сделать это также автоматическое приращение, но это не то, что вы хотите ....

Смежные вопросы