← К оглавлению занятия

Занятие 21. Взаимосвязи между таблицами. ER-диаграмма

📁 Блок: SQL / MySQL / Проектирование ⏱️ Время изучения: ~75 мин 🎯 Сложность: Средняя
#null #unique #delete #set

⚡ Кратко: суть темы

Таблицы связаны через ключи. Три типа связей: 1:1, 1:N, M:N. ER-диаграмма визуализирует сущности, атрибуты и связи.

  • Первичный ключ — уникален, не NULL.
  • Внешний ключ — ссылка на первичный ключ другой таблицы.
  • M:N требует промежуточной таблицы.

📖 Зачем хранить данные в разных таблицах

  • Избежание дублирования. Информация о клиенте хранится один раз, а не в каждом заказе.
  • Удобство управления. Обновить адрес клиента нужно только в одной таблице.
  • Целостность данных. Связи и ограничения не позволяют создать заказ для несуществующего клиента.

📖 Типы связей

Тип связиОписаниеПример
Один к одному (1:1) Каждой записи в одной таблице соответствует не более одной записи в другой employees ↔ employee_details
Один ко многим (1:N) Одной записи в одной таблице соответствует несколько записей в другой customers → orders
Многие ко многим (M:N) Записям в обеих таблицах соответствуют несколько записей друг друга orders ↔ products через order_details

📖 Ключи для связи таблиц

Первичный ключ (Primary Key, PK)

  • Уникально идентифицирует каждую строку таблицы.
  • Не допускает NULL.
  • Обычно не изменяется.
CREATE TABLE customers (
  id INT PRIMARY KEY,
  company_name VARCHAR(255)
);

Внешний ключ (Foreign Key, FK)

  • Связывает таблицу с первичным ключом другой таблицы.
  • Обеспечивает ссылочную целостность.
CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT,
  order_date DATE,
  FOREIGN KEY (customer_id) REFERENCES customers(id)
);

📖 ER-диаграммы

ER-диаграмма (Entity-Relationship Diagram) — графическое представление структуры базы данных. Основные элементы:

  • Сущности — прямоугольники, обычно соответствуют таблицам.
  • Атрибуты — свойства сущностей (столбцы таблицы).
  • Связи — линии между сущностями с указанием типа связи.

Нотация Crow's Foot

СимволЗначение
|Один
Ноль
├─<Много (три линии — «crow's foot»)

📖 Пример: схема northwind

  • customers (PK: id) — таблица клиентов.
  • orders (PK: id, FK: customer_id → customers) — заказы клиентов.
  • products (PK: id) — товары.
  • order_details (FK: order_id → orders, FK: product_id → products) — строки заказов.

Связи: customers 1:N orders; orders M:N products через order_details.

✨ Современные практики

  • Используйте суррогатные целочисленные первичные ключи (id) вместо естественных.
  • Явно задавайте внешние ключи и правила ON DELETE/ON UPDATE.
  • Документируйте схему через ER-диаграмму до начала разработки.