Learnly
SQL для аналитиков/Глава 7/Урок 1

Зачем данные разбиты по таблицам

Зачем данные разбиты по таблицам

Мы уже знаем что таблицы связаны через ключи. Но почему именно так? Почему не хранить всё в одной большой таблице?

Реальная ситуация

Представь интернет-магазин. В каждом заказе нужно знать:

  • Какой клиент сделал заказ
  • Какие товары куплены
  • Какой менеджер обработал
  • Из какого города доставка

Попробуем хранить всё в одной таблице:

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, инструмент чтобы соединять их обратно когда это нужно.