Распечатать страницу

Представление функциональных зависимостей VFP

« Назад

Возьмем, к примеру, ранее упомянутую зависимость "Сотрудник – Дата рождения". Ее представление в виде табл. 14.2 является, что очевидно, неудовлетворительным. В самом деле, нередки случаи, когда на одном предприятии работают несколько сотрудников с одинаковой фамилией. В такой ситуации зависимость "Сотрудник – Дата рождения" не является функциональной: одной и той же фамилии будут соответствовать несколько дат рождения (рис. 14.1).

193.1.-Зависимость-Сотрудник-Дата-рождения-не-является-функциональной

Рис. 14.1. Зависимость "Сотрудник – Дата рождения" не является функциональной

Поэтому необходимо уточнить исходную зависимость, выполнив ее декомпозицию на две зависимости: "Сотрудник – Табельный номер сотрудника" и "Табельный номер сотрудника – Дата рождения". Обе эти зависимости являются функциональными: каждому значению атрибута "Табельный номер сотрудника" отвечает одно значение второго атрибута ("Сотрудник" или "Дата рождения") зависимости.

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

В данном случае эти функциональные зависимости можно отобразить как в одной, так и в двух таблицах (табл. 14.3 и 14.4).

Таблица 14.3

Уточненное однотабличное представление зависимости "Сотрудник – Дата рождения"

Табельный номер

Сотрудник

Дата рождения

К023

Иванов

03.10.1979

М425

Нестеров

01.12.1980

М427

Иванов

04.09.1983

М429

Реутов

02.11.1982

Таблица 14.4

Уточненное двухтабличное представление зависимости "Сотрудник – Дата рождения"

Табельный номер

Сотрудник

 

Табельный номер

Дата рождения

К023

Иванов

 

К023

03.10.1979

М425

Нестеров

 

М425

01.12.1980

М427

Иванов

 

М427

04.09.1983

М429

Реутов

 

М429

02.11.1982

Нередко процесс выявления функциональных зависимостей оказывается многоходовым. Рассмотрим, например, зависимость "Сотрудник – Оклад". Очевидно, что после разбиения зависимости на две: "Сотрудник – Табельный номер" и "Табельный номер – Оклад" обе могут быть нефункциональными. Это произойдет в том случае, если сотрудник может занимать на предприятии две должности: первую – по основному месту работы, вторую – как совместитель, и на каждом из них один и тот же сотрудник имеет разные табельные номера. Кроме того, оклад сотрудника может по мере продвижения по службе изменяться. Это обстоятельство также необходимо отобразить в результирующем представлении зависимости.

Дальнейшее разбиение может быть таким:

  • "Сотрудник – Код сотрудника";

  • "Код сотрудника - Табельный номер";

  • "Табельный номер – Вид трудоустройства";

  • "Табельный номер – Оклад – Номер приказа о назначении оклада";

  • "Номер приказа о назначении оклада – Дата приказа".

Атрибут "Вид трудоустройства" может принимать значения "Основное место работы" и "По совместительству".

Отобразить эти зависимости можно в четырех таблицах со столбцами:

  1. "Сотрудник – Код сотрудника".

  2. "Код сотрудника – Табельный номер – Вид трудоустройства".

  3. "Табельный номер – Оклад – Номер приказа о назначении оклада".

  4. "Номер приказа о назначении оклада – Дата приказа".

Скорее всего, будет получено некоторое повышение производительности, если две последние таблицы объединить в одну:

"Табельный номер – Оклад – Номер приказа о назначении оклада – Дата приказа".

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