Конспект лекции: Анализ предметной области: связи и правила
Учебная дисциплина: ОП.08 Основы проектирования баз данных Раздел программы (§2.2 с.7): Тема 1. Основные понятия баз данных Тематический фокус: Концептуальное проектирование связей, нотации Chen и Crow's Foot, типы кардинальности, классы принадлежности, бизнес-правила и семантические ограничения.
1. Понятие связи между сущностями (Relationship)
В реальном мире объекты не существуют изолированно. Студенты обучаются в учебных группах, врачи принимают пациентов, покупатели оформляют заказы на товары. Если сущности представляют собой существительные предметной области («Кто?» или «Что?»), то связи (отношения, Relationships) представляют собой глаголы, связывающие эти сущности («Обучается в», «Принимает», «Оформляет»).
Определение: Связь (Relationship) — это содержательная ассоциация между сущностями предметной области, которая отражает объективные бизнес-процессы и зависимости между их реальными экземплярами.
Связи обладают следующими фундаментальными характеристиками:
Степень связи (Degree): количество сущностей, участвующих в связи (унарная/рекурсивная, бинарная, тернарная).
Кардинальность (Cardinality, мощность отображения): максимальное количество экземпляров одной сущности, которое может ассоциироваться с одним экземпляром другой сущности.
Класс принадлежности (Модальность / Степень участия): минимальное количество экземпляров сущности в связи (0 — факультативное участие, 1 — обязательное участие).
2. Нотации моделирования связей: Chen и Crow's Foot
В теории и практике баз данных исторически закрепились две ведущие графические нотации моделирования данных (ERD — Entity-Relationship Diagrams):
Характеристика
Нотация Питера Чена (Chen Notation)
Нотация «Воронья лапка» (Crow's Foot / Barker)
Автор и появление
Питер Чен, 1976 г. (классическая академическая модель).
Гордон Эверест и Ричард Баркер, 1980-е гг. (индустриальный стандарт).
Отображение сущности
Прямоугольник с именем сущности.
Прямоугольник, разделенный на секции (имя, первичный ключ, атрибуты).
Отображение связи
Ромб (ромбический блок с глаголом связи), соединенный линиями.
Прямая соединительная линия между блоками без ромба.
Концептуальный анализ предметной области на ранних этапах.
Логическое и физическое проектирование реляционных баз данных (IDEF1X, CASE-средства).
Рис. 1. Адаптивная схема: Связь 1:M в нотации Chen (академическая) и Crow's Foot (индустриальная)
3. Типы кардинальности связей и примеры
3.1. Связь «Один к одному» (1:1 / One-to-One)
Одному экземпляру сущности $A$ соответствует максимум один экземпляр сущности $B$, и наоборот.
Пример:ВОДИТЕЛЬ и ВОДИТЕЛЬСКОЕ_УДОСТОВЕРЕНИЕ. В правовом поле РФ гражданин имеет строго одно действующее удостоверение, и удостоверение закреплено ровно за одним человеком.
Реализация в БД: Поле внешнего ключа в зависимой таблице объявляется со свойством UNIQUE NOT NULL.
3.2. Связь «Один ко многим» (1:M / One-to-Many)
Одному экземпляру сущности $A$ соответствует множество (от 0 до $M$) экземпляров сущности $B$, но каждому экземпляру сущности $B$ соответствует строго один экземпляр сущности $A$.
Пример:УЧЕБНАЯ_ГРУППА и СТУДЕНТ. В одной группе учатся 25 студентов. Каждый студент приписан строго к одной учебной группе.
Реализация в БД: Это базовая связь реляционных БД. В таблице «Многие» создается внешний ключ (Foreign Key), указывающий на первичный ключ (Primary Key) таблицы «Один».
3.3. Связь «Многие ко многим» (M:N / Many-to-Many)
Одному экземпляру сущности $A$ может соответствовать множество экземпляров сущности $B$, и одновременно одному экземпляру сущности $B$ может соответствовать множество экземпляров сущности $A$.
Пример:СТУДЕНТ и ДИСЦИПЛИНА. Студент изучает множество дисциплин (БД, ОС, Алгоритмы). Каждую дисциплину изучает множество студентов потока.
Критическое реляционное правило: Реляционные СУБД не поддерживают прямое физическое соединение таблиц со связью $M:N$. Такая связь обязательно декомпозируется на две связи $1:M$ через третью ассоциированную таблицу (Junction Table, связующую таблицу). В нашем примере — таблица УСПЕВАЕМОСТЬ (id_student, id_subject, ocenka).
Рис. 2. Декомпозиция связи M:N в две связи 1:M через связующую сущность
4. Класс принадлежности сущности (Mandatory vs Optional)
Кардинальность указывает верхний предел мощности связи ($1$ или $M$). Класс принадлежности (модальность) указывает нижний предел ($0$ или $1$) — может ли сущность существовать независимо.
Обязательное участие (Класс принадлежности 1): каждый экземпляр сущности непременно связан хотя бы с одним экземпляром другой сущности. Пример: ЗАКАЗ не может существовать без указания КЛИЕНТА.
Факультативное участие (Класс принадлежности 0): экземпляр сущности может временно или постоянно не участвовать в связи. Пример: новый ВРАЧ в поликлинике принят на работу, но еще не провел ни одного ПРИЕМА.
Золотое правило проектирования целостности: Если со стороны дочерней таблицы участие обязательно, соответствующее поле внешнего ключа обязано быть помечено NOT NULL. Если участие факультативно, во внешнем ключе разрешается значение NULL (например, у сотрудника может не быть назначенного руководителя при рекурсивной связи).
5. Рекурсивные (самоссылающиеся) связи
Рекурсивная связь (Recursive Relationship) возникает, когда сущность ассоциируется с самой собой. Экземпляры одной и той же сущности выступают в разных ролях.
Организационная иерархия: Таблица СОТРУДНИК. Поле id_rukovoditelya ссылается на id_sotrudnika той же самой таблицы. Кардинальность $1:M$ (один руководитель возглавляет многих подчиненных, подчиненный подчиняется одному руководителю; у генерального директора поле id_rukovoditelya IS NULL — факультативное участие).
Спецификация изделия (BOM — Bill of Materials): Таблица ДЕТАЛЬ. Сложная деталь состоит из простых деталей, а простая деталь может входить в состав разных узлов. Кардинальность $M:N$ (разрешается через связующую таблицу СОСТАВ_ИЗДЕЛИЯ).
6. Бизнес-правила (Business Rules) и семантические ограничения
Реляционная модель сама по себе обеспечивает первичную структурную целостность (первичные ключи, внешние ключи, уникальность). Однако реальный бизнес содержит множество предметных ограничений, которые невозможно выразить только типами данных.
Бизнес-правило (Business Rule) — это утверждение в терминах предметной области, определяющее политику предприятия, порядок бизнес-процессов или накладывающее строгие условия на значения и взаимосвязи данных.
Примеры семантических ограничений целостности:
Темпоральные (временные) ограничения: «Пациент не может быть записан на прием к двум разным врачам на одно и то же время». СУБД должна контролировать непересечение интервалов времени приема.
Балансовые и финансовые ограничения: «Сумма платежей по кредитному договору не может превышать сумму выданного кредита с учетом начисленных процентов».
Ограничения емкости и физических ресурсов: «Количество зарегистрированных пассажиров на рейс не может превышать количество мест в салоне назначенного самолета».
Статусные ограничения жизненного цикла: «Заказ нельзя перевести в статус "Выдан клиенту", минуя статус "Собран на складе"».
7. Вопросы для самопроверки
1. В чем главное концептуальное отличие нотации Chen от нотации Crow's Foot?
В нотации Чена связь всегда выделяется в самостоятельный ромбический блок с глаголом связи, а в Crow's Foot связь изображается соединительной линией с маркерами мощности на концах (вилка, черточки, кружок).
2. Почему связь M:N нельзя напрямую реализовать в реляционной СУБД?
В реляционной таблице поле должно быть атомарным (1-я нормальная форма). Нельзя в одну строку записать список внешних ключей. Поэтому связь M:N разбивается на две связи 1:M через промежуточную ассоциированную таблицу.
3. Что произойдет, если связь между Родителем и Ребенком сделать обязательной с обеих сторон?
Возникнет циклическая взаимная блокировка при вставке данных: запись родителя нельзя вставить без ID ребенка, а запись ребенка нельзя вставить без ID родителя. Поэтому со стороны родителя связь почти всегда факультативна.
4. Приведите пример рекурсивной связи в предметной области торгового предприятия.
Категории товаров в каталоге: категория «Ноутбуки» ссылается на родительскую категорию «Компьютерная техника» внутри той же таблицы категорий.