Я читаю Head First SQL и очень запутался в использовании внешнего ключа. В главе 7 приведен пример создания новой таблицы с внешним ключом следующим образом:
CREATE TABLE interests(
int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
interest VARCHAR(50) NOT NULL,
CONSTRAINT my_contacts_contact_id_fk
FOREIGN KEY (contact_id)
REFERENCES my_contacts (contact_id)
);
Если моя память служит мне правильной, она создает интересы таблицы с помощью столбца contact_id, который является внешним ключом из таблицы my_contacts. Однако, когда я читал главу 8, книга попросила нас вытащить столбцы, например, профессию, чтобы создать новую таблицу для справки. Например,
profession
prof_id (primary key) (parent key)
profession VARCHAR(20)
my_contacts
contact_id (primary key)
prof_id (foreign key)
Откуда появляется my_contacts.prof_id? Первоначально таблица my_contacts имела столбец профессии, и она каким-то образом превратилась в профессию_ид посредством какой-то магии. Теперь у меня две таблицы
profession
prof_id (primary key)
profession VARCHAR(20)
my_contacts
contact_id (primary key)
profession
Нужно ли сопоставлять professional.prof_id с my_contacts, а затем отбрасывать столбец my_contacts.profession, чтобы я мог получить внешний ключ?
Я отвечаю только за то, что я считаю самым большим надзором в вашем вопросе, который касается того, что вы сказали здесь:
он создает таблицы интересов с помощью столбца contact_id, который является внешним ключом из таблицы my_contacts
Добавление ограничения внешнего ключа в таблицу MySQL не создает столбец. Скорее всего, вам все равно нужно создать столбец для внешнего ключа, как и любой другой столбец. Итак, ваш оператор CREATE TABLE
должен выглядеть примерно так:
CREATE TABLE interests (
int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
interest VARCHAR(50) NOT NULL,
contact_id INT,
CONSTRAINT my_contacts_contact_id_fk FOREIGN KEY (contact_id)
REFERENCES my_contacts (contact_id)
);