>_ IzzyLab

Практическое задание

SQLite: внешний ключ (foreign key)

сложно

В базе /root/lib.db уже есть таблица-справочник authors(id INTEGER PRIMARY KEY, name TEXT) с авторами (id = 1 и 2). Создай таблицу books(id INTEGER PRIMARY KEY, author_id INTEGER) так, чтобы колонка author_id была внешним ключом на authors(id). Схема должна гарантировать: книгу с существующим автором вставить можно, а книгу со ссылкой на несуществующего автора — нельзя (при включённой проверке внешних ключей).

Что потренируешь:
  • внешний ключ
  • foreign key
  • create table
  • pragma foreign_keys
  • целостность данных

Разбор темы

Внешний ключ (FOREIGN KEY) связывает колонку одной таблицы с ключом другой и запрещает «висячие» ссылки на несуществующие записи. Объявляют его в CREATE TABLE — либо коротко в определении колонки через REFERENCES, либо отдельным пунктом FOREIGN KEY(...) REFERENCES .... Особенность SQLite: проверка внешних ключей по умолчанию выключена и включается на уровне соединения через PRAGMA foreign_keys = ON — то есть само ограничение живёт в схеме, а срабатывает только в сессии, где включён этот PRAGMA.

Что проверяется

  1. книга с существующим автором вставляется
  2. книга с несуществующим автором отклоняется

Как это выглядит