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: Нормализация
Убираем дублирование данных. Например:
- Разделяем Пользователь и Адрес, если адрес повторяется.
Ошибки новичков (и как их избежать)
- Слишком много связей
-
Если диаграмма похожа на паутину — упрощайте.
-
Игнорирование типов данных
-
Указывайте, какие поля будут
INT,VARCHAR,DATE. -
Отсутствие PK/FK
- Всегда отмечайте первичные (
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).