MySQL. Урок 3. Создание внешнего ключа. FOREIGN KEY.

В предыдущем уроке мы познакомились с СУБД MySQL, создали свою первую базу данных и таблицу, получив самые базовые знания для работы с языком SQL. Также мы узнали о таких понятиях как первичные и внешние ключи. Сегодняшний урок посвящен именно вторым.

Внешний ключ — это поле таблицы, использующееся для связи с другими таблицами. В БД каждая таблица представляет собой отдельную сущность вашей предметной области. Наша таблица books представляет собой конкретную сущность — книгу.

Нам незачем добавлять в данную таблицу несколько полей, связанных со сведениями о ее авторе. Гораздо логичнее было бы отдельно выделить эту сущность и поместить ее в другую таблицу. Тогда в одной таблице мы бы хранили список всех книг в системе, а  другой — список авторов. Но у каждой книги есть свой автор, также как и у каждого автора может быть несколько книг. Осталось как-то установить эту связь между ними.

Для этого вместо того, чтобы создавать поле author и прописывать туда для каждой книги его имя, мы поступим более гибко: создадим поле author_id, которое будет ссылаться на поле id в новой таблице authors.

В нашем случае поле author_id — это внешний ключ. При использовании данного подхода мы всегда сможем получить сведения об авторе выбранного произведения и даже чуточку больше о нем самом. При этом нам не придется все данные сваливать в одну таблицу. Вы уже наверное и сами догадались, как это будет выглядеть.

Дополнительно: данная схема была создана с использованием очень простого и из-за этого удобного сервиса DbDesigner.

Теперь давайте перейдем к практике, создадим новую таблицу и установим между нашими таблицами связь.

Сначала напишем запрос, создающий таблицу authors, которая будет хранить сведения обо всех писателях, а затем добавим в таблицу books внешний ключ — author_id, связав ее таким образом с таблицей authors.

Выделение_008

Теперь нам нужно добавить внешний ключ. Это можно было сделать изначально при создании таблицы. Но так как наша таблица уже была создана, то добавим связь с помощью уже знакомой нам команды ALTER TABLE:

Таким образом, мы добавляем связь между полем author_id таблицы books и полем id таблицы authors.

Выделение_009

Мы видим. что в тип ключа равен MUL. Это означает, что значение данного поля не является уникальным и мы можем добавить несколько записей с одним и тем же значением данного поля. Это логично, так как у нас может быть несколько книг за авторством одного и того же писателя. поле также может иметь тип UNI(UNIQUE). В этом случае мы бы не смогли добавить в нашу таблицу две строки с одним и тем же значением данного поля.

Мы упомянули, что создать связь между таблицами можно и в команде CREATE TABLE. Тогда запрос для создания таблицы books выглядел бы следующим образом:

Обязательным условием в данном случае будет существование таблицы authors. Если попытаться выполнить скрипт при ее отсутствии, то вы получите сообщение об ошибке.

комментарий

  1. Александр Ответить

    Хочу посмотреть предыдущий урок а ссылки на него нет.
    Здесь ссылки только на два следующих урока. Бардак(((

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *