Зачем данные разбиты по таблицам
Мы уже знаем что таблицы связаны через ключи. Но почему именно так? Почему не хранить всё в одной большой таблице?
Реальная ситуация
Представь интернет-магазин. В каждом заказе нужно знать:
- Какой клиент сделал заказ
- Какие товары куплены
- Какой менеджер обработал
- Из какого города доставка
Попробуем хранить всё в одной таблице:
order_id | customer_name | customer_city | product_name | category | price
---------|---------------|---------------|--------------|-------------|------
1 | Алекс | Москва | iPhone | Телефоны | 80000
1 | Алекс | Москва | Чехол | Аксессуары | 1500
2 | Мария | СПб | iPhone | Телефоны | 80000
Проблемы одной большой таблицы
Дублирование. Алекс купил 2 товара, его данные повторяются дважды. iPhone продали 2 раза, его данные тоже дублируются.
Аномалии обновления. Алекс переехал в Казань. Нужно обновить все его строки. Пропустил одну, противоречие в данных.
Аномалии удаления. Удалили единственный заказ клиента, потеряли информацию о клиенте.
Аномалии вставки. Хочешь добавить нового клиента, но он ничего не заказал. Вставить некуда.
Решение: нормализация
Данные разбиваются по тематическим таблицам:
customers: данные о клиентах
products: данные о товарах
orders: данные о заказах (связь клиент → заказ)
order_items: позиции заказа (связь заказ → товары)
Каждый клиент, одна строка в customers. Каждый товар, одна строка в products. Без дублирования.
Цена нормализации
Данные стали непротиворечивыми, но теперь разбросаны по таблицам. Чтобы получить полную информацию о заказе, нужно соединить несколько таблиц.
Именно для этого и существует JOIN.
💡 Главная мысль: Данные разбиваются по таблицам чтобы избежать дублирования и противоречий. JOIN, инструмент чтобы соединять их обратно когда это нужно.