Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Тема 6

ЛАБОРАТОРНАЯ РАБОТА № 4

ИССЛЕДОВАНИЕ АЦИКЛИЧЕСКОЙ МОДЕЛИ ДАННЫХ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

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

В отношении К(А, В,С) имеется многозначная зависимость А ->—» В, если для любого а, являющегося значением реквизита А

iт(ВС)а = i1т(В)а ° iт(С)а,

где iт(В)а - множество значений реквизита В, связанных с заданным значением реквизита а; ° - знак декартова произведения множеств.

Положение реквизитов В и С равноценно, поэтому одновременно справедливо А —.>—> С, т. е. многозначные зависимости всегда встречаются парами.

Отношение R (А, В, С) с многозначной зависимостью А —»—» В содержит избыточную информацию, хотя и несколько другого рода, чем отношение в 1НФ. Оказывается, что отношения R1=R[А, В] и R=R2[А, С] вместе представляют всю информацию из R. Справедливо соотношение R=R1*R2, которое можно считать равноценным определению многозначной зависимости.

Рассмотрим отношение Z(Завод, Изделие, Компл, План), где Компл - название комплектующего изделия для данного Изделия, а План - план выпуска Изделий. Справедлива функциональная зависимость Завод, Изделие —> План и мы имеем следующие отношения в ЗНФ:

Z1 (Завод, Изделие, План),

Z2(Завод, Изделие, Компл).

Отношение Z1 содержит двухреквизитный ключ и в нем не может быть многозначной зависимости (МЗ). В Z2 существует МЗ вида Изделие —>—> Завод (и, следовательно, Изделие —>—> Компл), поскольку каждое изделие комплектуется одним и тем же набором комплектующих изделий, на каком бы заводе оно ни производилось. Отношение Z2 необходимо разделить на два отношения Z11 (Завод, Изделие) и Z12(Изделие, Компл). Вся информация из Z11 содержится в Z1, поэтому окончательный список отношений состоит из Z1 и Z12.

НЕ нашли? Не то? Что вы ищете?

Операция соединения позволяет получить Z2 = Z11*Z12.

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

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

Например, в графе соединений на рис. 2.1 можно разорвать любую из дуг и превратить граф в дерево. По этой причине база данных, состоящая из отношений S1, S2, 53, является ациклической.

Алгоритм проверки структуры БД на ацикличность

Исходные данные - список отношений с указанием реквизитного состава каждого отношения.

Метод - последовательное выполнение указанных ниже ша - 1 гов.

Шаг 1. Если некоторый реквизит встречается только в од-1 ном отношении, то необходимо вычеркнуть данный реквизит из I этого отношения.

Ш а г 2. Если все реквизиты некоторого отношения находятся среди реквизитов другого отношения, то первое отношение вычеркивается из списка.

Шаги 1 и 2 можно применять в любой последовательности.

Если в результате будут вычеркнуты все отношения, то база данных является ациклической. Если будут вычеркнуты не все отношения - база данных циклическая.

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

Рассмотрим простой пример графа соединений (рис. 2.2).

Наличие цикла очевидно. Отношение Т(Служащий, Отдел, Заказчик) может быть вычислено либо как T=R1 * R2, либо в виде:

Т= (R1 * R3)[Служащий, Отдел, Заказчик].

В первом случае будет справедлива функциональная зависимость Служащий —> Отдел, а во втором случае - нет, так как с заказчиками могут работать служащие, не являющиеся сотрудниками каких-то отделов.

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

1. Добавление в базу данных нового отношения с реквизитами, равными объединению весов дуг, образующих цикл. В этом

случае придется допустить существование неопределенных значений в новом отношении.

2. Добавление новых реквизитов, переименование и разделе - ] ние ролей реквизитов. Такое решение не требует дополнительных соглашений при интерпретации запросов и не создает дополнительных неопределенных значений. Приведем типичные варианты разделения и переименования реквизитов.

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

Учитывая высокую трудоемкость приведения отношений к ЗНФ при достаточно большом числе реквизитов (в качестве границы назовем 1-14 реквизитов), можно рекомендовать следующие действия при проектировании структуры реляционной БД:

• каждый входной документ привести к ЗНФ и установить первичный ключ в каждом случае;

• для полученного на шаге 1 множества отношений построить граф соединений. Если граф соединений можно преобразовать в дерево соединений (или алгоритм проверки ацикличности дал положительный результат), то база данных в целом является ациклической и соответствует ЗНФ. В противном случае для достижения ацикличности необходимо выполнить преобразования, рекомендованные выше.

Критерии, которым соответствует база данных в ЗНФ и ациклическая база данных, безусловно не совпадают. В первую очередь, ациклическая база данных не гарантирует минимальную избыточность представления информации. Гарантии единственного пути доступа в ациклической базе данных, вероятно следует признать более существенными для пользователей-непрофессионалов. Надо также учитывать элементарность метода проверки ацикличности базы данных в сравнении с необходимостью формального анализа функциональных зависимостей, требуемых при создании базы данных в ЗНФ.

ЗАДАНИЯ

Задание 1. Выполните декомпозиции и соединения с отношениями

Z1 (Завод, Изделие, План),

Z2(Завод, Изделие, Компл) средствами СУБД. Значения в отношениях выберите таким образом, чтобы соблюдалась многозначная зависимость Изделие -»—» Компл. Убедитесь, что после декомпозиции избыточность данных сократилась.

Задание 2. Определите первичные ключи в каждом отношении. Установите, является ли база данных в целом ациклической. Если база данных циклическая, то приведите ее к ациклическому виду.

R1 (Служащий, Организация, Должность).

R2(Организация, Расчетный_счет, Адрес).

R3(Служащий, Автомобиль).

R4(Автомобиль, Цена, Регистрационный_номер).

Задание 3. Определите первичные ключи в каждом отношении. Установите, является ли база данных в целом ациклической. Если база данных циклическая, то приведите ее к ациклическому виду.

R1 (Деталь, Станок).

R2(Деталь, Производитель).

R3(Производитель, Станок, Количество).

R4(Станок, Вес, Год_выпуска).

Задание 4. Определите первичные ключи в каждом отношении. Установите, является ли база данных в целом ациклической. Если база данных циклическая, то приведите ее к ациклическому виду.

R1(ФИО, Подразделение).

R2(ФИО, Должность).

RЗ(Подразделение, Должность, Зарплата).

R4(Должность, Вид_работы).

R5(Подразделение, Номер).

Задание 5. Определите первичные ключи в каждом отношении. Установите, является ли база данных в целом ациклической. Если база данных циклическая, то приведите ее к ациклическому виду.

R1 (Товар, Поставщик).

R2(Поставщик, Склад).

RЗ(Товар, Магазин).

R4(Магазин, Склад, Адрес_магазина).

Задание 6. Определите первичные ключи в каждом отношении. Установите, является ли база данных в целом ациклической. Если база данных циклическая, то приведите ее к ациклическому виду.

R1 (СУБД, Тип_подключения, Размер).

R2(Тип_подключения, Сетевой_протокол, Клиент).

R 3 (СУБД, Фирма, Срок_использования).

R4(Фирма, Клиент, Срок_контракта).

R5(Клиент, Телефон).

Задание 7. Определите первичные ключи в каждом отношении. Установите, является ли база данных в целом ациклической. Если база данных циклическая, то приведите ее к ациклическому виду.

R1 (Статья, Автор, Тема).

R2(Журнал, Тема).

R3(Раздел, Количество_статей, Количество_авторов).

R4(Автор, Должность).

Задание 8. Определите первичные ключи в каждом отношении. Установите, является ли база данных в целом ациклической. Если база данных циклическая, то приведите ее к ациклическому виду.

R1 (Студент, Секция, День_посещения).

R2(Секция, Вид_спорта, Преподаватель).

R3(Студент, Группа, Дисциплина).

R4(Дисциплина, Преподаватель).

Задание 9. Определите первичные ключи в каждом отношении. Установите, является ли база данных в целом ациклической. Если база данных циклическая, то приведите ее к ациклическому виду.

R1 (Кинотеатр, Фильм).

R2(Кинотеатр, Сеанс).

RЗ(Фильм, Сеанс, Стоимость_билета).

R4(Сеанс, Время).

R5(Фильм, Продолжительность).

Задание 10. Определите первичные ключи в каждом отношении. Установите, является ли база данных в целом ациклической. Если база данных циклическая, то приведите ее к ациклическому виду.

R1 (Кафедра, Студент, Специализация).

R2(Кафедра, Преподаватель).

RЗ(Студент, Группа, Успеваемость).

R4(Преподаватель, Телефон).

R5(Студент, Дисциплина, Преподаватель).

Задание 11. Определите первичные ключи в каждом отношении. Установите, является ли база данных в целом ациклической. Если база данных циклическая, то приведите ее к ациклическому виду.

R1 (Программист, Страна, Возраст).

R2(Страна, Язык).

RЗ(Программист, Проект, Страна).

R4(Проект, Язык_программирования).