Материал предоставлен https://it.rfei.ru

Выявление зависимостей между атрибутами

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

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

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

Пример. Пусть задано отношение R со схемой %%R (A_1, A_2, A_3)%% и числовыми значениями, приведенными в следующей таблице:

%%A_1%% %%A_2%% %%A_3%%
12 2134
17 2134
11 2433
13 2531
15 2335
14 2232

Априори известно, что в R существуют функциональные зависимости:

%%A_1\rightarrow A_2%% и %%A_2\rightarrow A_3%%.

Анализируя это отношение, можно увидеть, что в нем существуют еще зависимости:

  • %%A_1 \rightarrow A_3%%,
  • %%A_1 A_2\rightarrow A_3%%,
  • %%A_1 A_2 A_З\rightarrow A_1 A_2%%,
  • %%A_1 A_2 \rightarrow A_2 A_3%% и т. п.

В то же время в отношении нет других функциональных зависимостей, что во введенных нами обозначениях можно отразить следующим образом: %%A_2\sim\rightarrow A_1%%, %%A_3~\sim\rightarrow A_1%%и т. д.

Отсутствие зависимости %%A_1%% от %%A_2 (A_2 \sim\rightarrow A_1)%% объясняется тем, что одному и тому же значению атрибута %%A_2 (21)%% соответствуют разные значения атрибута %%A_1%% (12 и 17). Другими словами, имеет место многозначность, а не функциональность.

Перечислив все существующие функциональные зависимости в отношении %%R%%, получим полное множество функциональных зависимостей, которое обозначим %%F+%%. Таким образом, для последнего примера исходное множество %%F = (A_1\rightarrow A_2, A_3)%%, а полное множество %%F+ = (A_1\rightarrow A_2, A_2\rightarrow A_3, A_1\rightarrow A_3, A_1 A_2\rightarrow A_3%%, %%A_1A_2A_З\rightarrow A_1A_2, A_1A_2\rightarrow A_2A_З,...%%). Для построения %%F+%% из %%F%% необходимо знать ряд правил (или аксиом) вывода одних функциональных зависимостей из других.

Существует 8 основных аксиом вывода: рефлексивности, пополнения,транзитивности, расширения, продолжения, псевдотранзитивности, объединения и декомпозиции. Перечисленные аксиомы обеспечивают получение всех ФЗ, т. е. их совокупность применительно к процедуре вывода можно считать «функционально полной».

Выявим зависимости между атрибутами отношения ПРЕПОДАВАТЕЛЬ, приведенного ранее. При этом учтем следующее условие, которое выполняется в данном отношении: один преподаватель в одной группе может проводить один вид занятий (лекции или практические занятия).

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

Рис. 4. Зависимости между атрибутами

а)

ФИО Оклад
ФИО Должн
ФИО Стаж
ФИО Д_Стаж
ФИО Каф
Стаж Д_Стаж
Должн Оклад
Оклад Должн ФИО.Предм.Группа ВидЗан

б)

К выделению этих ФЗ для рассматриваемого примера приводят следующие соображения. Фамилия, имя и отчество у преподавателей факультета уникальны. Каждому преподавателю однозначно соответствует его стаж, т. е. имеет место функциональная зависимость %%ФИО\rightarrow Стаж%%. Обратное утверждение неверно, так как одинаковый стаж может быть у разных преподавателей.

Каждый преподаватель имеет определенную добавку за стаж, т. е. имеет место функциональная зависимость %%ФИО\rightarrow\text{Д_Стаж}%%, но обратная функциональная зависимость отсутствует, так как одну и ту же надбавку могут иметь несколько преподавателей.

Каждый преподаватель имеет определенную должность (преп., ст.преп., доцент, профессор), но одну и ту же должность могут иметь несколько преподавателей, т. е. имеет место функциональная зависимость %%ФИО\rightarrow Должн%%, а обратная функциональная зависимость отсутствует.

Каждый преподаватель является сотрудником одной и только одной кафедры. Поэтому функциональная зависимость %%ФИО\rightarrow Каф%% имеет место. С другой стороны, на каждой кафедре много преподавателей, поэтому обратной функциональной зависимости нет.

Каждому преподавателю соответствует конкретный оклад, который одинаков для всех педагогов с одинаковыми должностями, что учитывается зависимостями %%ФИО\rightarrow Оклад%% и %%Должн\rightarrow Оклад%%. Нет одинаковых окладов для разных должностей, поэтому имеет место функциональная зависимость %%Оклад\rightarrow Должн%%.

Один и тот же преподаватель в одной группе по разным предметам может проводить разные виды занятий. Определение вида занятий, которые проводит преподаватель, невозможно без указания предмета и группы, поэтому имеет место функциональная зависимость ФИО, Предм, %%Группа\rightarrow ВидЗан%%. Действительно, Петров М.И. в 256-й группе читает лекции и про- водит практические занятия. Но лекции он читает по СУБД, а практику проводит по Паскалю.

Нами не были выделены зависимости между атрибутами ФИО, Предм и Группа, поскольку они образуют составной ключ и не учитываются в процессе нормализации исходного отношения.

После того, как выделены все функциональные зависимости, следует проверить их согласованность с данными исходного отношения ПРЕПОДАВАТЕЛЬ.

Например, Должн ='преп' и Oклад='500' всегда соответствуют друг другу во всех кортежах, т. е. подтверждается функциональная зависимость %%Должн \leftrightarrow Оклад%%. Так же следует верифицировать и остальные функциональные зависимости, не забывая об ограниченности имеющихся в отношении данных.

Метод нормальных формНормальные формы