До сих пор мы смотрели на таблицы по отдельности: вот пользователи, вот заказы. Но в реальной базе таблицы редко живут поодиночке — они связаны друг с другом. Сегодня разберём, что это значит и зачем вообще нужно, без единой страшной формулы.
Почему нельзя свалить всё в одну таблицу
Представь интернет-магазин. У тебя есть клиенты и есть их заказы. Соблазнительно сделать одну большую таблицу, где в каждой строке-заказе записано всё: что купили, а заодно имя клиента, его телефон, адрес и email.
Проблема в том, что один клиент делает много заказов. И его имя, телефон, адрес придётся переписывать заново в каждой строке. Сделал человек десять заказов — десять раз продублировали его анкету. А если он сменил телефон? Придётся искать и править все десять строк, и не дай бог где-то ошибиться.
Решение — связь между таблицами
Поэтому данные разносят по разным таблицам и связывают:
- таблица
users— анкеты клиентов, каждый записан один раз; - таблица
orders— заказы, и в каждом заказе хранится не вся анкета, а только номер клиента.
-- таблица orders
-- id | товар | user_id
-- 1 | Книга | 7
-- 2 | Наушники | 7
Видишь user_id? Это и есть связь. Заказ как бы говорит: «меня сделал клиент номер 7». А кто такой номер 7, лежит в таблице users. Имя клиента хранится в одном месте, а заказы лишь ссылаются на него.
Аналогия из жизни
Это как заполнять бланк заказа на почте. Ты же не переписываешь в каждой посылке полную анкету отправителя — ты указываешь номер договора или телефон, а остальное у почты уже есть. Один раз сообщил свои данные — дальше везде ссылаешься на них коротким идентификатором.
Главная польза связей — данные не дублируются. Поменял телефон клиента в его единственной анкете — и все заказы автоматически «знают» новый номер, потому что ссылаются на ту же строку.
Попробуй
Задания в терминале нет — урок про понимание. Представь свою любимую соцсеть: есть таблица пользователей и таблица постов. Как, по-твоему, пост понимает, кто его автор? Правильно — в посте хранится номер пользователя-автора. Это та же самая связь. Держи эту картинку в голове и переходи к вопросам.