Мощность связи
Сущность может быть связана с любым количеством других сущностей — и как родитель, и как потомок. Количество связей не ограничено. Характер отношения уточняется через мощность. Это понятие сложное, но крайне важное при проектировании базы данных.
Задача мощности связи — определить, с каким количеством экземпляров дочерней сущности может быть связан один экземпляр родительской. В примере с людьми и компьютерными играми для определения типа связи «многие ко многим» достаточно было выяснить, может ли один человек играть во многие игры. Мощность же требует уточнения конкретной цифры, а точнее — выбора между тремя альтернативами: 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. Все экземпляры одной категории имеют одинаковое значение дискриминатора, а экземпляры других категорий — иное. Критерий отнесения к категории должен быть однозначным, не допускающим двоякого толкования.
Краткие итоги
Углублённое понимание связей в модели данных требует перехода от общего типа отношения к точным количественным ограничениям. Мощность связи переводит интуитивные представления о кратности в строгую формальную систему, где допустимы всего четыре сценария, каждый из которых имеет чёткие семантику и нотацию. Самый распространённый — «ноль, один или много» — служит фоном, на котором остальные варианты воспринимаются как осознанные исключения, обусловленные жёсткими бизнес-правилами. Подобная детализация становится фундаментом для корректной реализации ограничений целостности в физической схеме: нельзя пропустить запись там, где мощность требует обязательного наличия, и невозможно создать дублирующую там, где разрешён только один экземпляр.
Категоризация выводит проектирование на уровень таксономии данных. Она позволяет моделировать иерархию «общее-частное», не разрывая при этом единство сущности. Выбор между полным и неполным разделением прямо отражает полноту знаний о предметной области: полная категоризация фиксирует исчерпывающий перечень подтипов, тогда как неполная сознательно оставляет место для ещё не классифицированных или нерелевантных текущим задачам экземпляров. Наследование первичного ключа дочерними категориями гарантирует идентичность объектов на всех уровнях иерархии, а однозначность дискриминатора исключает неопределённость при отнесении записи к конкретному подмножеству.
Практическая ценность рассмотренных правил категоризации состоит в создании расширяемых и непротиворечивых схем. Возможность строить цепочки вторичных категорий позволяет пошагово уточнять классификацию, не разрушая ранее созданные структуры. Жёсткое требование единственности родителя в рамках одного отношения предотвращает коллизии множественного наследования классификации, а свобода параллельных категоризаций по разным признакам обеспечивает гибкость анализа данных, не жертвуя строгостью модели.
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. В чём практическая опасность использования нечёткого критерия для отнесения записей к категориям?