Введение в проектирование реляционных баз данных

50 0.61 27/8/94 "Наталка" Киев Лук 100 0.52 27/8/94 ... ... ... ... ... ...

Рис. 4.3. Преобразование универсального отношения "Питание" (первый вариант)

Включение. Простым добавлением строк (Поставщики; "Няринга", Вильнюс, Литва) и (Поставки; "Няринга", Вильнюс, Огурцы, 40) можно ввести информацию о новом поставщике. Аналогично можно ввести данные о новом продукте (Продукты; Баклажаны, 240) и (Поставки; "Полесье", Киев, Баклажаны, 50).

Удаление. Удаление сведений о некоторых поставках или блюдах не приводит к потере сведений о поставщиках.

Обновление. В таблицах рис. 4.3 все еще много повторяющихся данных, находящихся в связующих таблицах (Состав и Поставки). Следовательно, в данном варианте БД сохранилась потенциальная противоречивость: для изменения названия поставщика с "Полесье" на "Днепро" придется изменять не только строку таблицы Поставщики, но и множество строк таблицы Поставки. При этом не исключено, что в БД будут одновременно храниться: "Полесье", "Палесье", "Днепро", "Днипро" и другие варианты названий.

Кроме того, повторяющиеся текстовые данные (такие как название блюда "Рулет из телячей грудинки с сосисками и гарниром из разноцветного пюре" или продукта "Колбаса московская сырокопченая") существенно увеличивают объем хранимых данных.

Для исключения ссылок на длинные текстовые значения последние обычно нумеруют: нумеруют блюда в больших кулинарных книгах, товары (продукты) в каталогах и т.д. Воспользуемся этим приемом для исключения избыточного дублирования данных и появления ошибок при копировании длинных текстовых значений (рис. 4.4). Теперь при изменении названия поставщика "Полесье" на "Днепро" исправляется единственное значение в таблице Поставщики. И даже если оно вводится с ошибкой ("Днипро"), то это не может повлиять на связь между поставщиками и продуктами (в связующей таблице Поставки используются номера поставщиков и продуктов, а не их названия).

Блюда
БЛ Блюдо Вид
1 Лобио Закуска
2 Харчо Суп
3 Шашлык Горячее
4 Кофе Десерт
... ... ...
Рецепты
Блюдо Рецепт
Лобио Ломаную очищ
... ...
Расход
Блюдо Порций Дата_Р
Лобио 158 1/9/94
Харчо 144 1/9/94
Шашлык 207 1/9/94
Кофе 235 1/9/94
... ... ...
Продукты
ПР Продукт Калор.
1 Фасоль 3070
2 Лук 450
3 Масло 7420
4 Зелень 180
5 Мясо 1660
... ... ...
Состав
БЛ ПР Вес (г)
1 1 200
1 2 40
1 3 30
1 4 10
2 5 80
... ... ...
Поставщики 
ПОС Поставщик Город Страна
1 "Полесье" Киев Украина
2 "Наталка" Киев Украина