ER-диаграммы: проектирование моделей данных

Введение в мир ER-диаграмм

Представьте, что вы архитектор. Но вместо домов проектируете базы данных! 🏗️ ER-диаграмма — это ваш чертёж, который показывает:
- Сущности (например, Пользователь, Заказ),
- Связи между ними (один-ко-многим, многие-ко-многим),
- Атрибуты (поля в таблицах, как email или дата_заказа).

Без ER-модели база данных превращается в хаос. Но с ней — вы чётко видите, как данные взаимодействуют!


Основные элементы ER-диаграмм

1. Сущности (Entities)

Это «герои» вашей базы данных — таблицы. Пример:

erDiagram
    CUSTOMER ||--o{ ORDER : places
    CUSTOMER {
        int id PK
        string name
        string email
    }
  • CUSTOMER — сущность с атрибутами id, name, email.
  • PK (Primary Key) — уникальный идентификатор.

2. Связи (Relationships)

Показывают, как сущности связаны:
- 1:1 (один к одному) — например, Пользователь и Паспорт.
- 1:N (один ко многим) — ЗаказчикЗаказы.
- M:N (многие ко многим) — СтудентыКурсы (нужна промежуточная таблица!).

Пример связи «многие ко многим»:

erDiagram
    STUDENT ||--o{ ENROLLMENT : enrolls
    COURSE ||--o{ ENROLLMENT : contains
    STUDENT {
        int student_id PK
        string name
    }
    COURSE {
        int course_id PK
        string title
    }
    ENROLLMENT {
        int student_id FK
        int course_id FK
        date enrollment_date
    }

3. Атрибуты

Характеристики сущностей:
- Простые: age, price.
- Составные: address (можно разбить на street, city).
- Производные: total_amount (вычисляется из других полей).


Как проектировать ER-диаграмму?

Шаг 1: Сбор требований

Задайте вопросы:
- Какие объекты важны? (клиенты, товары, платежи)
- Как они связаны? (клиент делает заказы, заказ содержит товары)

Шаг 2: Рисуем черновик

Используйте инструменты:
- Draw.io (бесплатно), Lucidchart, Mermaid (как в примерах выше).

Пример для интернет-магазина:

erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ ORDER_ITEM : contains
    PRODUCT ||--o{ ORDER_ITEM : refers_to
    CUSTOMER {
        int id PK
        string name
    }
    ORDER {
        int id PK
        date order_date
        int customer_id FK
    }

Шаг 3: Нормализация

Убираем дублирование данных. Например:
- Разделяем Пользователь и Адрес, если адрес повторяется.


Ошибки новичков (и как их избежать)

  1. Слишком много связей
  2. Если диаграмма похожа на паутину — упрощайте.

  3. Игнорирование типов данных

  4. Указывайте, какие поля будут INT, VARCHAR, DATE.

  5. Отсутствие PK/FK

  6. Всегда отмечайте первичные (PK) и внешние ключи (FK).

Практика: проектируем ER-модель для блога

erDiagram
    USER ||--o{ POST : writes
    POST ||--o{ COMMENT : has
    POST {
        int post_id PK
        string title
        text content
        int user_id FK
    }
    COMMENT {
        int comment_id PK
        text message
        int post_id FK
    }
  • Пользователь (USER) пишет посты (POST).
  • Пост содержит комментарии (COMMENT).

Скрыть рекламу навсегда

📘 VK Видео — обучение без ограничений

Все уроки доступны без VPN, без блокировок и зависаний.

Можно смотреть с телефона, планшета или компьютера — в любое время.

▶️ Смотреть на VK Видео