|
Программирование >> Реляционные базы данных
Используйте стрелки (показывающие, что конкретная связь имеет тип многие-к-одному ) для выражения следующих условий: a) Любой ребенок появляется в результате единственного акта рождения, и любое рождение - это рождение единственного ребенка. b) В дополнение к (а), любой ребенок имеет единственную мать. c) В дополнение к (а) и (Ь), для любого рождения существует единственный доктор. П Упрожиение 2.3.4. Предположим, что одна мать может родить несколько детей. Как отразить факт, что у каждого ребенка все же только одна мать, с помощью подходов, описанных в упражнениях 2.3.2 и 2.3.3? J Упражнение 2.3.5. Перелишите E/R-схемы упражнений 2.3.2 и 2.3.3 в ODL. Какие из условий этих упражнений отразить в ODL легко, а какие вообще невозможно? Можно ли изменить разработку, чтобы допускалось рождение од1юй матерью нескольких детей, как в упражнении 2.3.4? 2.4 Подюхассы Часто класс содержит объекты с особыми своисгвами, не связанными со всеми членами этого класса. В таком случае полезно разделить класс на подклассы, каждый из которых имеет собственные специальные атрибуты и/или связи в дополнение к тем, что присущи классу как единому цело.му. Сначала мы рассмотрим простой способ описания подклассов в ODL, а затем покажем, как иерархии класс-подкласс представляются в E/R-модели с помощью специальных связей под названием isa СА есть В выражает связь isa подкласса А с подклассом В). 2.4.1 Подклассы в ODL в рассматриваемой нами в качестве примера БД могут находиться муль фильмы, детективы, приключенческие фильмы, комедии и множество других типов фильмов. Для каждого из этих типов можно определить подкласс класса Movie, введенного в примере 2.1. По определению, класс С является подклассом другого класса Д если в описании за именем С следуют двоеточие и имя класса Ь. Пример 2.18. То, что Cartoon -это подкласс класса Movie и. следовательно. Movie -это cynepiiccc класса Cartoon, можно выразить простым ODL-описанием: 1) interface Cartoon: Movie { 2) relahonstiip Set-=Star> voices; Строка (I) показывает, что Cartoon подкласс класса Movre. Строка p) означает, что все объекты класса Cartoon имеют связь voices-людей, озвучи1аюших персонажей мультфильма. В описании не указано имя обращения этой связи, хотя технически это следовало бы сделать. За.четим, что связь voices имеет смысл не для всех фильмов, а только для мультфилыкюв, поэтому не вводится для класса Movie. □ Подкласс наследует вес свойства своего суперкласса (называемого также ктассо.м, из которого выводится подкласс) Другими словами, любые атр!1буг и связь суперклас са автоматически являются атрибутом и связью его подкласса. В примере 2.18 каждый объект класса мулыфнльмов имеет атрибуты title, year, length и fi тТуре. настедоваи-иые от Movie (вспомните рис. 2.6), и в дополнение к собственной связи voices наследует от Movie связи stars и ownedBy. Cartoon MurderMystery Cartoon-MurderMystery Рис. 2.22. Диогроммо множестеенного носледоеония В общем случае можно определить iciacc С как подкласс любого числа други.х классов, поставив двоеточие и перечислив имена всех этих классов после описания имени интерфейса С. Пример 2.19 иллюс-фирует именно такую форму связей. Ког.па к.ласс С наследует cBOicrsa нескольких классов, потенциально возможен конфликт имен своПста. Два или более суперкласса класса С могп иметь атрибут и.чи свойство с одним и тем же именем. !1ритом что типы этих свойств различны. 2.4.2 Множественное наследование в ODL Iviiacc ножет имет1> несколько подкл;1ссов. кажз.ый из которых наследует CBoficrca своего суперкласса, как было показано в предыдущем разделе. Более того, noaicnaccbi сами .мопт иметь подк-чассы, образуя иерархию классов, в которой каждый класс насле.дхет CBoiiCTna своих предшественников Класс может также иметь несколько суперк-пассов. Следующш ! пример иллюстрирует потенциальные возможности н пто6лсмы. связанные с такой ситуацией. Пример 2.19, Можно определить подкласс детективов класса Movie: 1) interface IVIiirderMyslery: Movie { 2) attribute string weapon; }. Bee детективы имеют атрибут, выражающий орудие убийства, а также четыре атрибута и две связи, которыми обладают все фильмы. Теперь рассмотрим фильм типа Кто лолсно обвинил кролика Роджера? , являю-Ш1ц1ся и мультфиль.чом, и детективом. Кроме обычных свойств класса Movie, такие фильмы должны иметь связь voices и атрибут weapon. Эту ситуацию можно описать, определив подкласс Carloon-MurderMystery, являющийся подклассом обоих linaccoB Cartoon и IvlurderJVIystery: interface Cartoon MurderlVlyslery: Cartoon, MurderMyslery {}; Итак объект мульт11пликационнО10 детектива определяется для выражения всех свойств обоих подклассов Cartoon и IMurderMystery. Никаких свойств или связей, принадлежащих только мультипликационным детективам, не вводится. Объекты класса Cartoon-MurderMystery наследуют атрибут weapon класса MurderMystery и связь voices класса Cartoon- Поскольку классы IVlurderMystery и Cartoon, в свою очередь, наследуют четыре атрибута и две связи класса Movie, класс Cartoon-MurderMystery наследует также и эти шесть свойств. Однако он не наследует двух копий всех этих HjecTH свойств, а наследует свойства из к.пасса Movie через любой из двух его непосредственных подклассов. Рис 2.22 иллюстрирует связи подкласс-суперкласс, в которых участвуюп- четыре названных класса. □ Movies Пример 2.20. Предположим, что класс Movie имеет подклассы Romance и Courtroom . каждый ш которых имеет атрибут ending. Но в классе itomance этот атрибут получает значения из набора {tiappy, sad}, а в классе Courtroom - из набора {guilty, notduilty}. Если затем вводится нопый подкласс Courtroom-Romance, суперк-чассами которого являются и Romance, и Courtroom, тип наследуемого атрибута в классе Courtroom-Romance остается неясным. D Хотя в ODL и ие определен особый синтаксис, реализации ODL предлагают по крзГшей мере один из следующих механизмов, подсказывающих пользователю, как действовать в случае конфликта, возникающего из множественного наследования, 1. Можно указать, какое из двух oпpeдeлetи1Й данного свойства относится к подклассу. Так. в примере 2.20 считаем, что для мелодрамы, замешенной на детективе, важен не верд;;кт, вынесенный судом, а как кончается фильм: хорошо или плохо. Тогда устанавливается, что класс Courtroom-Romance наследует атрибут ending из суперкласса Romance, а не из Courtroom. 2. Можно присвоить в классе С новое имя одному из двух наследуемых свойств с одним и тем же именем. Если в примере 2.20 Courtroom-Romance наследует атрибут ending из класса Romance, и этом классе можно определить дополшггельный атрибут verdict как результат замены имени атрибута ending, наследуемого из класса Courtroom, 3. В классе С можно зано1Ю определить некоторые свойства, определенные в его суперклассах. В примере 2.20 можно считать, что атрибут ending не должен наследоваться напрямую из любого суперкласса, а переоп)еделить этог атрибут как числовое значение, которое выражает степень удовлетво-рсиностн зрителей концом фильма, выявленную путем их опроса. Заметим, что даже в примере 2.19 есть конфликты: Cartoon-MurderMystery наследует из каждого непосредственного суперкласса (Cartoon и MurderMystery) все шесть свойств, в том числе title и stars, которые эти классы наследовали из класса Movie. Но поскольку определения title и других свойств идентичны в обоих суперклассах Cartoon и MurderMystery, выбирать используемое определение можно вообще любым способом. 2.4.3 Подклассы в диаграммах сущности-связи Напомним, что классы в ODL аналогичны множествам сущностей в E/R-модели. Пусть класс С -это подкласс класса D. Для выражения этого понятия в E/R-модели мы соединяем множества сущностей, соответствующие классам С и D. специальной связью isa. Множества сущностей Си D обозначаются обычными прямоугольниками. Атрибуты, И.ЧН связи, относящиеся только к сущностям С, присоединяются к прямоугольнику С, а атрибуты, применимые к С и Д размещаются у Д Связь isa обозначается линиями с треугольниками в середине. Вершина каждого треугольника указывает на суперкласс. В треугольнике можно при желании написать слово isa . Пример 2.21. На рис. 2.23 показаны множество сущностей Movies и два его подкласса; Cartoons и MurderMysteries. Эта структура подклассов аналогична структуре для ODL. показанной в примере 2.19. Треуголыщки, помеченные isa, указывают от Cartoons и MurderMysteries на суперкласс Movies. Связи Stars in и Owns,
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |