Глава 22 · Веб-разработка с Python

Реляционные базы данных: таблицы, ключи и связи

Данные в строках и столбцах — и связи между таблицами через первичные и внешние ключи.

Самый распространённый вид базы данных — реляционная: данные хранятся в таблицах, похожих на лист расчётной таблицы. Каждая строка — одна запись, каждый столбец — одно её свойство с заранее заданным типом.

userstasks1 — N
Одному пользователю users может соответствовать несколько строк tasks
idtitledone
1Выучить основы Python1
2Собрать сайт на Flask0

Такая таблица — tasks: у каждой строки есть id — уникальный номер, по которому её можно однозначно найти. Столбец, который делает это (обычно id), называют первичным ключом (primary key).

Связь между таблицами — внешний ключ

Если бы у каждой задачи был владелец, вторая таблица users хранила бы пользователей, а таблица tasks — ссылку на строку в ней:

idtitledoneuser_id
1Выучить основы Python17
2Собрать сайт на Flask07

Столбец user_id, который ссылается на id в другой таблице, называют внешним ключом (foreign key).

Откуда взялось слово «реляционная»
Название происходит от математического понятия relation (отношение), лежащего в основе реляционной модели данных: отношение — это множество кортежей одинаковой структуры, а на практике его представляют в виде таблицы. Связи между таблицами через внешние ключи — важная часть проектирования баз данных, но не источник названия модели: одна таблица без единого внешнего ключа всё равно остаётся реляционной.
Итоговый проект остаётся без пользователей — и это осознанно
Как раздел 22.31 объясняет подробнее: чтобы не расширять эту главу до полноценной аутентификации, итоговый проект (раздел 22.35) использует только одну таблицу — tasks, без users и без внешних ключей. Связи между таблицами — важная идея, но не обязательный элемент самого маленького работающего приложения.