Обозначения ER-диаграмм
В ER-диаграммах встречаются три семейства обозначений. Нотацию Мартина (IE), которую ещё называют «вороньей лапкой» (crow’s foot), рисуют инструменты для баз данных, нотацию Чена проходят в вузе, а UML – это диаграммы классов, применённые к данным. Во всех трёх таблица или сущность изображается прямоугольником, а связь – линией между прямоугольниками. Различаются они тем, как записывают кардинальность, то есть сколько строк с одной стороны соответствует строке с другой. Нотация Мартина рисует её на концах линии, поэтому каждую линию читают дважды, в сторону каждой таблицы. Каждый знак ниже показан с расшифровкой и нарисован ErdDocs в той же нотации, в какой он нарисует вашу собственную схему в инструменте ниже.
Что значат концы линии в нотации Мартина
В нотации Мартина всё решается на концах линии. На каждом конце стоит до двух знаков. Ближний к таблице означает максимум, дальний – минимум.
| Знак | Название | Как читается | Пример |
|---|---|---|---|
| Ровно один | Черта + черта: минимум один, максимум один | заказ принадлежит ровно одному покупателю | |
| Ноль или один | Кружок + черта: необязательно, не больше одного | у покупателя не больше одной бонусной карты | |
| Один или много | Черта + лапка: хотя бы один | в заказе есть хотя бы одна позиция | |
| Ноль или много | Кружок + лапка: сколько угодно, в том числе ни одного | у покупателя ноль или много заказов |
Как читать линию целиком
Линию связи читают дважды, в сторону каждой таблицы. Классический пример из магазина:
Все правила чтения, в том числе что значат знаки, когда схема известна только наполовину, собраны на странице о нотации crow’s foot (на английском). Какое сочетание выбрать, зависит от кардинальности.
Нотации Чена, Мартина и UML
| Понятие | Чен | Мартин (IE) | UML |
|---|---|---|---|
| Сущность / таблица | Прямоугольник | Прямоугольник со списком колонок внутри | Блок класса |
| Атрибут | Овал, соединённый с сущностью | Строка внутри таблицы | Поле в блоке класса |
| Связь | Ромб между сущностями | Линия со знаками кардинальности на концах | Линия ассоциации |
| Кардинальность | Буквы 1, N, M у ромба | Черта, кружок и лапка на концах линии | Кратности 1, 0..1, 1..*, * |
| Первичный ключ | Подчёркнутое имя атрибута | Отметка ключа в строке колонки | Стереотип или свойство |
Простое правило. Пока схема только идея, подходит Чен. Если диаграмма хранится рядом с кодом приложения, подходит UML. Когда база данных уже есть, нужна нотация Мартина. Её ErdDocs и рисует по вставленной схеме.
Обозначение, которого нет в учебниках: пунктир
В реальных дампах часто нет внешних ключей. Приложения на Rails, Django и Laravel держат связи в коде, а в базе не объявлено ничего. Для этого случая ErdDocs добавляет своё обозначение. Сплошная линия – это связь, объявленная в базе. Пунктир – связь, выведенная из имени колонки, например user_id → users. Первую гарантирует ограничение в базе, а вторая – обоснованная догадка.
Обозначения на настоящей схеме
Вставьте свой SQL в инструмент ниже. Он найдёт внешние ключи и ограничения уникальности и по ним отметит сторону «много» на каждой линии.
Частые вопросы
Что значат знаки нотации Мартина («вороньей лапки»)?
На каждом конце линии стоит до двух знаков. Ближний к таблице показывает максимум. Черта значит «не больше одного», трёхпалая лапка – «много». Дальний знак показывает минимум. Черта значит «хотя бы один», кружок – «может быть ноль». Кружок с лапкой читается как «ноль или много», две черты – как «ровно один».
Какую нотацию выбрать: Чена или Мартина?
Нотация Чена подходит для обучения и концептуального проектирования. В ней связь – отдельный элемент, ромб, и на лекции это удобно. Нотация Мартина подходит для реальных баз. В ней каждая таблица – прямоугольник с колонками внутри, так схема и выглядит на самом деле.
Как обозначается связь «многие ко многим»?
Лапкой на обоих концах. В физической схеме «многие ко многим» реализуется через промежуточную таблицу, например order_items между orders и products. Поэтому инструменты, которые рисуют реальные базы, показывают две связи «один ко многим», которые сходятся на этой таблице.
Почему инструменты для баз данных не рисуют ромбы и овалы Чена?
Потому что в физической базе то, что Чен рисует отдельно, превращается в таблицы и колонки. Овал атрибута становится строкой внутри прямоугольника таблицы. Ромб связи становится либо колонкой внешнего ключа, либо промежуточной таблицей. Если рисовать их отдельными фигурами, диаграмма вырастет вдвое, а ничего нового на ней не появится.
Ещё по теме
- ER-диаграмма: сущности, связи и момент, когда концептуальная модель превращается в таблицы.
- Нотация crow’s foot (Мартина): правила чтения с разобранными примерами, на английском.
- Кардинальность в ER-диаграммах: как настоящая база данных определяет, какие знаки получит линия.
- Примеры ER-диаграмм: четырнадцать готовых схем, у каждой есть диаграмма и словарь.