
- •Новосибирская государственная академия экономики и управления
- •«Базы данных»
- •Преобразование объектных множеств и атрибутов
- •2. Преобразование моделей без ключей
- •3. Преобразование конкретизации и обобщений объектных множеств
- •4. Преобразование отношений
- •5. Преобразование составных объектных множеств
- •6. Преобразование рекурсивных отношений
- •7. Примеры преобразования: Консультационная Служба
- •8. Сопоставление концептуального и реляционного
5. Преобразование составных объектных множеств
Рассмотрим рис. 7, на котором представлена концептуальная модель отслеживания продаж фирмы International Product Distribution.
Рис. 7. Составное объектное множество
Отношение IS-SOLD-IN (ПРОДАН В), рассматриваемое как составное объектное множество, имеет атрибут AMOUNT. Мы преобразуем эту модель в соответствии с изложенными выше правилами. Поскольку отношение имеет мощность много – ко - многим, мы создадим три таблицы:
PRODUCT (PRODUCT-#)
COUNTRY (COUNTRY-NAME)
IS-SOLD-IN (PRODUCT-#, COUNTRY-NAME, AMOUNT)
Внешние ключи:
PRODUCT-# ссылается на PRODUCT
COUNTRY-NAME ссылается на COUNTRY
Мы назвали ключевые атрибуты PRODUCT-# (№-ТОВАРА) и COUNTRY-NAME (НАИМЕНОВАНИЕ-СТРАНЫ), чтобы отличать их от имен соответствующих таблиц.
Мы также поместили в таблицу IS-SOLD-IN атрибут AMOUNT, так как этот атрибут относится к составному объекту.
Если бы отношение IS-SOLD-IN имело другие относящиеся к нему атрибуты, то мы точно так же добавили бы их в таблицу.
Рис. 8. Вложенные составные объекты
Таблицы PRODUCT и COUNTRY в нашем примере имеют по одному атрибуту, но, разумеется, они также могут иметь дополнительные атрибуты. Если в базе данных не требуются больше никакие атрибуты этих таблиц, то их (таблицы) можно удалить из схемы; тогда схема будет состоять из одной таблицы IS-SOLD-IN.
На рис. 8 представлено отношение между составным объектом IS-SOLD-IN и объектом DATE (ДАТА). В этом случае атрибут QUANTITY (КОЛИЧЕСТВО) относится к товару, проданному в данной стране в данный день. Мы можем следующим образом преобразовать эту концептуальную модель в реляционную:
IS-SOLD-IN (PRODUCT-#, COUNTRY-NAME)
SOLD-ON (PRODUCT-#, COUNTRY-NAME, DATE, QUANTITY).
Рис. 9. Трехстороннее отношение
(Мы опустили состоящие из одного столбца таблицы, определяющие объектные множества.) Обратите внимание, однако, что вся информация, содержащаяся в таблице IS-SOLD-IN, содержится также в таблице SOLD-ON (ПРОДАН-ТОГДА-ТО). Таким образом, мы можем удалить из схемы таблицу IS-SOLD-IN. Если бы таблица IS-SOLD-IN имела неключевые атрибуты, ее нельзя было бы удалить. Удаляя таблицу IS-SOLD-IN из схемы, мы утверждаем, что модель на рис. 8 на самом деле представляет трехстороннее отношение с атрибутом. Таким образом, она эквивалентна модели рис. 9. Реляционная модель для рис. 9 будет выглядеть так:
SOLD-ON (PRODUCT-#, COUNTRY-NAME, DATE, QUANTITY)
6. Преобразование рекурсивных отношений
На рис. 10 представлена модель, содержащая рекурсивное отношение.
Рис. 10. Рекурсивное отношение
Важно понимать, что объектное множество WORKER, дважды встречающееся на диаграмме, — это одно и то же объектное множество в обоих случаях. Обе копии объектного множества WORKER имеют одни и те же атрибуты, хотя эти атрибуты показаны только для правой копии. В этой модели два экземпляра объектного множества WORKER использованы для удобства, чтобы показать отношение SUPERVISES, существующее между объектами WORKER и WORKER. Это отношение называется рекурсивным, поскольку оно связывает объектное множество с ним самим. В нашем случае отношение мощности один – ко - многим означает, что одному работнику подчиняются несколько других работников.
Как преобразовать объектное множество WORKER вместе с его атрибутами и отношением SUPERVISES в реляционную таблицу? Используя ранее изученный подход, мы придем к следующему результату:
WORKER (WORKER-ID, NAME, HOURLY-RATE, WORKER-ID)
Это решение некорректно, поскольку реляционная таблица WORKER имеет два атрибута с именем WORKER-ID; но два атрибута одной таблицы не могут иметь одинаковые имена. Решение состоит в том, чтобы изменить имя второго атрибута WORKER-ID на имя, соответствующее отношению SUPERVISES, которое оно представляет. Таким образом, мы меняем его на SUPV-ID.
WORKER (WORKER-ID, NAME, HOURLY-RATE, SUPV-ID) Внешний ключ: SUPV-ID ссылается на WORKER
Обратите внимание, что SUPV-ID — это рекурсивный внешний ключ, поскольку он ссылается на WORKER-ID, то есть ключ своей собственной таблицы. Таким образом, в результате преобразования рекурсивных отношений появляются рекурсивные внешние ключи. Образец данных таблицы WORKER представлен на рис. 11.
Итак, мы продемонстрировали способы преобразования конструкций концептуальной модели — объектов, атрибутов, отношений, конкретизации и составных объектов — в реляционные таблицы. После того как преобразование всех конкретных конструкций закончено, полученную реляционную схему необходимо пересмотреть на предмет избавления от избыточности. Любые избыточные таблицы (то есть таблицы, информация которых полностью содержится в других таблицах схемы) необходимо удалить из схемы.
Рис.11. Таблица с рекурсивным внешним ключом
Кроме того, обратите внимание, что все полученные в результате таблицы имеют четвертую нормальную форму. Причина этого в следующем.
Функциональные зависимости, определенные для реляционной модели, являются атрибутами отношения один – к - одному или один – ко - многим.
Описанный нами процесс преобразования каждой из этих конструкций в атрибуты реляционных таблиц гарантирует, что они будут зависеть только от ключевых атрибутов. Таким образом, каждая полученная реляционная таблица будет иметь ЗНФ. Многозначные атрибуты реляционной модели встречаются только в отношениях много – ко - многим. Поскольку они преобразуются в реляционные таблицы, обладающие составными ключами из ключевых атрибутов отдельных объектных множеств, то они гарантированно имеют 4НФ.