Первичный и внешний ключ в SQL : простое объяснение

Когда вы впервые сталкиваетесь с базами данных, всё кажется немного запутанным: таблицы, строки, какие-то «ключи»… Но если объяснить это на живых примерах — всё становится куда яснее. Давайте разберёмся, что такое первичный ключ, внешний ключ, и ещё одно важное пон — суррогатный ключ.

Таблица как ящик с карточками

Представьте себе таблицу в базе данных как ящик, полный карточек с информацией. Например, у нас есть таблица пользователей users:

Пример данных в таблице users:

idимяemail
1Катяkatya@shra.ru
2Олегoleg@shra.ru
3Машаmasha@shra.ru

Что вообще значит «ключ»?

«Ключ» — это способ однозначно найти нужную строку. В таблице users можно было бы использовать email как ключ — ведь он обычно уникален. Но на практике используют именно id, потому что:

  • email может измениться;
  • id короче, проще и быстрее обрабатывается, т.к. обычно это число;
  • с ним меньше шансов на ошибки — к примеру разночтение символов в написании, если использовать email.

Вот тут и появляется понятие:

Суррогатный ключ — это искусственный (технический) идентификатор, который не имеет смысла сам по себе, но обеспечивает уникальность. Обычно это просто автоинкрементное поле id.

Наверное, вы заметили, что второй пример содержит ключевое слово SERIAL вместо INT. Это не связано с суррогатностью ключа, это просто удобный ярлык (синтаксический сахар), который говорит базе — сделай мне поле INT, но с автоинкрементом для новых значений.

Вторая таблица — заказы. Знакомьтесь: внешний ключ

Допустим, у нас есть таблица orders, где хранятся заказы:

Пример данных:

iduser_idТовар
12Книга
22Флешка
31Наушники

Как таблицы «связываются»

  • В users.idпервичный ключ (ещё и суррогатный).
  • В orders.user_idвнешний ключ, который указывает на users.id.

Это позволяет:

  • не дублировать имя пользователя в каждом заказе;
  • легко получать данные о заказах и владельцах.

Для запроса данных из разных таблиц используется ключевое слово JOIN:

Результат запроса:

itemname
КнигаОлег
ФлешкаОлег
НаушникиКатя

Что делает внешний ключ?

Он говорит базе данных: «Эта колонка должна ссылаться на записи в другой таблице.» И если вы попытаетесь вставить user_id = 999, а такого пользователя нет — произойдёт ошибка:

Что будет если удалить пользователя?

Поведение базы зависит от настройки внешнего ключа. Можно настроить так, чтобы:

  • база данных не позволяла удалить пользователя, пока у него есть заказы;
  • или автоматически удаляла связанные заказы (ON DELETE CASCADE);
  • или просто обнуляла поле (ON DELETE SET NULL).

Пример:

Теперь при удалении пользователя удалятся и его заказы:


Итак:

  • Первичный ключ — уникальный идентификатор строки. (Как паспорт)
  • Суррогатный ключ — это искусственный первичный ключ, вроде id. Он не зависит от внешних данных.
  • Внешний ключ — это ссылка из одной таблицы на другую. Как «указатель» — кто с кем связан. Он не содержит данные сам по себе, но указывает на них.

Написать комментарий

Мало букафф? Читайте есчо !

Группировка строковых значений в выборке из базы данных

Сентябрь 30, 2018 г.

Группировка по полю, содержащему число, используется значительно чаще, чем группировка по текстовому полю. Я думаю, вы использовали функции вроде AVG(), ...

Читать

JOIN vs UNION — в чём разница?

Июль 4, 2025 г.

Эти два оператора в SQL на первый взгляд делают похожее — они "объединяют" таблицы. Но делают это по-разному и для разных целей. Вкратце: JOIN объединяет по горизонтали (добавляются столбцы из разных таблиц), тогда как UNION объединяет по вертикали ...

Читать

 

Комментарии к «Первичный и внешний ключ в SQL : простое объяснение»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: