|
Программирование >> Реляционные базы данных
Рис. 3.12 Отношение Movie с новьлл отрибутом, прсдстовлвющим аудию, вподеющую фильмом 3-2.5 Представление многозначных связей К связи stars иа рис. 3 11 относится проблема, которой не возникало при рассмотрении связи ownedBy. Если типом связи является класс, она называется одиозиочной связью. Пример такой связи - ownedBy с типом Studio. Если же связь 2 В то время как ucni. фильмов в студиП никогда не выходит за пределы множества фильмов, выпущенных о-нюй студией, аналогичный подход к связи siers п ее о6р.тшсн11Ю starredin гораздо сложнее. Он ведет от фильм к занятым в нем KBHoancjAaM. от них ко иесм фильмам, л которых они играли, затем ко всем кииовсзлам. участвующим в этих фильмах... И так до тех пор, пока не перебираются Л0ЧТ1! вес кинотисзлы II ф.-!ьчм, внесенные п БД ТакоГ подход вызывает следующую проблему; объект Studio имеет свойство owns яв.пяюшесся обратно! связью с классом Movie. Д.ля представления этой связи каждый кортеж фильма должен содержать информапию о всех других фильмах, сделанных на данной студии. в принципе, информация о каждом из этих фильмов вк.1ючает в себя и л;1иные о студии, что вынуждает нас снова учитывать информацию о всех фильмах этой студии. Ясно, что такое pemcime слишком сложно, если только вообще возможю. Более подходящее решение можно найти, обратившись к тому, как на самом лелс объекты храня 1ся в компьютерной памяти. Если объект О, содержет ссылку на другой объект Од, это не означает, что О, копируется в О,.- просто в О, есть указатель , указывающий па О,. По н реляционной модели нет понятая указателя или чего-то близко соответ-ствуюи1его указателям. Эффект указателей приходится имитировать с помощью значений, предсгавляющих связанные объекты. Что в данном случае необходимо, так это множество атрибутов связанного класса, обрающее ключ. При наличии такого множества связь трактуется как ключевой(ыс) атрибут(ы) связанного класса. Пронллюст1)ируем этот метод на примере. Пример 3.6. Допустим, что name - ключ для класса Studio, определение которого было дано на рис. 2.6: Interface Studio { attribute string name; attribute string address; relationstiip Set<Movie> owns inverse Movie .; ownedBy; Изменим схему для отношения Movie, показанную на рмс. 3.1, включив в нее атрибрт. представляющнй студию, влааеющую фильмом. В качестве такого атрибута npoизвoлью выбирается studюName. Результат изменения схемы и некоторые простые кортежи показаны иа рис. 3.12. D имеет тип множества, примененный к классу, она считается многозначной. Например, stars - многозначная связь, так как имеет тип Set<star> Другими словами, любая связь класса А с классом В типа один-ко-многим или многие-ко-многим - это многозначная связь А с В. Для предеrasjicния многозначной связи нужна комбинация двух методов: 1. Однозначные связи - нужно найти ключ для представления каждого из связанных объектов. 2. Атрибуты со значением типа множества - нужно представить множество связанных объектов путем создания одного кортежа для каждого значения. При этом сохраняется избыточность, так как значения других атрибутов отношения будут повторяться по одному разу для каждого элемента множества. Проблема избыточности рассматривается в разделе 3.7, а пока что мы допускаем наличие этого дефекта. Пример 3.7. Пусть name - ключ для класса star. Тогда отношение, построенное для класса movie, можно расширить, добавив к нему атрибут, например starName, в кот-орый входит ими одной из кинозвезд, занятой в каждом фильме. В результате фильм будет представлен столькими кортежами, сколько в нем занято кинозвезд, внесенных в БД. Пример такого отношения показан на рис. 3.13. Заметим, что ему присуща избыточность: вся прочая информация о каждом фильме повторяется по одному разу лля каясдои занятой в нем кинозвезды. □
Рие. 3.13. Отношение Movie, содержащее информацию о кинозеездох Иногда класс имеет несколько многозначных связей с другими классами. В таком случае число кортежей, необходимых для представления единственного объекта класса, резко возрастает. Пусть R Ri,- многозначные связи класса С. Тогда отношение для С имеет атрибуты, соответствующие всем атрибутам С, атрибуты, соответствующие ключам всех однозначных связей класса С, И атрибуты, представляющие ключи целевых классов для Л R, Rir Пусть отдельный объект о класса С соединен с я, объектами связью Л, с 2 объектами связью R, и т.д. Тогда для каждого выбора объекта для /? объекта для /?2 и т.д. строится кортеж, соответствующий объекту о. В результате получается л, X 2 X... X кортежей для объекта в отношении, построенном для класса С. Пример 3.8. Допустим, что класс С имеет множество однозначных атрибутов X и две многозначные связи Л, и Rj с классами, ключевыми атрибутами кот-орых являются множества К и 2 соответственно. Рассмотрим объект с класса С, соединенный связью /?, с объектами, обладающими ключами > и j, и связью л2 с объектами, обладающими ключами г ti и zy Пусть также л- представляет значения объекта с в множестве атрибутов X. Тогда в отношении, построенном из класса С объект с представляется шестью кортежалиц (л у,.г,) (x.y,.Zi) (Л-, >> ?,) (л-, г ill (,v,.ij, гз) (х.У2.1) Другими! словами. к.пючи нз )комбшннруются с ключами из 2всеми возможными cпocoбaиl. П 3.2.6 Отсутствие ключей в объектно-ориентированной модели ODL значения всех атрибутов двух объектов одного класса могут полностью совпадать. Поэтому нужно быть готовым к таком проблеме, как, например, наличие двух кинозвезд с одинаковыми именами. В таком случае имя не является ключом для класса Star и его нельзя использовать дня представления кинозвезд в кортежах отношения Movie. Для получения ключа можно попыгаться добавить новые атрибуты кинозвезды, но, сколько бы новых атрибутов кинозвезды ни вносилось в БД, нет никакой гарантии, что когда-нибудь не появятся две кинозвезды с одним м тем же именем, одной и той же датой рождения, одним и тем же адресом и тд. Единственное решение проблемы - ввести новый атрибут, предсташгяюш,ий идентификатор объекта дня отдельного объекта класса, соответствующего конкретному отношению. Например, если нет уверенности в том, что пате - ключ для кинозвезд, можно ввести номер сертификата для каждой кинозвезды, обозначающий ее членство в гильдии актеров Такие номера уникальны - за этим следит центральное руководство гильдии. При.мер 3.9. Если каждой звезде присваивается номер сертификата, который используется как ключ для представления кинозвезды в отношениях, тогда отношение Movie выглядит следующим образом:
В нем только один кортеж, а 12345 - номер сертификата Кэрри Фишер. Отношение Slar в этом случае содержит такой атрибут, как номер сертификата, и всю остальную информацию, включенную в определение ODL класса Star. Например:
Это схема отошсния и один из множества кортежей для Кэрри Фишер. □ 3.2.7 Представление связи и ее обращения В прингише, при пряном переводе нз ODL в реляционную модель каждая связь псревол1Тся дважды, по однолгу разу в обоих направлениях. Так в примере 3.7 каж.].1>1 кннозпечда фl;льil;. включена п кортеж, сопержаший название этого фильма. При прое.члфоианиц сттпошения аля iciacca Star связь starredin была бы представлено путе.м соз.пания алч каждог! кттозвезды стольких кортежей, в скольких филь-MLiv она !!1р:ыа с названием и голом [-.ыпуска каж-юго фильма в одном из этих кортегкег! (Bcno.viri-ne. что вместе title п year составляют к.пюч для фильмов).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |