ErdDocs

Обозначения ER-диаграмм

В ER-диаграммах встречаются три семейства обозначений. Нотацию Мартина (IE), которую ещё называют «вороньей лапкой» (crow’s foot), рисуют инструменты для баз данных, нотацию Чена проходят в вузе, а UML – это диаграммы классов, применённые к данным. Во всех трёх таблица или сущность изображается прямоугольником, а связь – линией между прямоугольниками. Различаются они тем, как записывают кардинальность, то есть сколько строк с одной стороны соответствует строке с другой. Нотация Мартина рисует её на концах линии, поэтому каждую линию читают дважды, в сторону каждой таблицы. Каждый знак ниже показан с расшифровкой и нарисован ErdDocs в той же нотации, в какой он нарисует вашу собственную схему в инструменте ниже.

Что значат концы линии в нотации Мартина

В нотации Мартина всё решается на концах линии. На каждом конце стоит до двух знаков. Ближний к таблице означает максимум, дальний – минимум.

ЗнакНазваниеКак читаетсяПример
Ровно одинРовно одинЧерта + черта: минимум один, максимум одинзаказ принадлежит ровно одному покупателю
Ноль или одинНоль или одинКружок + черта: необязательно, не больше одногоу покупателя не больше одной бонусной карты
Один или многоОдин или многоЧерта + лапка: хотя бы одинв заказе есть хотя бы одна позиция
Ноль или многоНоль или многоКружок + лапка: сколько угодно, в том числе ни одногоу покупателя ноль или много заказов
Шпаргалка по нотации Мартина (crow’s foot) с четырьмя концами линии: ровно один (черта и черта), ноль или один (кружок и черта), один или много (черта и лапка), ноль или много (кружок и лапка)Шпаргалка по нотации Мартина (crow’s foot) с четырьмя концами линии: ровно один (черта и черта), ноль или один (кружок и черта), один или много (черта и лапка), ноль или много (кружок и лапка)
Те же четыре конца линии на одной карточке. Сохраните её или скачайте SVG в светлой или тёмной теме.

Как читать линию целиком

Линию связи читают дважды, в сторону каждой таблицы. Классический пример из магазина:

В сторону orders: у покупателя ноль или много заказов. В сторону customers: заказ принадлежит ровно одному покупателю.customersorders
В сторону orders: у покупателя ноль или много заказов. В сторону customers: заказ принадлежит ровно одному покупателю.

Все правила чтения, в том числе что значат знаки, когда схема известна только наполовину, собраны на странице о нотации crow’s foot (на английском). Какое сочетание выбрать, зависит от кардинальности.

Нотации Чена, Мартина и UML

ПонятиеЧенМартин (IE)UML
Сущность / таблицаПрямоугольникПрямоугольник со списком колонок внутриБлок класса
АтрибутОвал, соединённый с сущностьюСтрока внутри таблицыПоле в блоке класса
СвязьРомб между сущностямиЛиния со знаками кардинальности на концахЛиния ассоциации
КардинальностьБуквы 1, N, M у ромбаЧерта, кружок и лапка на концах линииКратности 1, 0..1, 1..*, *
Первичный ключПодчёркнутое имя атрибутаОтметка ключа в строке колонкиСтереотип или свойство

Простое правило. Пока схема только идея, подходит Чен. Если диаграмма хранится рядом с кодом приложения, подходит UML. Когда база данных уже есть, нужна нотация Мартина. Её ErdDocs и рисует по вставленной схеме.

Обозначение, которого нет в учебниках: пунктир

В реальных дампах часто нет внешних ключей. Приложения на Rails, Django и Laravel держат связи в коде, а в базе не объявлено ничего. Для этого случая ErdDocs добавляет своё обозначение. Сплошная линия – это связь, объявленная в базе. Пунктир – связь, выведенная из имени колонки, например user_id → users. Первую гарантирует ограничение в базе, а вторая – обоснованная догадка.

Пунктир значит, что в дампе нет FOREIGN KEY и линия взята из соглашения об именах.usersposts
Пунктир значит, что в дампе нет FOREIGN KEY и линия взята из соглашения об именах.

Обозначения на настоящей схеме

Вставьте свой SQL в инструмент ниже. Он найдёт внешние ключи и ограничения уникальности и по ним отметит сторону «много» на каждой линии.

Ваша схема

Частые вопросы

Что значат знаки нотации Мартина («вороньей лапки»)?

На каждом конце линии стоит до двух знаков. Ближний к таблице показывает максимум. Черта значит «не больше одного», трёхпалая лапка – «много». Дальний знак показывает минимум. Черта значит «хотя бы один», кружок – «может быть ноль». Кружок с лапкой читается как «ноль или много», две черты – как «ровно один».

Какую нотацию выбрать: Чена или Мартина?

Нотация Чена подходит для обучения и концептуального проектирования. В ней связь – отдельный элемент, ромб, и на лекции это удобно. Нотация Мартина подходит для реальных баз. В ней каждая таблица – прямоугольник с колонками внутри, так схема и выглядит на самом деле.

Как обозначается связь «многие ко многим»?

Лапкой на обоих концах. В физической схеме «многие ко многим» реализуется через промежуточную таблицу, например order_items между orders и products. Поэтому инструменты, которые рисуют реальные базы, показывают две связи «один ко многим», которые сходятся на этой таблице.

Почему инструменты для баз данных не рисуют ромбы и овалы Чена?

Потому что в физической базе то, что Чен рисует отдельно, превращается в таблицы и колонки. Овал атрибута становится строкой внутри прямоугольника таблицы. Ромб связи становится либо колонкой внешнего ключа, либо промежуточной таблицей. Если рисовать их отдельными фигурами, диаграмма вырастет вдвое, а ничего нового на ней не появится.

Ещё по теме