Нотации: Chen, Crow’s Foot, UML — сравнение
ER-модель — это сущности, атрибуты и связи. Но нарисовать их на диаграмме можно по-разному: какой фигурой обозначить сущность, как показать кардинальность, где разместить атрибуты. Эти соглашения о визуальном языке называются нотациями. Существуют три основные нотации ER-диаграмм — Chen, Crow’s Foot и UML class diagram, — и важно уметь читать любую из них, потому что в реальных проектах встречаются все три.
Этот урок — про то, как устроена каждая нотация, в чём их сильные и слабые стороны, и как выбрать подходящую под задачу. Содержание модели от нотации не зависит — одну и ту же модель можно нарисовать в любой из трёх. Различается только форма записи.
Chen notation
Нотация Чена (Chen notation) — историческая первая нотация, предложенная Питером Ченом в 1976 году вместе с самой идеей ER-моделирования. Она самая «многословная» и наглядная.
Как обозначаются элементы:
- Сущность — прямоугольник;
- Атрибут — овал, соединённый линией с сущностью; каждый атрибут — отдельный овал;
- Связь — ромб между сущностями;
- Кардинальность — подписи на линиях: «1», «N», «M».
Особенность Chen — атрибуты рисуются как отдельные овалы вокруг сущности. Это позволяет наглядно показывать виды атрибутов из прошлого урока: составной атрибут — овал с подовалами, многозначный — двойной овал, вычисляемый — пунктирный овал. Ни одна другая нотация не показывает типы атрибутов так выразительно.
Платой за наглядность является место. Сущность с десятью атрибутами в Chen — это прямоугольник, окружённый десятью овалами на линиях. Большая модель в нотации Chen занимает огромную площадь и быстро становится нечитаемой.
Вывод по Chen: выразительная, отлично показывает типы атрибутов, хороша для обучения и раннего концептуального проектирования небольших моделей. Плохо масштабируется — для больших схем непрактична. В реальной индустрии сегодня используется редко, в основном в учебных материалах.
Crow’s Foot notation
Нотация Crow’s Foot («воронья лапка»), также называемая IE-нотацией (Information Engineering), — самый распространённый промышленный стандарт. Компактна и заточена под реальные базы данных.
Как обозначаются элементы:
- Сущность — прямоугольник, обычно разделённый на части: имя сверху, список атрибутов внутри (атрибуты — строки текста, а не овалы);
- Связь — линия между сущностями;
- Кардинальность — символы на концах линии.
Главная особенность — символы кардинальности на концах линий. Их называют «вороньей лапкой» по виду символа «многие». Каждый конец линии несёт два символа: внутренний (ближе к сущности) — про минимум, внешний — про максимум.
- «Воронья лапка» (три расходящиеся линии) — много (максимум: многие);
- одна поперечная чёрточка — один (максимум: один);
- кружок (окружность) — ноль (минимум: необязательно);
- ещё одна чёрточка у сущности — один (минимум: обязательно).
Комбинации читаются так: чёрточка + лапка — «один или много»; кружок + лапка — «ноль или много»; чёрточка + чёрточка — «ровно один»; кружок + чёрточка — «ноль или один».
Преимущества Crow’s Foot: компактность (атрибуты строками внутри прямоугольника, а не овалами), очень точное выражение кардинальности и оптциональности через символы на концах, хорошая масштабируемость на большие схемы. Именно поэтому это стандарт большинства инструментов моделирования (dbdiagram.io, ER/Studio и другие) и стандарт индустрии.
Слабая сторона: Crow’s Foot не показывает типы атрибутов так наглядно, как Chen, и слабее в выражении наследования (supertype/subtype) — для иерархий приходится использовать дополнительные соглашения.
Если вы изучаете только одну нотацию досконально — изучайте Crow’s Foot. Это де-факто стандарт индустрии: именно её вы встретите в большинстве рабочих проектов и инструментов. Курс по умолчанию использует идею Crow’s Foot при разговоре о кардинальности. Главный навык — мгновенно читать символы на концах линии: лапка означает «многие», чёрточка — «один», кружок — «ноль/необязательно».
UML class diagram
Диаграмма классов UML (UML class diagram) — нотация из языка UML (Unified Modeling Language), который изначально создан для проектирования объектно-ориентированных программ, но применяется и для моделирования данных.
Как обозначаются элементы:
- Сущность — класс: прямоугольник из трёх секций (имя, атрибуты, методы; для данных секция методов обычно пустует);
- Связь — линия (ассоциация) между классами;
- Кардинальность — числовая кратность (multiplicity) на концах линий:
1,0..1,1..*,*,0..*.
UML выражает кардинальность числами, а не символами. 1..* означает «один или много», 0..1 — «ноль или один», * — «любое число». Это точнее символов: можно задать и конкретные диапазоны, например 1..5.
Сильная сторона UML — богатство в выражении сложных отношений. UML напрямую поддерживает наследование (то самое supertype/subtype из прошлого урока), а также агрегацию и композицию — особые виды связи «часть-целое» разной силы. Для моделей со сложными иерархиями UML выразительнее Crow’s Foot.
Слабая сторона UML для моделирования данных — он создан для ООП, и часть его возможностей (методы, видимость атрибутов) к данным неприменима. Для чистого моделирования баз данных UML иногда избыточен. Его выбирают, когда модель данных — часть общего проектирования системы в UML, и хочется единого языка.
Сравнение трёх нотаций
| Аспект | Chen | Crow’s Foot | UML class diagram |
|---|---|---|---|
| Сущность | прямоугольник | прямоугольник с атрибутами-строками | класс из трёх секций |
| Атрибуты | отдельные овалы | строки внутри прямоугольника | строки в секции класса |
| Связь | ромб | линия | линия-ассоциация |
| Кардинальность | подписи 1, N, M | символы на концах (лапка, чёрточка, кружок) | числовая кратность (1, 0..1, 1..*) |
| Компактность | низкая | высокая | средняя |
| Типы атрибутов | показывает наглядно | не показывает | частично |
| Наследование | слабо | слабо | сильно |
| Масштабируемость | плохая | хорошая | хорошая |
| Где применяется | обучение, ранний дизайн | индустриальный стандарт | проектирование в UML |
Как выбрать нотацию
Выбор нотации зависит от задачи и аудитории:
- Обучение, объяснение базовых понятий, ранний концептуальный набросок небольшой модели — Chen. Её наглядность (особенно показ типов атрибутов) ценна, когда модель маленькая и важно объяснить.
- Проектирование реальной базы данных, рабочая модель, общение в команде — Crow’s Foot. Компактность, точность кардинальности и масштабируемость делают её рабочей лошадкой индустрии.
- Модель данных как часть большого проекта системы, где уже используется UML; модели со сложными иерархиями наследования — UML class diagram. Единый язык с остальным проектированием и сильная поддержка наследования.
Нотация — это форма, а не содержание. Одну и ту же модель (те же сущности, связи, кардинальности) можно записать во всех трёх нотациях, и это будет одна модель. Поэтому не зацикливайтесь на нотации: важно правильно спроектировать модель, а нарисовать её можно в любой. Главный практический навык — уметь ПРОЧИТАТЬ любую из трёх, потому что в чужих проектах и документации вам встретятся все. Рисовать достаточно уметь в одной — обычно Crow’s Foot.
Попробуй сам
Возьмите простую модель из двух сущностей со связью один-ко-многим — например, Автор и Книга (один автор написал много книг, у каждой книги один автор; у Автора атрибуты id, имя; у Книги id, название, год). Нарисуйте эту модель от руки трижды — в каждой из трёх нотаций. В Chen используйте прямоугольники, ромб для связи и овалы для атрибутов, подпишите 1 и N. В Crow’s Foot — прямоугольники с атрибутами внутри, линию со символами «лапка» и «чёрточка» на концах. В UML — классы из секций, линию с кратностью 1 и 1..*. Сравните три рисунка: какой компактнее, какой нагляднее, какой вам было проще рисовать. Затем откройте dbdiagram.io и постройте ту же модель там — обратите внимание, какую нотацию использует инструмент.