
Итак мы убедились, что иногда, заменив отношение его полной декомпозицией,
можно избежать дублирования данных. Но в других случаях такая замена не удается.
Очевидно, необходим критерий, позволяющий судить о целесообразности
декомпозиции отношения. Заметим, что проекции proj
Поставщик,Тел
P и
proj
КодТовара,Поставщик
P (образующие полную декомпозицию) не содержат общего ключа
исходного отношения, в то время как проекции proj
КодТовара,Тел
P и proj
КодТовара,Поставщик
P
(не образующие полную декомпозицию) обе содержат ключ исходного отношения –
КодТовара.
5.3 Висячие записи
Важно не только устранить дублирование, но и обеспечить хранение висячих
(иначе, присоединенных) записей. Пусть в отношение P из предыдущего пункта
требуется ввести телефон фирмы, еще не поставлявшей товара. Но КодТовара – ключ,
его нельзя оставить пустым! Значит невозможно ввести такой телефон! Но в проекцию
proj
Поставщик,Тел
P его ввести можно.
proj
Поставщик, Тел
P :
Поставщик Тел
ГЛОБУС 33-33-33
МИР 99-99-99
ОКЕАН 77-77-77
КОНТИНЕНТ 55-55-55
Правда, запись о фирме ―КОНТИНЕНТ‖ не войдет в
proj
КодТовара, Поставщик
P join proj
Поставщик,Тел
P. Такая запись называется висячей (или
присоединенной). Отношение, включающее висячие записи, перестает быть точной
проекцией P.
С другой стороны, если использовать проекции proj
КодТовара, Поставщик
P и
proj
КодТовара, Тел
P, то снова не удастся вставить телефон поставщика, не поставившего еще
ни одного товара.
Заметим, что декомпозиция proj
Поставщик, Тел
P и proj
КодТовара, Поставщик
P (позволяющая
записать сведения о поставщике, не осуществившего еще ни одной поставки)
составлена из проекций, не содержащих общего ключа исходного отношения. В то же
время декомпозиция proj
КодТовара, Тел
P и proj
КодТовара, Поставщик
P (не позволяющая записать
данные такого поставщика) составлена из проекций, содержащих ключ исходного
отношения – КодТовара.
Примеры из двух последних пунктов позволяют сделать вывод о том, что выбор
той или иной структуры таблиц может привести к несовершенствам или наоборот
обеспечить удобство использования данных. Почему же вообще может быть плох
проект базы данных?
5.4 Проблемы, возникающие из-за неудачной структуры данных
1. Аномалия изменения (избыточность и потенциальная противоречивость).
Информация во многих столбцах многократно повторяется. Чем больше данных
в отношении, тем больше дублируется информации и тем больше
непроизводительных затрат. Из-за наличия многих дублей одних и тех же
данных возможна ситуация, когда одна часть избыточных копий будет
изменена, а другая – нет. Если меняется имя поставщика (или оно было внесено
с ошибкой), то придется изменить много строк, в которых упоминается этот
поставщик – иначе получится, что имеется два разных поставщика.