Проектирование баз данных
Теория: Внешние ключи
В этом уроке познакомимся с внешними ключами и как они помогают создавать связь между таблицами.
Внешний ключ
Внешний ключ — это ограничение, которое связывает указанную колонку с данными из другой таблицы. Такое ограничение гарантирует целостность данных.
В таблице topics атрибут user_id связан с атрибутом id таблицы users. Синтаксически для этого добавляется ключевое слово REFERENCES после типа поля. Затем добавляется имя таблицы, на которую идет связь. В скобках указывается поле, с которым эта связь создается.
-
Если попробовать вставить в
topicsзапись со значениемuser_id, которого нет в таблицеusers, то возникнет ошибка -
Если попытаться удалить запись из
users, на которую есть ссылки из таблицыtopics, то возникнет ошибка
Внешний ключ проверяет целостность данных и не позволяет появляться «мусору». Поэтому лучше ставить внешние ключи на все идентификаторы, для которых есть родительская таблица в базе.
Внешние ключи поддерживают несколько вариаций. Таким образом они поддерживают целостность, но не приводят к ошибкам при попытке удалить запись.
Вариант 1 — Каскадное удаление:
В таком варианте при попытке удалить родительскую запись (users) будут удалены все записи в topics, которые ссылаются на этого пользователя. Каскадное удаление — опасная опция, так как можно случайно лишиться данных. Стоит хорошо подумать, прежде чем включать ее.
Вариант 2 — Записи остаются, но вместо идентификатора проставляется null:
Используется нечасто, но иногда может быть полезно.
Выводы
В этом уроке мы узнали про внешние ключи. Они обеспечивают связь между двумя таблицами в базе данных. Повторим ключевые моменты:
- Для создания связи между таблицами в колонке указывают ключевое слово
REFERENCES, название таблицы и колонку, с которой необходима связь - Внешний ключ может предотвратить удаление данных, если на эти данные ссылаются из других таблиц.
- При помощи ключевого слова
ON DELETEможно настроить каскадное удаление, либо записьNULLв связанных полях. - При использовании внешних ключей необходимо учитывать возможность возникновения ошибок при вставке или удалении данных. Поэтому важно хорошо продумывать структуру связей между таблицами и выбирать подходящие действия при удалении связанных данных (
CASCADE,SET NULLи др.).
Таким образом, использование первичных и внешних ключей в SQL помогает не только организовать базу данных, но и обеспечить целостность и надежность данных в ней.
.png)








