Аномалии схемы отношения

После того как построена схема отношений, являющаяся моделью данных, при ее использовании могут возникнуть некоторые нежелательные эффекты. Например, мы построили отношение Поставка(Товар, Поставщик, Адрес, Цена, Склад, Объем). Это отношение содержит информацию о наличии различных товаров, поставляемых несколькими поставщиками в некоторый магазин, и размещении их на складах магазина. Для каждого поставщика хранится его адрес, а для каждого склада – его объем. Цена товара зависит от поставщика. Один и тот же товар, поставленный одним поставщиком, целиком хранится на одном складе.

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

Другой недостаток такой схемы: если какой-то поставщик временно прекратил поставки товаров для нашего магазина и база данных не содержит кортежей с именем этого поставщика, то его адрес теряется. Аналогично, мы не сможем хранить адрес нового поставщика, пока он не доставит хотя бы единицу какого-либо товара.

Такая же ситуация характерна для информации о складе и его объеме: если склад опустошается, то теряются данные о его объеме.

Эти проблемы называются аномалиями обновления.

Можно также заметить, что такая база данных содержит избыточную информацию: адрес поставщика повторяется для каждого товара, им поставляемого, а объем склада повторяется для каждого товара, размещенного на этом складе.

Решением этих проблем было бы разделение отношения Поставка на несколько других отношений: Склад(Номер, Объем), Поставщик(Название, Адрес), Товар(Наименование, Поставщик, Цена, Склад). В отношении Товар атрибут Поставщик будет внешним ключом, ссылающимся на отношение Поставщик, а атрибут Склад будет внешним ключом, ссылающимся на отношение Склад.

Эти действия по разделению одного отношения на несколько отношений называются декомпозицией.

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

1. По каким правилам проводить декомпозицию?

2. Как оценить, хорошая получилась схема или плохая?