Основы моделирования и базы данных

Теоретические основы проектирования. Часть 4

Рассматривается, как уточнить связи между сущностями в модели данных, переходя от общего типа связи к строгим количественным ограничениям. Раскрывается понятие мощности связи: варианты «ноль, один или много», «один или много», «ноль или один» и точное число, с пояснением их обозначений и смысла. Затем разбирается категоризация — разделение сущности на непересекающиеся подмножества по заданному признаку. Описываются полная и неполная категоризация, дискриминатор, наследование первичного ключа, а также правила, гарантирующие однозначность отнесения экземпляров к категориям.

Основные мысли

В результате изучения лекции слушатель будет способен:
1. Объяснять различие между типом связи и мощностью связи в модели сущность-связь.
2. Классифицировать мощность связи по четырём основным вариантам: 0,1 или много; 1 или много; 0 или 1; точное число.
3. Определять подходящую мощность связи для заданной предметной ситуации.
4. Интерпретировать графические обозначения N, P, Z и числовых значений мощности на ER-диаграммах.
5. Описывать назначение и структуру категоризации сущностей, включая понятие дискриминатора.
6. Различать полную и неполную категоризацию, а также обосновывать выбор между ними.
7. Формулировать правила, которым должна удовлетворять корректная категоризация.
8. Применять изученные правила для проверки и построения фрагментов моделей с категоризованными сущностями.
Показывать лекцию целиком
Краткое изложение
Мощность связи
Сущность может быть связана с любым количеством других сущностей — и как родитель, и как потомок. Количество связей не ограничено. Характер отношения уточняется через мощность. Это понятие сложное, но крайне важное при проектировании базы данных.

Задача мощности связи — определить, с каким количеством экземпляров дочерней сущности может быть связан один экземпляр родительской. В примере с людьми и компьютерными играми для определения типа связи «многие ко многим» достаточно было выяснить, может ли один человек играть во многие игры. Мощность же требует уточнения конкретной цифры, а точнее — выбора между тремя альтернативами: 0, 1 и «сколько угодно».

Типы мощности связи

• 0, 1 или много (N). Самый частый случай. Человек может не играть ни в одну игру, играть в одну или в несколько. Связь обозначается латинской буквой N (от англ. many). Ввиду распространённости договорились: если мощность явно не указана, подразумевается именно N — 0, 1 или много.
• 1 или много (P). Ситуация, когда ноль исключён. Каждый экземпляр родительской сущности обязан появиться в дочерней хотя бы один раз. Пример: студент и экзамен. Даже при неявке студенту выставляется оценка «неявка». Не может существовать студента без результата экзамена. Связь обозначается латинской буквой P.
• 0 или 1 (Z). Экземпляр либо ни разу не встречается в дочерней сущности, либо встречается ровно один раз. Пример: человек и таблица смертности. Живой человек отсутствует в ней; появившись, он появляется только однажды. Обозначается латинской буквой Z (от zero or one).
• Точное число. Связь задаётся конкретной цифрой, например 5, 6, 17. Каждый экземпляр родителя появляется в дочерней сущности строго указанное число раз. Встречается крайне редко и характерно для очень специфичных предметных областей.

Категоризация сущностей
Категоризация — один из самых сложных примеров связи между таблицами. Она отражает разделение сущности на непересекающиеся подмножества — категории. Например, всех студентов можно разделить на бюджетников и платников. Это не новые сущности, а подмножества внутри исходной.

Одну и ту же сущность допустимо категоризовать по разным признакам (пол, гражданство, форма оплаты) неограниченное число раз.

Полная и неполная категоризация

• Полная категоризация. Категории вместе дают всё исходное множество, и каждый экземпляр попадает ровно в одну категорию. Например, разделение «бюджетник/платник» для студентов: третьего варианта нет.
• Неполная категоризация. Категории охватывают лишь часть исходного множества, оставшиеся экземпляры не попадают ни в одну из выделенных групп. Например, из всего множества студентов выделили категории «граждане России» и «граждане Казахстана». В сумме они не дают всех студентов, так как есть студенты из других стран, которых не включили ни в одну категорию.

На схеме категоризация обозначается дискриминатором — кружком с чертами. Одна черта под кружком означает неполную категоризацию, две черты — полную. Связи от родительской сущности к категориям всегда имеют мощность Z (0 или 1), потому что экземпляр либо не попадает в категорию, либо попадает ровно один раз.

Дочерние таблицы-категории наследуют первичный ключ родительской сущности, так как содержат те же самые объекты, только отфильтрованные по признаку. Например, табельный номер сотрудника остаётся первичным ключом и для постоянных сотрудников, и для совместителей.

Правила категоризации

1. Сущность-категория может иметь только одного родителя в рамках одного отношения категоризации. Не может быть так, что к одной категории сходятся две разные категоризации.
2. Сущность, являющаяся категорией в одном отношении, может сама выступать общей сущностью для другого отношения категоризации. Так, постоянных сотрудников можно дополнительно разделить по полу.
3. Одна сущность может участвовать в любом количестве отношений категоризации по разным признакам одновременно.
4. Атрибуты первичного ключа категории всегда совпадают с атрибутами первичного ключа общей сущности.
5. Все экземпляры одной категории имеют одинаковое значение дискриминатора, а экземпляры других категорий — иное. Критерий отнесения к категории должен быть однозначным, не допускающим двоякого толкования.

Краткие итоги

Углублённое понимание связей в модели данных требует перехода от общего типа отношения к точным количественным ограничениям. Мощность связи переводит интуитивные представления о кратности в строгую формальную систему, где допустимы всего четыре сценария, каждый из которых имеет чёткие семантику и нотацию. Самый распространённый — «ноль, один или много» — служит фоном, на котором остальные варианты воспринимаются как осознанные исключения, обусловленные жёсткими бизнес-правилами. Подобная детализация становится фундаментом для корректной реализации ограничений целостности в физической схеме: нельзя пропустить запись там, где мощность требует обязательного наличия, и невозможно создать дублирующую там, где разрешён только один экземпляр.

Категоризация выводит проектирование на уровень таксономии данных. Она позволяет моделировать иерархию «общее-частное», не разрывая при этом единство сущности. Выбор между полным и неполным разделением прямо отражает полноту знаний о предметной области: полная категоризация фиксирует исчерпывающий перечень подтипов, тогда как неполная сознательно оставляет место для ещё не классифицированных или нерелевантных текущим задачам экземпляров. Наследование первичного ключа дочерними категориями гарантирует идентичность объектов на всех уровнях иерархии, а однозначность дискриминатора исключает неопределённость при отнесении записи к конкретному подмножеству.

Практическая ценность рассмотренных правил категоризации состоит в создании расширяемых и непротиворечивых схем. Возможность строить цепочки вторичных категорий позволяет пошагово уточнять классификацию, не разрушая ранее созданные структуры. Жёсткое требование единственности родителя в рамках одного отношения предотвращает коллизии множественного наследования классификации, а свобода параллельных категоризаций по разным признакам обеспечивает гибкость анализа данных, не жертвуя строгостью модели.
Мощность связи
Сущность может быть связана с любым количеством других сущностей. Для точного проектирования необходимо задать мощность связи — количество экземпляров дочерней сущности, с которыми может быть связан один экземпляр родительской. В отличие от общего типа связи, мощность оперирует конкретными ограничениями: 0, 1 или «сколько угодно».

Выделяют четыре типа мощности:
• 0, 1 или много (N) — самый частый, допускает отсутствие, единственную или множественную связь. Обозначается латинской N, но часто опускается.
• 1 или много (P) — каждый экземпляр обязан присутствовать в дочерней сущности хотя бы раз. Обозначается P.
• 0 или 1 (Z) — связь либо отсутствует, либо существует ровно один экземпляр. Обозначается Z.
• Точное число — фиксированное количество связей, задаётся цифрой. Применяется редко.

Категоризация
Категоризация — разделение сущности на непересекающиеся подмножества (категории) по определённому признаку. Например, студенты делятся на бюджетников и платников.

Различают полную и неполную категоризацию:
Полная: сумма категорий даёт всё исходное множество (например, бюджетники и платники исчерпывают всех студентов).
Неполная: категории охватывают лишь часть множества, оставляя неучтённые экземпляры (например, выделены только граждане РФ и Казахстана, хотя есть студенты из других стран).

Графически категоризация обозначается дискриминатором — кружком с полосками. Одна полоска — неполная категоризация, две — полная. Связи между общей сущностью и категориями всегда имеют мощность Z (0 или 1), так как каждый экземпляр либо не попадает в категорию, либо попадает строго один раз.

Дочерние таблицы-категории наследуют первичный ключ общей сущности, поскольку описывают те же объекты. Правила категоризации:
1. Категория может иметь только одну родительскую сущность в рамках одного отношения.
2. Категория сама способна выступать общей сущностью для другой категоризации (например, постоянных сотрудников разделить по полу).
3. Одна сущность может участвовать в нескольких категоризациях по разным признакам одновременно.
4. Первичный ключ категории совпадает с ключом общей сущности.
5. Значение дискриминатора однозначно определяет принадлежность к категории; критерий разделения не должен допускать двусмысленности.

Выводы

1. Мощность связи уточняет, сколько раз экземпляр родительской сущности может быть связан с дочерней.
2. Тип мощности «0, 1 или много» (N) — самый частый и подразумевается по умолчанию, если не указано иное.
3. Мощность «1 или много» (P) требует обязательного присутствия каждого экземпляра в дочерней таблице хотя бы один раз.
4. Мощность «0 или 1» (Z) допускает максимум одну связь, возможно полное отсутствие.
5. Точное число как мощность связи задаёт строго определённое количество связей и встречается крайне редко.
6. Категоризация разделяет сущность на непересекающиеся подмножества по заданному признаку.
7. Полная категоризация покрывает всё множество экземпляров родительской сущности; неполная — только часть.
8. Дискриминатор — графический символ категоризации, черты под ним указывают на её полноту.
9. Связи между общей сущностью и её категориями всегда имеют мощность Z.
10. Категории наследуют первичный ключ общей сущности, сохраняя идентичность объектов.
11. Категория может иметь только одну родительскую сущность в рамках одного отношения категоризации.
12. Критерий разделения на категории должен быть однозначным, исключающим неопределённость.

Вопросы для самопроверки

1. Чем мощность связи отличается от простого указания типа связи «один ко многим»?
2. В какой ситуации следует выбрать мощность P, а не N?
3. Почему мощность Z часто используют для моделирования необязательных уникальных характеристик?
4. Как графически отличить полную категоризацию от неполной на ER-диаграмме?
5. Может ли один экземпляр родительской сущности одновременно принадлежать к двум разным категориям в рамках одного отношения категоризации?
6. Почему первичные ключи категорий должны совпадать с первичным ключом общей сущности?
7. Какое правило запрещает категории быть дочерней сразу для двух разных категоризаций?
8. Приведите пример предметной области, где уместна мощность связи в виде точного числа.
9. Чем отличается роль дискриминатора от обычного атрибута сущности?
10. Может ли сущность-категория сама быть разделена на подкатегории? Если да, приведите пример.
11. Как проверить, является ли категоризация корректной с точки зрения однозначности?
12. В чём практическая опасность использования нечёткого критерия для отнесения записей к категориям?
Вернуться к учебному плану