Таблицы, строки, ключи
База данных — это склад, где информация лежит в таблицах. Таблица похожа на лист в электронной таблице: сверху названия столбцов, ниже строки с данными. Разница в трёх вещах, и каждая из них важна.
Столбец — одна характеристика: имя, город, возраст. У столбца есть название и тип: name хранит текст, age — целые числа, price — числа с копейками. Тип не украшение: он решает, что с колонкой можно делать. Сложить два текста нельзя, а вычесть одну дату из другой — можно.
Строка (её называют ещё записью) — один объект целиком: конкретный покупатель со всеми его данными. Строк в таблице бывает и десять, и десять миллионов, и это почти не меняет скорость поиска — если база устроена правильно.
Ключ — столбец id, номер строки, уникальный внутри таблицы. Его называют первичным ключом. По нему на строку ссылаются другие таблицы, и он же гарантирует, что двух одинаковых строк не появится.
Наконец, главное отличие от электронной таблицы: таблиц много, и они связаны. Покупатели лежат в одной таблице, заказы в другой, товары в третьей. Заказ не хранит имя покупателя — он хранит его номер.
Зачем так? Чтобы имя хранилось один раз. Если покупатель сменил фамилию, её правят в одном месте, и во всех заказах она становится новой сама. В электронной таблице, где имя вписано в каждую строку, пришлось бы искать и править сотню строк — и одну обязательно пропустили бы.
Столбец, который хранит номер строки из другой таблицы, называют внешним ключом. В нашей базе это orders.customer_id, order_items.order_id, order_items.product_id. Собрать данные обратно в одну таблицу — работа запроса, и этому посвящён целый урок про соединения.
И последнее про таблицу: клетка может быть пустой. Не ноль и не пустая строка, а именно ничего — это состояние называется NULL. В нашей базе у одной покупательницы не указан возраст, а у одного отзыва нет текста: так бывает, когда данные не собрали, не успели или они вообще не нужны.
Пустота ведёт себя не как значение, и это источник самых тихих ошибок в отчётах: строка с незаполненным возрастом не попадёт ни в «моложе тридцати», ни в «старше тридцати», и человек просто исчезнет из обоих списков. Разбору этого посвящён отдельный урок; пока достаточно запомнить, что пустая клетка — третье состояние, а не ноль.