Повторяющиеся группы данных могут быть определены как списки, повторяющиеся элементы, как внутренняя структура внутри атрибута. Эта структура нарушает 1НФ и поэтому должна быть удалена из модели.
Таблица 18.2. Экземпляры сущности Сотрудник
Сотрудник# |
Фамилия |
Адрес |
Имя ребенка |
Е1 |
Седов |
Сурикова, 10 |
Коля |
Е2 |
Куликов |
Мира, 23 |
Маша, Оля |
Сущность «Сотрудник» содержит повторяющуюся группу данных в атрибуте «Имя ребенка» (рис. 14). Это нарушает 1НФ, которая говорит, что сущность находится в 1НФ, если каждый из атрибутов имеет не больше чем одно значение для каждого экземпляра. Экземпляр атрибута «Имя ребенка» имеет два значения: Маша и Оля (табл. 10).
Это нарушение 1НФ приводит к проблемам. Запись значения атрибута через запятую «Маша, Оля» приводит к тому, что размера столбца может не хватить для хранения данных (ведь сотрудник может иметь и 4, и 5 детей). Проблема и в том, что по такому атрибуту невозможно построить индекс.
Для приведения сущности «Сотрудник» к 1НФ:
создадим новую сущность «Ребенок»,
перенесем в нее повторяющийся атрибут «Имя ребенка»,
определим атрибут «Ребенок#» в качестве первичного ключа сущности «Ребенок»,
установим идентифицирующую связь от сущности «Сотрудник» к сущности «Ребенок». Первичный ключ «Сотрудник#» сущности «Сотрудник» будет в сущности «Ребенок» внешним ключом.
Результат приведения сущности «Сотрудник» к 1НФ на рис. 15.
Таблица 18.3. Экземпляры сущности Сотрудник
Сотрудник# |
Фамилия |
Адрес |
Е1 |
Седов |
Сурикова, 10 |
Е2 |
Куликов |
Мира, 23 |
Таблица 18.4. Экземпляры сущности Ребенок
Сотрудник# |
Ребенок# |
Имя ребенка |
Е1 |
С1 |
Коля |
Е2 |
С1 |
Маша |
E2 |
C2 |
Оля |