Выявление зависимостей между атрибутами необходимо для выполнения проектирования БД методом нормальных форм, рассматриваемого далее.
Основной способ определения наличия функциональных зависимостей — внимательный анализ семантики атрибутов.
Для каждого отношения существует, но не всегда, определенное множество функциональных зависимостей между атрибутами. Причем если в некотором отношении существует одна или несколько функциональных зависимостей, можно вывести другие функциональные зависимости, существующие в этом отношении.
Пример. Пусть задано отношение R со схемой R(A1,A2,A3) и числовыми значениями, приведенными в следующей таблице:
A1 | A2 | A3 |
---|---|---|
12 | 21 | 34 |
17 | 21 | 34 |
11 | 24 | 33 |
13 | 25 | 31 |
15 | 23 | 35 |
14 | 22 | 32 |
Априори известно, что в R существуют функциональные зависимости:
A1→A2 и A2→A3.
Анализируя это отношение, можно увидеть, что в нем существуют еще зависимости:
В то же время в отношении нет других функциональных зависимостей, что во введенных нами обозначениях можно отразить следующим образом: A2∼→A1, A3 ∼→A1и т. д.
Отсутствие зависимости A1 от A2(A2∼→A1) объясняется тем, что одному и тому же значению атрибута A2(21) соответствуют разные значения атрибута A1 (12 и 17). Другими словами, имеет место многозначность, а не функциональность.
Перечислив все существующие функциональные зависимости в отношении R, получим полное множество функциональных зависимостей, которое обозначим F+. Таким образом, для последнего примера исходное множество F=(A1→A2,A3), а полное множество F+=(A1→A2,A2→A3,A1→A3,A1A2→A3, A1A2AЗ→A1A2,A1A2→A2AЗ,...). Для построения F+ из F необходимо знать ряд правил (или аксиом) вывода одних функциональных зависимостей из других.
Существует 8 основных аксиом вывода: рефлексивности, пополнения,транзитивности, расширения, продолжения, псевдотранзитивности, объединения и декомпозиции. Перечисленные аксиомы обеспечивают получение всех ФЗ, т. е. их совокупность применительно к процедуре вывода можно считать «функционально полной».
Выявим зависимости между атрибутами отношения ПРЕПОДАВАТЕЛЬ
, приведенного ранее. При этом учтем следующее условие, которое выполняется в данном отношении: один преподаватель в одной группе может проводить один вид занятий (лекции или практические занятия).
В результате анализа отношения получаем зависимости между атрибутами, показанные на рис. 4.
Рис. 4. Зависимости между атрибутами
а)
ФИО Оклад
ФИО Должн
ФИО Стаж
ФИО Д_Стаж
ФИО Каф
Стаж Д_Стаж
Должн Оклад
Оклад Должн ФИО.Предм.Группа ВидЗан
б)
К выделению этих ФЗ для рассматриваемого примера приводят следующие соображения. Фамилия, имя и отчество у преподавателей факультета уникальны. Каждому преподавателю однозначно соответствует его стаж, т. е. имеет место функциональная зависимость ФИО→Стаж. Обратное утверждение неверно, так как одинаковый стаж может быть у разных преподавателей.
Каждый преподаватель имеет определенную добавку за стаж, т. е. имеет место функциональная зависимость ФИО→Д_Стаж, но обратная функциональная зависимость отсутствует, так как одну и ту же надбавку могут иметь несколько преподавателей.
Каждый преподаватель имеет определенную должность (преп., ст.преп., доцент, профессор), но одну и ту же должность могут иметь несколько преподавателей, т. е. имеет место функциональная зависимость ФИО→Должн, а обратная функциональная зависимость отсутствует.
Каждый преподаватель является сотрудником одной и только одной кафедры. Поэтому функциональная зависимость ФИО→Каф имеет место. С другой стороны, на каждой кафедре много преподавателей, поэтому обратной функциональной зависимости нет.
Каждому преподавателю соответствует конкретный оклад, который одинаков для всех педагогов с одинаковыми должностями, что учитывается зависимостями ФИО→Оклад и Должн→Оклад. Нет одинаковых окладов для разных должностей, поэтому имеет место функциональная зависимость Оклад→Должн.
Один и тот же преподаватель в одной группе по разным предметам может проводить разные виды занятий. Определение вида занятий, которые проводит преподаватель, невозможно без указания предмета и группы, поэтому имеет место функциональная зависимость ФИО, Предм, Группа→ВидЗан. Действительно, Петров М.И. в 256-й группе читает лекции и про- водит практические занятия. Но лекции он читает по СУБД, а практику проводит по Паскалю.
Нами не были выделены зависимости между атрибутами ФИО, Предм и Группа, поскольку они образуют составной ключ и не учитываются в процессе нормализации исходного отношения.
После того, как выделены все функциональные зависимости, следует проверить их согласованность с данными исходного отношения ПРЕПОДАВАТЕЛЬ
.
Например, Должн ='преп'
и Oклад='500'
всегда соответствуют друг другу во всех кортежах, т. е. подтверждается функциональная зависимость Должн↔Оклад. Так же следует верифицировать и остальные функциональные зависимости, не забывая об ограниченности имеющихся в отношении данных.
Метод нормальных форм | Нормальные формы |