Правило 1: уникальность полей

Неэффективное использование памяти является основным недостатком ненормализованных таблиц, поэтому удаление избыточных полей из таблиц является одним из решений этой проблемы.

Правило 1: каждое поле таблицы должно представлять уникальный тип информации.

Это правило означает, что необходимо избавиться от повторяющихся полей и разделить составные поля на отдельные элементы данных. В нашем примере составные поля адреса нужно разделить на простые поля и включить в проект еще несколько таблиц для устранения повторения информации о книгах. В таблицы, созданные для повторяющихся данных, следует включить «ключевую» информацию из основной таблицы, чтобы можно было установить связи между новыми таблицами и исходной. Одно из возможных решений приведено на рис. 8.7.

 

Заказчики и заказы

Дата заказа Имя заказчика Адрес заказчика Город заказчика Район или область заказчика Почтовый индекс заказчика Страна заказчика

 

Телефон заказчика Общая стоимость Название магазина Адрес магазина Город магазина Район или область магазина Почтовый индекс магазина Телефон магазина

 

Содержание заказа

Дата заказа Имя заказчика Название книги Количество книг Цена Скидка Розничная цена

 

Книги

Название книги Предполагаемая цена Год издания Порядковый номер издания Количество страниц Аннотация Диск

 

Книги и авторы

Название книги Фамилия автора Имя автора Отчество автора Сведения об авторе Адрес электронной почты автора

 

Рис. 8.7 Проект базы данных Книги, в котором удалены
избыточные поля

Эти таблицы намного проще, поскольку теперь можно обрабатывать единственную запись на каждую заказанную книгу. К тому же не нужно резервировать в записи заказа дополнительные места для хранения большого числа книг. Если потребуется найти книгу с наибольшей ценой, достаточно просмотреть отдельную таблицу Книги, в которой основные сведения о каждой книге записываются только один раз.

Однако в некотором смысле проблема дублирования данных даже расширилась, поскольку теперь в каждой записи таблицы Содержание заказа повторяются поля Дата заказа и Имя заказчика. Потенциально длинное поле Название книги в таблицах Книги, Книги и авторы и Содержание заказа также избыточно. Но эти «повторяющиеся» данные необходимы для поддержания связей между таблицами. Разрешить проблему поможет следующее правило нормализации.