русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Преобразование ER-модели в реляционную модель


Дата добавления: 2015-07-09; просмотров: 2065; Нарушение авторских прав


Дано: ER-модель.

Получить: набор таблиц (отношений) следующего вида

Таблица (Ключ, Атрибут1, Атрибут2, …, АтрибутN)

Первичным ключом (primary key), как и в ER-модели, называется атрибут или группа атрибутов, однозначно идентифицирующих объект. Первичные ключи будем подчеркивать.

Имена атрибутов в масштабе ER-модели удобно делать уникальными, тогда при построении реляционной модели их (почти никогда) не придется переименовывать.

Внешним ключом (foreign key) называют ссылку на родительский объект. Обычно внешние ключи появляются в таблицах в результате преобразования связей. Будем выделять внешние ключи курсивом.

Для краткости в некоторых примерах пропущены несущественные неключевые атрибуты.

 

I. Преобразование сущностей

1. Преобразование обычной сущности

 

 

Обычная сущность преобразуется в отдельную таблицу, столбцами таблицы будут все атрибуты сущности:

Сущность (Ключ, Атрибут1, Атрибут2)

 

2. Преобразование слабой сущности

 

Слабая сущность преобразуется в отдельную таблицу, столбцами таблицы будут все атрибуты сущности плюс ключевые атрибуты всех сильных сущностей, с помощью которых данная слабая сущность идентифицируется.

Ключевые поля всех сильных сущностей таблиц войдут в первичный ключ слабой сущности.

Для слабой сущности они будут являться внешними ключами.

Сущность1 (Ключ1, Ключ2, Атрибут1, Атрибут2)

3. Преобразование подтипов сущностей.

1 способ. Создается одна таблица, в которую помещают все атрибуты. Для того чтобы указать, к какому подтипу относится объект, приходится вводить дополнительное поле-признак.

Сущность1 (Ключ, Атрибут1, Атрибут2, Атрибут3, Атрибут4, Атрибут4, Признак)

Недостатком этого способа является то, что в таблице остается много незаполненных полей: для объекта подтипа 1 атрибуты 4 и 5, а для объекта подтипа 2 – атрибуты 2 и 3 останутся пустыми.



 

2 способ. Создается отдельная таблица для каждого подтипа. В нее включаются все атрибуты этого подтипа и все атрибуты надтипа.

Подтип1 (Ключ, Атрибут1, Атрибут2, Атрибут3)

Подтип2 (Ключ, Атрибут1, Атрибут4, Атрибут5)

Недостатком этого подхода является то, что подтипы теперь никак не связаны друг с другом.

 

3 способ. Создается одна таблица для надтипа и по одной таблице для каждого подтипа, в которую включаются ключевые поля надтипа:

Сущность1 (Ключ, Атрибут1)

Подтип1 (Ключ, Атрибут2, Атрибут3)

Подтип2 (Ключ, Атрибут4, Атрибут5)

Недостатком этого подхода является то, что информация о каждом объекте теперь распределена по двум таблицам.

 

II. Преобразование связей

Для связей-двойных ромбов ничего делать не нужно, вся информация уже хранится в таблице слабой сущности.

1. Связь М:М

 

По правилам преобразования обычной сущности, как мы видели выше, для каждой сущности создается отдельная таблица, содержащая все её атрибуты:

Сущность1 (Ключ1, Атрибут1, Атрибут2)

Сущность2 (Ключ2, Атрибут3, Атрибут4)

Для связи создается отдельная таблица, содержащая ключевые поля каждой сущности, участвующей в связи, и собственные атрибуты связи, если таковые имеются. В названии обычно отражают, какие именно сущности связываются, или называют новую таблицу именем связи.

Сущ1Сущ2 (Ключ1, Ключ2, Атрибут5)

 

2. Связь 1:М

 

1 способ. Точно так же, как и в случае М:М, создаются отдельные таблицы для сущностей и отдельная таблица для связи, содержащая ключевые поля каждой сущности, участвующей в связи. Первичным ключом будет ключ второй сущности.

Сущность1 (Ключ1,Атрибут1, Атрибут2)

Сущность2 (Ключ2,Атрибут3, Атрибут4)

Сущ1Сущ2 (Ключ1, Ключ2)

Этот способ предпочтительнее использовать в том случае, если связь не является «ровно к одному», то есть не все экземпляры сущностей участвуют в связи.

 

2 способ. Новая таблица для связи не создается, а в таблицу дочерней сущности добавляют ключевые поля родительской сущности (в первичный ключ дочерней сущности они входить не будут!). Ключевые поля родительской сущности представляют собой внешний ключ для дочерней сущности.

Сущность1 (Ключ1,Атрибут1, Атрибут2)

Сущность2 (Ключ2, Атрибут3, Атрибут4, Ключ1)

Этот способ предпочтительнее использовать в том случае, если связь является связью «ровно к одному» в сторону родительской сущности, то есть все экземпляры дочерней сущности участвуют в связи. В этом случае поле внешнего ключа никогда не будет пустым.

 

3. Связь 1:1

1 способ. Точно так же, как и в случае М:М, создаются отдельные таблицы для сущностей и отдельная таблица для связи, содержащая ключевые поля каждой сущности, участвующей в связи.

Первичным ключом этой таблицы будет ключ любой сущности.

Сущность1 (Ключ1,Атрибут1, Атрибут2)

Сущность2 (Ключ2,Атрибут3, Атрибут4)

Сущ1Сущ2 (Ключ1, Ключ2)илиСущ1Сущ2 (Ключ1, Ключ2)

Этот способ предпочтительнее использовать в том случае, если связь не является связью «ровно к одному», то есть не все экземпляры сущностей участвуют в связи.

2 способ. Точно так же, как и во 2 случае 1:М, новая таблица для связи не создается, а в таблицу одной из сущностей (будем считать ее дочерней) добавляют ключевые поля другой сущности (будем считать ее родительской).

Сущность1 (Ключ1,Атрибут1, Атрибут2)

Сущность2 (Ключ2, Атрибут3, Атрибут4, Ключ1)

Если связь не является связью «ровно к одному» по отношению к родительской таблице, то есть не все экземпляры дочерней сущности участвуют в связи, поле внешнего ключа в некоторых записях может быть пустым.

 

3 способ. Две таблицы для сущностей, связанных соотношением 1:1, объединяются в одну. Ключом новой таблицы может быть комбинация ключей обеих таблиц. Если хотя бы в одном направлении связь «ровно к одному», то ключ этой сущности можно считать ключом объединенной таблицы.

Сущ1Сущ2(Ключ1, Атрибут1, Ключ2, Атрибут2)

или, возможно, Сущ1Сущ2(Ключ1, Атрибут1, Ключ2, Атрибут2),

или Сущ1Сущ2(Ключ1, Атрибут1, Ключ2, Атрибут2).

 

Примечание 1:

Для связи сущности с самой собой применяются те же правила, но так как одна и та же сущность участвует в связи дважды, ключевые поля должны войти в одну и ту же таблицу два раза. Поэтому приходится переименовывать один из ключей.

 

 

Рассмотрим связь 1:M, способ 2. Переименован внешний ключ.

Сущность1 (Ключ1, Атрибут1, Атрибут2, ЕщеОдинКлюч1).

 

 
 

Примечание 2:

Для связей с арностью более 2 обычно применяется тот же способ, что и для бинарной связи M:M – создается новая таблица, содержащая ключевые поля всех связанных таблиц.

Сущ1Сущ2Сущ3 (Ключ1, Ключ2, Ключ3)

Пример реляционной модели: Контора «Рога и копыта»

Таблицы удобнее называть существительными во множественном числе.

В модель добавлены дополнительные неключевые атрибуты для того, чтобы задача была более интересной.

 

Отделы (Ном_отд, Полное_назв_отд, Краткое_назв_отд, Ном_сотр)

Поле Ном_сотр содержит номер сотрудника-руководителя отдела и является результатом преобразования связи 1:1 «Имеет руководителя».

Сотрудники (Ном_сотр, ФИО, Должность, Дата_приема, Срок, Ном_отд)

Ном_отд появился в результате преобразования связи 1:М «Состоит из», в первичный ключ он не входит.

Предприятия (Ном_пред, Наз_пред, Адрес, Телефон)

Название предприятия неудобно использовать в качестве первичного ключа, добавим новое поле Ном_пред.

Договоры (Ном_дог, Дата_дог, Тип_дог, Ном_сотр, Ном_пред)

Ном_сотр появился в результате преобразования связи М:1 «Выписан», в первичный ключ он не входит, Ном_пред появился в результате преобразования связи 1:М «Заключает», в первичный ключ он не входит.

Счета (Ном_сч, Дата_сч, Срок_сч, Сумма_сч, Ном_дог, Пени)

Ном_дог появился в результате преобразования связи 1:М «Включает», в первичный ключ он не входит.

Платежи (Ном_пл, Ном_сч, Дата_пл, Сумма_пл)

Ном_сч появился в результате преобразования слабой сущности «Платеж», это поле входит в первичный ключ!

Товары/услуги (Ном_ту, Назв_ту, Цена_ту)

Название товара неудобно использовать в качестве первичного ключа, добавим новое уникальное поле Ном_ту.

Протоколы_счетов (Ном_сч, Ном_ту, Количество, Цена)

Эта таблица появилась в результате преобразования бинарной связи М:М «Состав счета», её первичный ключ состоит из ключевых полей обеих сущностей.

Пример реляционной модели: «Музыканты»

Музыканты (НомМуз, ИмяМуз, ДатаРожд, СтрРожд)

Эта таблица не имеет внешних ключей.

Сочинения (НомСоч, НазСоч, ДатаСоч, НомМуз)

Столбец НомМуз является внешним ключом, появился в результате преобразования связи 1:М «Композитор» и содержит номера музыкантов- композиторов.

Исполнители (НомИсп, Инструмент, Оценка, НомМуз)

Столбец НомМуз является внешним ключом, появился в результате преобразования связи 1:М «Является» с сущностью «Музыканты».

Ансамбли (НомАнс, НазАнс, СтрАнс, НомМуз)

Столбец НомМуз является внешним ключом, появился в результате преобразования связи 1:М «Руководитель».

УчАнс(НомАнс, НомИсп)

Эта таблица появилась в результате преобразования бинарной связи М:М «Участники», её первичный ключ состоит из ключевых полей обеих связанных сущностей.

Исполнения (НомМуз, НомАнс, НомСоч, ДатаИсп, СтрИсп, ГорИсп)

Поскольку сущность «Исполнения» является слабой сущностью, в состав её первичного ключа попали все первичные ключи сильных сущностей, от которых она зависит. По отдельности каждый из них является ещё и внешним ключом.



<== предыдущая лекция | следующая лекция ==>
Описание задачи | Установка.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.686 сек.