Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnik.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.62 Mб
Скачать

Подтипы сущностей

Некоторые сущности имеют необязательные наборы атрибутов; эти сущности час­то представляются с помощью подтипов (subtypes).

Рассмотрим, например, сущ­ность СТУДЕНТ с атрибутами Название факультета, Группа студента, Номер студента и ФИО. Предполо­жим, что студент может быть главой профбюро, специалистом в области программирования и что необходимо указывать некоторую дополнительную информацию, завися­щую от типа студента. Пусть эта информация имеет следующее содержание:

ГЛАВА_ПРОФБЮРО: Адрес профбюро, Телефон.

СПЕЦИАЛИСТ_ПРОГРАММИРОВАНИЯ: Табельный номер, Идентификационный номер.

Одна из возможностей - отнести все эти атрибуты к сущности СТУДЕНТ, как показано на рис. 3.10а. В этом случае, однако, некоторые атрибуты будут непри­менимы. Например, такой атрибут, как Адрес и Телефон профбюро, не имеет смысла для студента, как специалиста в области программирования, и таким образом, он не может иметь какого-либо значения.

В модели, более близкой к реальной ситуации, вместо этого будет определено два подтипа сущностей, как показано на рис. 3.10 б, в. Здесь сущности ГЛАВА_ПРОФБЮРО и СПЕЦИАЛИСТ_ПРОГРАММИРОВАНИЯ изображены как подтипы, сущности СТУДЕНТ. Последняя, в свою очередь, является надтипом (supertype) для сущностей ГЛАВА_ПРОФБЮРО и СПЕЦИАЛДИСТ_ПРОГРАММИРОВАНИЯ.

Символ Є рядом с линиями связи указывает, что сущности ГЛАВА_ПРОФБЮРО и СПЕЦИАЛДИСТ_ПРОГРАММИРОВАНИЯ являются подтипами сущности СТУДЕНТ. Каждый подтип должен принадлежать надтипу СТУДЕНТ. Кривая линия с цифрой 1 рядом показывает, что сущность СТУДЕНТ должна принадлежать к одному и только одно­му подтипу. Это означает, что подтипы являются взаимоисключающими и что требуется только один из них.

Например, если мы утверждаем, что студент, который является специалистом в области программирования, не может быть главой профбюро, и глава профбюро в свою очередь не может быть специалистом, тогда сущность СТУДЕНТ принадлежит только одному из подтипов (рис. 3.10б). А если предполагаем, что студент может быть одновременно главой профбюро и специалистом, в этом случае сущности ГЛАВА_ПРОФБЮРО и СПЕЦИАЛДИСТ_ПРОГРАММИРОВАНИЯ принадлежат сущности СТУДЕНТ (рис.3.10в).

Рис. 3.10. Подтипы сущностей: а – СТУДЕНТ без подтипов; б – СТУДЕНТ с подтипами; в – невзаимоисключающие подтипы с необязательным надтипом.

Сущности со связью типа «ЕСТЬ» должны иметь один и тот же идентифика­тор, поскольку они представляют различные аспекты одного и того экземпляра объекта (или сущности). В данном случае таким идентификатором является ФИО студента. Сравните эту ситуацию со связью типа «ИМЕЕТ», показанной на рис. 3.3, где сущности представляют различные характеристики одного и того же экземпляра сущности (как характеристики в роли главы профкома, так и в роли специалиста).

Разница между моделями на рис. 3.3 и 3.10 заключается в способе организации информации (или все атрибуты хранятся вместе, или разнесены по разным таблицам для уменьшения количества незаполненных атрибутов).

Иерархии генерализации имеют специальную характеристику, называемую наследованием (inheritance), которая означает, что подтипы классов сущностей наследуют атрибуты от надтипа.

Сущность СТУДЕНТ, к примеру, наследует атрибуты ФИО студента и КУРС от сущности СТУДЕНТ.

Причины, по которым подтипы используются в моделировании данных, отли­чаются от причин, по которым они используются в объектно-ориентированном программировании. Фактически, в модели данных они применяются с единствен­ной целью: избежать ситуаций, при которых некоторые атрибуты должны иметь нулевые значения.

Например, если все атрибуты сущности СПЕЦИАЛИСТ_ ПРОГРАММИРОВАНИЯ перенести в одну общую таблицу сущности СТУДЕНТ, то поля, которые характеризуют студента именно как специалиста, будут не заполнены для многих студентов. Для экономии дискового пространства выгодно информацию разнести, выделив отдельно надтип и подтип, и записывать только значащую информацию, исключая нули.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]