Четвертая нормальная форма накладывает запрет на хранение независимых элементов в одной таблице, если между этими элементами существует связь типа многие-ко-многим.
Предположим, что в БД Library потребовалось дополнительно хранить информацию об издательстве, подготовившем книгу. Для наглядности сначала решим эту задачу «в лоб»: просто дополним таблицу Books новым строковым полем, предназначенным для хранения названия соответствующего издательства (рис. 31.8).
В результате строка с названием «Война и мир» повторится столько раз, сколько издательств этот роман печатало. Такая же история повторится и с другими классическими произведениями. Добавление нового поля в таблицу Books привело к разрастанию объема абсолютно одинаковых данных, подлежащих хранению. Причина тому - наличие отношений типа многие-ко-мно-гим между книгами и издательствами. В такой ситуации наиболее удачным решением будет трансформация таблицы Books в три таблицы (рис. 31.9).
Издательства выносятся в отдельную таблицу Publisher и создается ассоциативная таблица Books_Publisher, которая содержит два поля - внешние ключи для связи с книгами и издательствами. Каждая строка реализует связь между конкретной книгой и издательством, например из первой строки (BKey =1 и PKey = 1) следует, что «Война и мир» издавалась «Детской литературой».