Что обеспечивает внешний ключ (foreign key)?
- Что такое ссылочная целостность?
Внешний ключ гарантирует, что ссылка ведёт на реально существующую строку: нельзя создать заказ для несуществующего клиента и нельзя удалить клиента с заказами (без явного правила).
- Целостность обеспечивает база, а не приложение — баги и ручные правки не создадут «висячих» ссылок
- Правила при удалении: RESTRICT, CASCADE, SET NULL
А ещё Индекс на колонке внешнего ключа нужно создать самому
Подробно
Ценность в том, что правило соблюдается всегда: даже при ошибке в коде или ручном изменении данных база не позволит появиться «висячей» ссылке. Уникальность — задача отдельного ограничения, а автоматический индекс внешний ключ создаёт не везде, и его обычно добавляют вручную, иначе удаление родительской строки приводит к полному сканированию дочерней таблицы. Поведение при удалении родителя задаётся явно: запретить, обнулить ссылку или удалить каскадом.
Что хотят услышать
- Определение и пример.
- Почему проверка в базе надёжнее приложения.
Частые ошибки
- Полагаться на проверку целостности только в коде приложения.
- Забывать создать индекс по колонке внешнего ключа.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Автоматическую нумерацию строк в ссылающейся таблице в порядке вставки
- ✓Ссылочную целостность: нельзя сослаться на несуществующую строку
- ✗Уникальность значений в колонке и запрет на NULL в ссылающейся строке таблицы
- ✗Каскадное копирование изменённых данных во все связанные таблицы
Что спросят дальше
- Чем опасно ON DELETE CASCADE?
- Зачем нужен индекс на колонке внешнего ключа?
Разбор темы
- Моделирование данных и целостность
Ключи и constraints, нормальные формы простыми словами, осознанная денормализация и каскадные действия.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.