
Объединение отношений
Иногда отношения, получаемые в результате прямых преобразований из множеств сущностей или связей, нельзя считать наилучшей формой представления определенных элементов данных. Один из распространенных вариантов подобных ситуаций таков. Имеется множество сущностей £, соединенное посредством связи R типа "многие к одному" с множеством F в направлении от Е к F. Реляционные схемы каждого из отношений, полученных на основе множества Е и связи /?, будут содержать ключ множества Е. Кроме того, в схему отношения для множества Е будут введены также атрибуты Я, не относящиеся к ключевым, а в схему отношения для связи R — собственные атрибуты R и ключевые атрибуты множества F. Поскольку связь R относится к типу "многие к одному", все указанные атрибуты обладают значениями, которые однозначным образом определяются на основе ключа множества Е, и их можно объединить в одной схеме отношения, состоящей из:
всех атрибутов множества Е
ключевых атрибутов множества F;
собственных атрибутов связи R.
В кортеже для сущности е множества Е, которая не связана ни с одной сущностью множества F, компоненты, отвечающие атрибутам, названным в пп. 2, 3, получат некоторые "нулевые" (null) значения. О значениях null как о средстве представления ситуации, когда содержательное значение компонента кортежа неизвестно или утрачено, мы неформально уже говорили. Понятие "значение пи1l не является частью реляционной модели, но в языке SQL для его обозначения применяется специальное служебное слово, null, и мы будем пользоваться им по мере необходимости,* если в ходе изложения нам потребуется сослаться на "неопределенное" значение.
Пример 3.5. Возвращаясь к примеру "кинематографической" базы данных, отметим, что Owns — это связь типа "многие к одному", соединяющая множества сущностей Movies ("кинофильмы") и Studios ("киностудии") в направлении от Movies к Studios. Процесс "превращения" связи Owns в отношение рассматривался в примере 3.2, а преобразование множества сущностей Movies мы иллюстрировали в примере 3.1. Теперь мы вправе объединить полученные решения в общую реляционную схему отношения. Пример экземпляра такого отношения приведен на рис. 3.7.
title |
year |
length |
film Type |
studioName |
Star Wars |
1977 |
124 |
color |
Fox |
Mighty Ducks |
1991 |
104 |
color |
Disney |
Wayne * s World |
1992 |
95 |
color |
Paramount |
Рис. 3.7. Объединение отношений Movies и Owns
Стоит объединять отношения таким образом или нет — это вопрос, заслуживающий обсуждения. Сочетание всех атрибутов, зависящих от ключа множества сущностей Е, в едином отношении, в определенных случаях сулит дополнительные преимущества — даже тогда, когда существует сразу несколько связей типа "многие к одному", направленных от £ к другим множествам. Зачастую, например, гораздо проще получить ответ на запрос, касающийся данных, которые размещены в одном отношении, нежели обращаться за теми же данными одновременно к нескольким отношениям. Действительно, некоторые системы проектирования баз данных, основанные на ER-модели, выполняют подобное объединение автоматически.
С другой стороны, вероятно, не следует серьезно рассматривать возможность объединения отношения для множества Е с отношением для связи Я, которая охватывает £, но не является связью типа "многие к одному", направленной от £ к каким-либо другим множествам. Подобная операция довольно рискованна, поскольку нередко приводит к избыточности данных.
Пример 3.6. Чтобы продемонстрировать, чем отличается плохое решение от хорошего, рассмотрим объединение отношения, представленного на рис. 3.7, с отношением, полученным для связи Stars-in типа "многие ко многим". Результат может выглядеть так, как показано на рис. 3.8.
title |
year |
length |
film Type |
studioName |
starName |
Star Wars |
1977 |
124 |
color |
Fox |
Carrie Fisher |
Star Wars |
1977 |
124 |
color |
Fox |
Mark Hamill |
Star Wars |
1977 |
124 |
color |
Fox |
Harrison Ford |
Mighty Ducks |
1991 |
104 |
color |
Disney |
Emilio Estevez |
Wayne's World |
1992 |
95 |
color |
Paramount |
Dana Carvey |
Wayne's World |
1992 |
95 |
color |
Paramount |
Mike Meyers |
Рис. 3.8. Отношение Movies, включающее сведения об актерах
Преобразование слабых множеств сущностей
Для преобразования слабого множества сущностей в отношение необходимо принять во внимание следующее.
Отношение для слабого множества сущностей W как такового должно включать не только собственные атрибуты W, но и ключевые атрибуты всех других множеств, содействующих в формировании ключа множества W. Подобные "вспомогательные" множества на ER-диаграмме легко различимы, поскольку они соединяются с W посредством поддерживающих связей, которые обозначаются двойными ромбами.
В отношении для любой связи, с которой соединено слабое множество сущностей W, должны быть отражены все ключевые атрибуты множества W, в том числе и те, которые "получены" им от других множеств.
Поддерживающая связь R, соединяющая слабое множество сущностей W с другим множеством, помогающим в образовании ключа для W, однако, вовсе не нуждается в преобразовании. Причина заключается в том, что (как упоминалось в предыдущем разделе ) атрибуты отношения для связи R типа "многие к одному" либо уже присутствуют в отношении для множества W, либо (если речь идет о собственных атрибутах R) могут быть объединены со схемой отношения для множества W.
Разумеется, при формировании ключа слабого множества сущностей на основе дополнительных атрибутов надлежит позаботиться о том, чтобы не использовать одно
и то же имя атрибута дважды. При необходимости некоторые или все подобные атрибуты следует переименовать.
Пример 3.7. Рассмотрим слабое множество сущностей Crews ("объединения") ER-диаграммы рис. 2.2, которая воспроизведена на рис. 3.9. На основе диаграммы мы можем получить три отношения, схемы которых выглядят так:
Studios(name, addr) Crews(number, studioName) Unit-of(number, studioName, name)
Первое отношение, studios, создано непосредственно на основе одноименного множества сущностей, предназначенного для хранения информации о киностудиях. Второе отношение, Crews, соответствует слабому множеству сущностей Crews, представляющему творческие подразделения киностудий. Атрибутами Crews служат ключевые атрибуты множества Crews; если бы Crews обладало собственными неключевыми атрибутами, их также пришлось бы ввести в схему отношения Crews. Атрибут studioName отношения Crews суть атрибут пате множества сущностей Studios.
Рис. 3.9. Пример ER-диаграммы со слабым множеством сущностей
Третье отношение, Unit-of, соответствует связи Unit-of Связь в реляционной модели, как мы говорили выше, представляется отношением, в схему которого вводятся ключевые атрибуты множеств, соединяемых этой связью. В нашем случае схема отношения Unit-of включает атрибуты number и studioName, образующие ключ слабого множества сущностей Crews, и атрибут name — аналог атрибута пате множества Studios. Однако, поскольку связь Unit-of относится к типу "многие к одному1', атрибуты studioName и name фактически совпадают.
Предположим для примера, что "Disney-crew-#3" — это одно из творческих подразделений студии "Disney". Тогда во множестве данных для связи Unit-of должен существовать кортеж ("Disney-crew-#3", "Disney"), которому соответствует кортеж (3, Disney, Disney) отношения Unit-of. Обратите внимание, что компоненты этого кортежа, соответствующие атрибутам studioName и name, одинаковы, поэтому вполне допустимо осуществить их "слияние", что позволит получить более простую схему:
Unit-of(number, name).
Впрочем, теперь необходимость в использовании отношения Unit-of вовсе исключается, поскольку его схема полностью совпадает со схемой отношения Crews. □
Пример 3.8. Обратимся к слабому множеству сущностей Contracts ("контракты"), которое рассматривалось в примере 2.25 и было представлено на ER-диаграмме рис. 2.22. Та же диаграмма приведена и на рис. 3.10. Схема соответствующего отношения Contracts выглядит так:
Contracts(starName, studioName, title, year, salary).
Подмножества схем отношений
Изучая пример 3.7, вы могли бы сделать вывод о том, что коль скоро одно отношение (назовем его R) обладает набором атрибутов, являющимся подмножеством множества атрибутов другого отношения, S, отношение R может быть исключено из рассмотрения. В общем случае такое утверждение неверно. Отношение R способно содержать информацию, которой нет в S, поскольку дополнительные атрибуты S не позволяют перейти от кортежа R непосредственно к кортежу 5.
Пусть, например, налоговая служба пытается (:-). — Прим. перев.) создать отношение People (name, ss#) ("люди"), которое содержит информацию об именах потенциальных налогоплательщиков и их кодах полисов социального страхования (или каких-либо иных идентификационных кодах) и охватывает даже такую ситуацию, когда человек не имеет доходов и его налоги прежде еще не фиксировались. Службе, вероятно, потребуется и отношение Taxpayers (name, ss#, amount ("налогоплательщики"), в котором отражаются суммы налогов, выплаченные каждым человеком в текущем году. Как нетрудно убедиться, схема отношения People является подмножеством схемы отношения Taxpayers, но смысл в хранении идентификационных номеров лиц, не "замеченных" в уплате налогов, т.е. упомянутых в People, но отсутствующих в Taxpayers, для вас, тем не менее, должен быть очевиден.
На самом деле даже совершенно одинаковые наборы атрибутов отношений могут обладать различной семантикой, так что говорить о возможности замены одного отношения другим в общем случае нельзя. Примером могут служить отношения Stars (name, address) и Studios (name, address), представляющие объекты знакомой вам "кинематографической" базы данных. Хотя схемы выглядят одинаково, мы не имеем права превращать кортежи, описывающие информацию об актерах, в кортежи, содержащие данные о киностудиях, и наоборот.
С другой стороны, если два отношения создаются на основе одной и той же конструкции с участием слабого множества сущностей, то из них, в котором меньше атрибутов, не будет иметь самостоятельного значения. Причина заключается в том, что кортежи отношения, соответствующего поддерживающей связи множества, однозначно совпадают с кортежами отношения, отображающего слабое множество сущностей как таковое. Таким образом, отношение для поддерживающей связи может быть безболезненно отброшено.
Атрибуты starName и studioName — это переименованные ключевые атрибуты пате ("имя" или "название") множеств сущностей Stars ("актеры") и Studios ("киностудии") соответственно, title ("название") и year ("год производства") — ключевые атрибуты множества Movies ("кинофильмы"), a salary ("размер заработной платы") — собственный атрибут слабого множества сущностей Contracts. Создание отношений для поддерживающих связей Star-of, Studio-o/и Movie-of лишено смысла, поскольку их схемы представляют собой соответствующие подмножества схемы Contracts.
Между прочим, обратите внимание, что построенное отношение совершенно совпадает с тем, какое мы могли бы получить, если бы взяли за основу ER-диаграмму рис. 2.7. Напомним, что последняя трактует контракты как трехсторонние связи между "актерами", "кинофильмами" и "киностудиями", а атрибут salary относится непосредственно к связи Contracts.
Явление, проиллюстрированное в примерах 3.7 и 3.8 — связи, "поддерживающие" слабые множества сущностей, не нуждаются в создании соответствующих отношений, — носит универсальный характер. Ниже приведена новая версия правила преобразования в отношения тех множеств сущностей, которые относятся к категории слабых.
Рис. 3.10. Слабое множество сущностей Contracts
Если W является слабым множеством сущностей, построить отношение для IV, схема которого включает следующее:
все атрибуты множества W;
все атрибуты поддерживающих связей для множества W;
все ключевые атрибуты каждого из множеств сущностей Е, соединенных с множеством W посредством поддерживающих связей типа "многие к одному" в направлении от W к Е;
Не создавать отношения, соответствующие любым поддерживающим связям для слабого множества W.