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

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

Тема 6

Лекция № 6

Ациклические базы данных

1. Многозначные зависимости.

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

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

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

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

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

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

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

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

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

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

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

2. Определение ациклических баз данных.

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

Для определения понятия «ациклическая схема базы данных» введем граф соединений на множестве отношений {S1,S2,...,Sk}. Вершинами графа соединений являются имена отношений 51, S2,...,Sk. Дуга графа <Si,Sj> существует, если в структуре отношений Si и Sj имеются общие реквизиты. Обозначим их через А (i,j) и назовем весом дуги. Путь на графе соединений называется А-путем, если реквизит А содержится в структуре каждого отношения, лежащего на пути. В графе соединений требуется, чтобы для каждой пары отношений Si, Sj с общим реквизитом A (i,j) существовал А (i,j)-путъ между Si и Sj. Если граф можно превратить в дерево с помощью исключения некоторых дуг при сохранении названного требования, то база данных с отношениями {S1, S2,..., Sk:} является ациклической.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

• При структуре функциональных зависимостей вида А —> В —> С, А —» Е —» С необходимо установить две разные роли для реквизита С (например, С1 и С2). Рассмотрим БД с реквизитами Студент, Группа, Куратор, Кафедра и зависимостями Студент —> Группа -» Кафедра, Студент —> Куратор -> Кафедра. В первом случае подразумевается скорее всего выпускающая кафедра для группы студентов, а во втором - кафедра, на которой работает куратор. После разделения реквизита Кафедра получаем структуру БД в виде:

Р1(Студент, Группа),

Р2(Группа, Выпускающая_кафедра),

РЗ(Студент, Куратор),

Р4(Куратор, Кафедра_куратора).

• Каждое применение теоремы Т6 свидетельствует о цикличности базы данных. Рассмотрим, например, зависимости Служащий —> Отдел и Отдел, Заказчик —» Тема. Эта ситуация отражена на рис. 2.2. Для преодоления цикличности необходимо разделить роли реквизита Отдел, например, ввести реквизит Отдел_служащего.

• Структура функциональных зависимостей вида АВ —> С, С —» В обычно возникает, если действия, совершаемые объектом, приписываются классу объектов. В таком случае необходимо добавить в структуру базы данных реквизит, обозначающий этот объект. Например, служащий фирмы покупает билет в аэропорту и счет направляется в отделение фирмы. Поэтому справедливы зависимости Аэропорт, Фирма —> Отделение и Отделение —» Фирма. Добавив реквизит Служащий, мы разрушаем нежелательную структуру функциональных зависимостей и получаем - Аэропорт, Служащий -> Отделение и Отделение -» Фирма.

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

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

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

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