Можем ли мы теперь утверждать, что таблица (рис. 31.6) стала реляционной? К сожалению, нет. Почему? Потому что неключевые поля таблицы, отвечающие за хранение имени, отчества и фамилии автора, заполнены избыточными данными. Например, атрибут «Толстой» повторяется в строках с ключом 1 и 2, а атрибут «Александр» встречается пять раз в записях с ключом от 3 до 7. Лучший способ борьбы с излишними данными - «отжим» таблицы до третьей нормальной формы.
Третья нормальная форма утверждает: в таблице не должно быть избыточных неключевых полей, связанных с неключевыми полями других таблиц.
Подготовка к переводу таблицы к модели 3NF обязательно требует прохождения ступеней 1NF и 2NF.
На третьем этапе нормализации разработчики БД осуществляют разделение таблицы. В нашем случае таблица Library трансформировалась в 4 таблицы (рис. 31.7), отвечающие за хранение имени (FName), отчества (LName), фамилии автора (Writer) и названий книг (Books). Проанализируем каждую из таблиц на соблюдение требований 3NF. Для выполнения требований 2NF в таблицы FName и LName введены первичные ключи - поля FNKey и LNKey соответственно. Более того, автоматически выполнились пожелания 3NF: у нас всего по одному неключевому полю в каждой из таблиц, т. е. зависимости неключевых полей друг от друга нет. Таблица Writer теперь состоит из 4 полей: Wr-Key - первичный ключ, FNKey и LNKey - внешние ключи для связи с таблицами имен и отчеств, Name - единственное неключевое поле для хранения фамилии автора. Практически аналогичная ситуация с таблицей Books: BKey - уникальный первичный ключ, WrKey - внешний ключ для связи с таблицей Writer, Books - неключевое поле для хранения названий книг.
Подведем итоги:
1NF. Все поля в таблицах неделимы и нет повторяющихся групп. 2NF. Все неключевые поля в таблицах зависят от первичного ключа. 3NF. В таблицах отсутствуют избыточные неключевые поля.
Особым случаем отношения один-ко-многим являются так называемые справочные (ссылочные) таблицы. Они включают как минимум два поля: столбец первичного ключа и непосредственно столбец данных. Использование справочных таблиц позволяет:
1. Значительно сократить физический размер дочерней (по отношению к справочной) таблицы, поскольку вместо большого (в десятки байт) поля требуется хранить лишь значение 4-байтного внешнего ключа.
2. При редактировании (например, переименовании издательства) достаточно изменить одно значение в справочной таблице.
3. При вводе данных значительно снижается вероятность появления ошибки пользователя, т. к. вместо ввода с клавиатуры ему предлагаются на выбор заранее подготовленные значения.