Вопрос с собеседования · Базы данных

Что обеспечивает внешний ключ (foreign key)?

JuniorМоделирование данныхSQL
Ещё спрашивают так:
  • Что такое ссылочная целостность?
Коротко

Внешний ключ гарантирует, что ссылка ведёт на реально существующую строку: нельзя создать заказ для несуществующего клиента и нельзя удалить клиента с заказами (без явного правила).

  • Целостность обеспечивает база, а не приложение — баги и ручные правки не создадут «висячих» ссылок
  • Правила при удалении: RESTRICT, CASCADE, SET NULL

А ещё Индекс на колонке внешнего ключа нужно создать самому

Подробно

Ценность в том, что правило соблюдается всегда: даже при ошибке в коде или ручном изменении данных база не позволит появиться «висячей» ссылке. Уникальность — задача отдельного ограничения, а автоматический индекс внешний ключ создаёт не везде, и его обычно добавляют вручную, иначе удаление родительской строки приводит к полному сканированию дочерней таблицы. Поведение при удалении родителя задаётся явно: запретить, обнулить ссылку или удалить каскадом.

Что хотят услышать

  • Определение и пример.
  • Почему проверка в базе надёжнее приложения.

Частые ошибки

  • Полагаться на проверку целостности только в коде приложения.
  • Забывать создать индекс по колонке внешнего ключа.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Автоматическую нумерацию строк в ссылающейся таблице в порядке вставки
  • ✓Ссылочную целостность: нельзя сослаться на несуществующую строку
  • ✗Уникальность значений в колонке и запрет на NULL в ссылающейся строке таблицы
  • ✗Каскадное копирование изменённых данных во все связанные таблицы

Что спросят дальше

  • Чем опасно ON DELETE CASCADE?
  • Зачем нужен индекс на колонке внешнего ключа?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

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

Разбор собеседования