ER-диаграмма: как построить и оформить
Сущности, атрибуты, связи, мощность 1:1, 1:М и М:М, нотация «воронья лапка», переход от ER-модели к таблицам и типовые ошибки.
ER-диаграмма (сущность-связь) — это инфологическая модель: она описывает предметную область до того, как вы решите, в какой СУБД всё это хранить. В курсовой она идёт в разделе проектирования и должна согласовываться со схемой таблиц.
Три элемента
- Сущность — объект, о котором мы храним данные: Студент, Заказ, Оборудование. Обычно существительное в единственном числе.
- Атрибут — свойство сущности: ФИО, дата рождения. Отдельно помечается ключевой атрибут.
- Связь — отношение между сущностями: Студент «учится в» Группе. Подписывается глаголом.
Мощность связи
| Тип | Пример | Как реализуется в таблицах |
|---|---|---|
| 1:1 | Сотрудник — Учётная запись | Внешний ключ с UNIQUE в одной из таблиц |
| 1:М | Группа — Студенты | Внешний ключ в таблице со стороны «многие» |
| М:М | Студенты — Предметы | Отдельная связующая таблица с двумя внешними ключами |
-- разрешение М:М
CREATE TABLE Успеваемость (
student_id INT NOT NULL REFERENCES Студенты(id) ON DELETE CASCADE,
predmet_id INT NOT NULL REFERENCES Предметы(id),
ball SMALLINT CHECK (ball BETWEEN 2 AND 5),
data_sdachi DATE NOT NULL DEFAULT CURRENT_DATE,
PRIMARY KEY (student_id, predmet_id)
);
Обязательность участия
Кроме мощности указывают, обязательна ли связь. В нотации «воронья лапка» это две отметки у конца линии: кружок — необязательно (может не быть), палочка — обязательно (ровно один). Отсюда читается «студент обязательно принадлежит одной группе, в группе может быть много студентов».
Порядок построения
- Выпишите из описания предметной области все существительные — кандидаты в сущности.
- Отбросьте те, что являются лишь свойствами (например, «телефон» — атрибут, а не сущность).
- Определите атрибуты и первичные ключи, лучше суррогатные (id), если естественный ключ громоздкий.
- Проведите связи, подпишите их глаголами и проставьте мощность.
- Разрешите все М:М связующими сущностями.
- Проверьте, что каждая сущность достижима и нет «висящих» таблиц без связей.
Ошибки, которые ловят на защите
| Ошибка | Как исправить |
|---|---|
| Связь М:М оставлена как есть | Ввести связующую сущность с составным ключом |
| Атрибут-список («телефоны» через запятую) | Вынести в отдельную сущность 1:М |
| Нет ключей на диаграмме | Подчеркнуть/пометить первичные ключи |
| ER-диаграмма расходится со схемой таблиц | Привести в соответствие — проверяют именно это |
| Сущность-справочник продублирована текстом | Заменить текстовые поля внешними ключами на справочник |
Рисовать удобно в dbdiagram.io, draw.io или ER-редакторе вашей СУБД (например, MySQL Workbench умеет строить диаграмму по готовой базе и наоборот — генерировать SQL по диаграмме).
Частые вопросы
Чем ER-модель отличается от даталогической?
ER — независима от СУБД и описывает предметную область. Даталогическая модель — это уже конкретные таблицы, типы данных и ограничения выбранной СУБД.
Сколько сущностей нужно для курсовой?
Обычно достаточно 6-10 связанных таблиц, включая справочники и хотя бы одну связь М:М. Меньше — покажется слишком просто, больше — сложно защищать.