18.5.8. Множественное местонахождение одного и того же факта

Рисунок 18.17. Ребенок

Ребенок


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

Сотрудник#

Ребенок#

Имя ребенка

Адрес

сотрудника

Е1

С1

Коля

Сурикова, 10

Е2

С1

Маша

Мира, 23

E2

C2

Оля

Мира, 23


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

Включение атрибута «Адрес сотрудника» в сущность «Ребенок» – это ошибка (табл. 15). Теперь, если сотрудник имеет несколько детей, то его адрес будет храниться для каждого ребенка.

Атрибут «Адрес сотрудника» – признак сущности «Сотрудник», но не сущности «Ребенок». Фактически, это нарушение 2НФ, которая говорит: при наличии составного первичного ключа все атрибуты должны зависеть от полного ключа, а не от его частей. Адрес сотрудника не зависит от полного первичного ключа «Сотрудник#  Ребенок#», а зависит от его части – атрибута «Сотрудник#».

Для приведения сущности «Ребенок» к 2НФ:

  1. перенесем атрибут «Адрес сотрудника» в сущность «Сотрудник».

Результат приведения сущности «Ребенок» к 2НФ на рис. 15.