- •Новосибирский государственный университет экономики и управления
- •«Проектирование информационных систем» Раздел «Моделирование и проектирование данных»
- •Новосибирск 2009
- •1. Концепции er-модели
- •Примеры сущностей с физическим и концептуальным существованием
- •Способы представления сущностей на диаграмме
- •Представление атрибутов на диаграммах
- •1.3. Типы связей
- •Представление связей на диаграммах
- •1.4. Атрибуты связей
- •Date_View и Comments
- •2. Структурные ограничения
- •2.1. Показатель кардинальности
- •Связи «один к одному»
- •Связь „один ко многим"
- •Связи "многие ко многим"
- •2.2. Степень участия
- •3. Проблемы er-моделирования
- •3.1. Ловушки разветвления
- •3.2. Ловушки разрыва
- •4. Eer-модель
- •4.1. Суперклассы и подклассы типов сущностей
- •4.2. Наследование атрибутов
- •4.3. Специализация
- •4.4. Генерализация
- •4.5. Ограничения, накладываемые на процедуры специализации и генерализации
- •4.6. Категоризация
4.2. Наследование атрибутов
Как упоминалось выше, сущность в подклассе представляет тот же объект реального мира, что и ее суперкласс, и может обладать атрибутами, как связанными с суперклассом, так и специфическими для данного подкласса. Например, подкласс Sales_Personnel обладает всеми атрибутами суперкласса Staff (т.е. атрибутами Staff_No, Name, Address и DOB), а также специфическими атрибутами подкласса Sales Personnel (т.е. атрибутами Car_Allowance и Sales_Area).
Подкласс также является сущностью, а потому может иметь свои собственные подклассы. Сущность, ее подклассы, подклассы данных подклассов и так далее — все это называется иерархией типа (type hierarchy). Иерархии типов могут иметь разные названия: иерархия специализации (specialization hierarchy) — например, подкласс Manager является специализацией суперкласса Staff; иерархия генерализации (generalization hierarchy) — например, суперкласс Staff является генерализацией подкласса Manager; иерархия принадлежности (IS-A hierarchy) — например, менеджер (подкласс Manager) является сотрудником (принадлежит суперклассу Staff). В следующих разделах процессы специализации и генерализации описываются более подробно.
4.3. Специализация
Специализация: процесс увеличения различий между отдельными членами типа сущности за счет выделения их отличительных характеристик.
Специализация представляет собой нисходящий подход к определению множества суперклассов и связанных с ними подклассов. Множество подклассов определяется на основе некоторых отличительных характеристик отдельных сущностей суперкласса. При выявлении набора подклассов некоторого типа сущности выполняется также выделение специфических для каждого подкласса атрибутов (в случае необходимости), а также выделение любых связей, существующих между каждым подклассом и другими типами сущностей или подклассами (также в случае необходимости).
Рассмотрим, например, процедуру специализации, в которой идентифицируется множество подклассов суперкласса Staff, включая подклассы Manager, Secretary и Sales Personnel. Ее можно представить схематически — в виде EER-диаграммы, показанной на рис. 4.1. Обратите внимание, что суперкласс Staff и его подклассы, которые также являются типами сущностей, здесь обозначены прямоугольниками. Подклассы специализации соединяются линиями с кружком, который, в свою очередь, соединяется с суперклассом. Символ принадлежности множеству (с) на каждой линии, соединяющей подкласс с кружком, указывает направление связи "подкласс/суперкласс" (например. Manager с Staff). Символ "о" в кружке специализации обозначает накладываемое на связь "подкласс/суперкласс" ограничение, которое более подробно описывается ниже, в разделе 4.5.
Рис. 4.1. Специализация сущности Staff no подклассам на основе служебных ролей
Специфические для каждого подкласса атрибуты непосредственно соединяются линиями с прямоугольником, обозначающим этот подкласс. Например, на рис. 4.1 атрибуты Car_Allowance и Sales_Area связаны только с подклассом Sales_Personnel, a это означает, что они не могут быть применены к подклассу ManagerилиSecretary. Аналогичным образом выделены атрибуты, специфические для подклассов Manager (атрибут Bonus) и Secretary (атрибут Typing Speed).
Обратите внимание на то, что на ERR-диаграмме могут быть указаны связи, которые применимы только к отдельным подклассам. Например, подкласс Manager связан с сущностью Branch посредством связи Manages, в то время как сущность Staff связана с сущностью Branchпосредством связиIsAllocated(см. рис. 4.1).
Для одной и той же сущности можно выделить несколько независимых специализаций, основываясь на разных ее характеристиках. Например, в другой специализации сущности Staff могут быть выделены подклассы Full Time Permanent (Постоянный работник) и PartTime Temporary (Временный работник), отличающиеся типом установленного с данным работником соглашения о найме. Обе специализации типа сущностиStaffна подклассы служебных ролей и подклассы вида установленного соглашения о найме показаны на рис. 4.2.
Рис. 4.2. Специализации сущности Staff на подклассы служебных ролей и подклассы вида установленного соглашения о найме
На этом рисунке также показаны атрибуты, которые специфичны для подклассов Full_Time_Permanent (Salary Scale и Holiday Allowance) и Part Time Temporary (Hourly Rate). Символ d в кружке специализации представляет ограничение, накладываемое на связь "суперкласс/подкласс", речь о котором пойдет в разделе 4.5.
Подкласс также может иметь свои собственные подклассы, которые образуют иную иерархию специализаций. Как показано на рис. 4.3, сущность Sales_Trainee является подклассом двух подклассов Sales_Personnel и Trainee. Подкласс с несколькими суперклассами называется совместно используемым подклассом (shared subclass). Иначе говоря, член совместно используемого подкласса Sales Trainee одновременно должен быть членом подклассов Sales Personnel и Trainee. В результате атрибуты подкласса Sales Personnel (Sales_Area и Car_Allowance) и подклассаTrainee(Start_Date) наследуются подклассом Sales_Trainee, который также обладает своим собственным дополнительным атрибутом SalesJarget. Подобный процесс называется множественным наследованием (multiple inheritance).
Рис.4.3. Пример совместно используемого подкласса Sales_Trainee (множественное наследование)