MySQL - Как я могу получить внешний ключ

0

Я читаю 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, чтобы я мог получить внешний ключ?

Теги:

1 ответ

1
Лучший ответ

Я отвечаю только за то, что я считаю самым большим надзором в вашем вопросе, который касается того, что вы сказали здесь:

он создает таблицы интересов с помощью столбца 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)
);
  • 0
    Благодарю. Таким образом, следующим шагом должно быть сопоставление значения в my_contacts.contact_id для интересов. Для контакта, верно?
  • 0
    Может быть, если это ваш следующий шаг. Убедитесь, что родительская запись вставлена первой, прежде чем вставлять любые дочерние записи, которые ссылаются на нее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню