JavaRush /Курсы /SQL SELF /Создание ERD (диаграммы сущностей и связей)

Создание ERD (диаграммы сущностей и связей)

SQL SELF
26 уровень , 1 лекция
Открыта

ERD — это сокращение от Entity-Relationship Diagram (диаграмма сущностей и связей). Это визуальное представление структуры вашей базы данных, которое показывает, как сущности (таблицы) связаны друг с другом.

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

ERD состоит из:

  • Сущностей: это объекты или таблицы, такие как "Студенты", "Курсы", "Преподаватели".
  • Атрибутов: это колонки в таблицах, такие как ID, Имя, Фамилия.
  • Связей: это линии между таблицами, показывающие отношения, например, один студент записан на многие курсы.

С помощью ERD вы можете не только спланировать базу данных, но и показать коллегам или руководству, как она устроена. Это мощный инструмент для любого разработчика!

Основные элементы ERD

  1. Сущности

Сущность — это база данных в миниатюре. Каждая сущность соответствует реальному объекту или понятию, которым вы хотите управлять в своей системе. Например:

  • Таблица "Студенты".
  • Таблица "Курсы".
  • Таблица "Выдачи" (в библиотечной системе).

Пример:


+---------------+
| Студенты      |
+---------------+
| ID            |
| Имя           |
| Фамилия       |
| Дата рождения |
+---------------+
  1. Атрибуты Атрибуты — это отдельные свойства или характеристики сущности. Они отображаются как колонки в таблице базы данных. Например:
  • Для таблицы "Студенты" это могут быть ID, Имя, Фамилия.
  • Для таблицы "Курсы" это ID Курса, Название курса.

В ERD они чаще всего записываются внутри прямоугольника, обозначающего сущность.

Связи между сущностями

Связь показывает, как две сущности взаимодействуют между собой. Напомню основные типы связей:

  • Один-к-одному (1:1): например, каждый студент имеет одно уникальное удостоверение.
  • Один-ко-многим (1:N): например, один преподаватель может вести несколько курсов.
  • Многие-ко-многим (M:N): например, несколько студентов записаны на несколько курсов.

Пример связи "Один-ко-многим":

Студенты (1) <----- записан -----> (N) Курсы

Для реализации связей в базе данных мы обычно используем внешние ключи.

Как построить ERD?

Давайте рассмотрим процесс построения ERD шаг за шагом, а также пример построения для библиотеки.

Шаг 1: Определите сущности

Ваша задача — разбить систему на основные объекты. Например, для системы библиотеки это:

  • "Книги".
  • "Читатели".
  • "Выдачи".

Пример:

+-------------+        +--------------+         +------------+
| Книги       |        | Читатели     |         | Выдачи     |
+-------------+        +--------------+         +------------+
| ID          |        | ID           |         | ID         |
| Название    |        | Имя          |         | Читатель   |
| Автор       |        | Фамилия      |         | Книга      |
| ISBN        |        | Дата Рождения|         | Дата выдачи|
+-------------+        +--------------+         +------------+

Шаг 2: Добавьте атрибуты

Каждая сущность должна иметь ключевые атрибуты. Например:

  • Таблица "Книги" должна включать ID (первичный ключ), Название, Автор, ISBN.
  • Таблица "Читатели" — ID, Имя, Фамилия.

Шаг 3: Установите связи

Теперь добавьте связи между сущностями:

  • "Выдачи" связаны с "Книгами" (одна книга может быть выдана несколько раз).
  • "Выдачи" связаны с "Читателями" (один читатель может брать несколько книг).

Шаг 4: Визуализируйте

Используйте любой инструмент для создания диаграмм, например:

  • draw.io
  • dbdiagram.io
  • Lucidchart
  • Microsoft Visio

Диаграмма будет выглядеть так:

[Читатели] ----(1:N)---- [Выдачи] ----(N:1)---- [Книги]

Для каждой связи добавьте тип данных и пояснение, например:

  • ID Читателя в "Выдачах" связаны с первичным ключом таблицы "Читатели".

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

Для интернет-магазина потребуется логическая структура, включающая:

  1. Пользователи (зарегистрированные клиенты).
  2. Продукты (товары).
  3. Заказы.

Шаг 1: Сущности

  • Пользователи: ID Пользователя, Имя, Email.
  • Продукты: ID Продукта, Название, Цена.
  • Заказы: ID Заказа, ID Пользователя, Дата заказа.

Шаг 2: Установление связей

  • Один пользователь может сделать несколько заказов (1:N).
  • Один заказ может включать несколько продуктов (M:N).

Полная диаграмма ERD:

[Пользователи] ----(1:N)---- [Заказы] ----(N:M)---- [Продукты]

Для реализации связи многие-ко-многим добавьте промежуточную таблицу:

  • Состав заказов: ID Заказа, ID Продукта, Количество.

Советы по созданию ERD

  • Сначала подумайте, что вы хотите увидеть в своей базе данных. Всё начинается с понимания вашей предметной области.

  • Включите только те атрибуты и сущности, которые действительно важны. Избыточная детализация может запутать.

  • Убедитесь, что все связи логически обоснованы. Если связь кажется странной, пересмотрите её.

  • Используйте инструменты, которые помогают визуализировать диаграммы. Это сэкономит время и силы.

2
Задача
SQL SELF, 26 уровень, 1 лекция
Недоступна
Приведение таблицы ко второй нормальной форме (2NF)
Приведение таблицы ко второй нормальной форме (2NF)
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 5
18 сентября 2025
Душненький валидатор однако...
Евгений Уровень 49 Expert
26 августа 2025
Эта таблица нарушает 2NF, так как информация о клиенте повторяется. Это довольно спорно, здесь нарушается 3NF, а не 2NF. Потому что здесь присутствует транзитивная зависимость, а составной ключ отсутствует. Вообще, во многих источниках определения немного отличаются. Но если говорить про то определение, которое приводилось на курсе, то 2NF имеет отношение только к таблицам с составным первичным ключом.
Евгений Уровень 49 Expert
26 августа 2025
Рекомендую использовать. Простая и удобная программка в онлайне, но учитывайте, что она довольно ограниченная, хотя ERD в ней построить можно 🙃
Slevin Уровень 5
18 сентября 2025
.... А где...?
Евгений Уровень 49 Expert
18 сентября 2025
Почистили ссылку походу. drawio, запускается прямо в браузере.
Slevin Уровень 5
19 сентября 2025
Они же сами его рекомендуют дальше в лекциях! Зачем удалили...
Ra Уровень 35 Student
31 июля 2025
Один заказ может включать несколько продуктов (M:N) - почему M:N а не 1:N?
Евгений Уровень 49 Expert
26 августа 2025
Не совсем корректно написали. Да, один заказ может включать разные продукты, но и один и тот же продукт может присутствовать в разных заказах.