18.5.10. Производные атрибуты

Другой пример конфликта фактов происходит, когда нарушена 3НФ.

Если включить атрибуты «Дата рождения» и «Возраст» в сущность «Ребенок» (см. табл. 19), то будет нарушена ЗНФ, так как атрибут «Возраст» функционально зависит от атрибута «Даты рождения». Зная дату рождения, всегда можно получить возраст ребенка.

Производные атрибуты – это атрибуты, которые могут быть вычислены из других атрибутов (например, «Возраст»), и следовательно, могут не сохраняться в БД. Чтобы быть точными, производные атрибуты должны модифицироваться каждый раз, когда источник их образования модифицируется. Это создает большие непроизводительные затраты в приложении, которое делает модификации.

Таблица 18.11. Экземпляры сущности Ребенок

Сотрудник#

 Ребенок#

 Имя ребенка

 Дата

рождения

 Возраст

Е1

С1

Коля

01.09.00

10

Е2

С1

Маша

01.08.98

12

Е2

С2

Оля

02.07.05

5


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

Сущность «Ребенок» имеет атрибуты «Дата рождения» и «Возраст». Предположим, что атрибут «Возраст» модифицируется в конце месяца. Затем вы задаете запрос: какого возраста ребенок? Вы можете непосредственно обратиться к атрибуту «Возраст» и получит ответ. Также вы можете вычесть «Дату рождения» от сегодняшней даты и тоже получить ответ. Если «Возраст» не модифицировался недавно, то вы получите неправильный ответ. То есть при наличии в БД производных атрибутов, в ней всегда имеется потенциал для конфликтующих ответов.