Анализ предметной области: связи и правила

1. Что такое связь между сущностями?

Связь (Relationship) — это поименованная логическая или функциональная ассоциация между двумя или несколькими сущностями предметной области.

Если сущность — это имя существительное («Кто?», «Что?»), то связь — это глагол:

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

2. Графические нотации: Chen vs Crow's Foot

Нотация Питера Чена (1976)

  • Классическая академическая нотация.
  • Связь изображается в виде ромба.
  • Кардинальность подписывается символами: 1, M, N.
  • Фокус на концептуальном понимании предметной области.

Нотация Crow's Foot («Лапка»)

  • Индустриальный стандарт проектирования РБД.
  • Прямая соединительная линия без ромбов.
  • Мощность кодируется маркерами на концах линии: «вилка», черточки, кружок.
  • Наглядно совмещает кардинальность и обязательность участия.

3. Кардинальность связей: фундаментальные типы

Кардинальность (Cardinality) определяет максимальное число экземпляров одной сущности, ассоциированных с экземпляром другой сущности:

Кардинальность диктует способ преобразования концептуальной схемы в реляционные таблицы!

4. Связь «Один к одному» (1:1)

Каждому экземпляру первой сущности соответствует не более одного экземпляра второй.

Примеры из предметных областей:

Реализация в реляционной базе данных:

5. Связь «Один ко многим» (1:M)

Основной строительный блок реляционных баз данных. Вся реляционная модель держится на связях 1:M.

Примеры:

Правило миграции ключа:

Первичный ключ из таблицы на стороне «Один» мигрирует в качестве внешнего ключа (FK) в таблицу на стороне «Многие»! Никогда наоборот!

6. Связь «Многие ко многим» (M:N)

Примеры: Студенты и Дисциплины; Врачи и Пациенты; Товары и Заказы.

Критический закон РБД: Реляционные СУБД физически НЕ ПОДДЕРЖИВАЮТ связь M:N напрямую!

Механизм декомпозиции:

  1. Связь M:N разбивается на две связи 1:M.
  2. Создается промежуточная связующая таблица (Junction Table / Associative Entity).
  3. Таблица содержит внешние ключи обеих родительских таблиц и собственные атрибуты события (например, дату, оценку, количество).

7. Класс принадлежности сущностей

Определяет, обязан ли экземпляр сущности участвовать в связи:

Обязательное участие (Mandatory)

Экземпляр не может существовать без связанной записи.

  • Прием невозможен без Врача.
  • Студент обязан числиться в Группе.
  • В SQL: внешний ключ объявляется как NOT NULL.

Факультативное участие (Optional)

Экземпляр может существовать автономно.

  • Новый Врач может пока не иметь приемов.
  • Новая Группа на этапе набора не имеет студентов.
  • В SQL: внешний ключ может содержать значение NULL.

8. Рекурсивные (самоссылающиеся) связи

Рекурсивная связь — это связь, в которой сущность ассоциируется с самой собой в различных ролях.

Типовые сценарии в реальных базах:

9. Бизнес-правила (Business Rules)

Бизнес-правило — это строгое словесное утверждение, определяющее политику организации, порядок работы или структуру данных.

Бизнес-правила получают от заказчика при предпроектном обследовании:

Задача проектировщика БД — перевести бизнес-правила на язык ограничений базы данных!

10. Семантические ограничения целостности

В отличие от стандартной целостности (PK и FK), семантическая целостность отражает логику предметной области:

Реализуются в СУБД через ограничения CHECK, триггеры, хранимые процедуры и составные уникальные индексы.

11. Эталонный кейс: Библиотечная система

Сущности: Читатель, Книга, Выдача.

Связи и кардинальность

  • Читатель — Выдача: 1:M (факультативное со стороны Читателя).
  • Книга — Выдача: 1:M (факультативное со стороны Книги).
  • Читатель — Книга: концептуально M:N, декомпозировано через Выдачу.

Бизнес-правила и ограничения

  • Один экземпляр книги не может быть одновременно выдан двум читателям.
  • Читателю блокируется выдача новых книг при наличии книги со сроком просрочки более 14 дней.

12. Топ-3 ошибок студентов при моделировании

  1. «Ошибка мгновенного среза»: утверждение, что связь «Врач — Пациент» является 1:1, потому что в данный момент в кабинете один человек. (Нужно смотреть на весь период работы системы!).
  2. «Взаимный тупик обязательности»: попытка сделать участие обязательным с обеих сторон (нельзя внести врача без приема, а прием без врача).
  3. «Подмена бизнес-правил типами данных»: путаница между правилом предметной области и ограничением поля VARCHAR(50).

13. Инженерное резюме проектировщика

Грамотно спроектированные связи и ограничения предотвращают программные сбои и аномалии данных еще до написания первого SQL-запроса!
Little Bobby Tables (xkcd #327)
Тематический интернет-мем: «Exploits of a Mom» (культовый веб-комикс про «Little Bobby Tables», xkcd #327).
Автор: Randall Munroe. Первоисточник: https://xkcd.com/327/.
Лицензия: Creative Commons Attribution-NonCommercial 2.5 Generic (CC BY-NC 2.5).
Смысл мема: Когда правила валидации данных, семантические ограничения и экранирование ввода игнорируются, имя ребенка Robert'); DROP TABLE Students;-- уничтожает всю базу данных учебного заведения за один учебный год.
1 / 15