Объект Отпуск товаров
|
Отношение ОТПУСК ТОВАРОВ примет вид:
Таблица БД Отпуск товаров
№ счёта | Дата | Покуп-ль | Город | Адрес | Товар1 | Товар | Товар 3 | Цена ед_изм | Кол-во.шт | Общая стоим. |
10.04.04 | Каф. АПП КубГТУ | Краснодар | Красная, 135-189 | Компьютер | Стол комп | Кресло комп | ? | ? | ? |
Очевидный ключ - № счёта, но тогда счёт №123 имеет недостатки:
1 Адрес – составной (делимый) атрибут, но, учитывая возможный будущий анализ продаж по городам, выделим в нём только Город – это доработка таблицы, составленной по этому счёту.
2 Атрибут Товар – повторяющаяся группа, т.к. их в счёте №123 несколько – 3 товара.
Вариант 1: Разбиение таблицы на 3 таблицы для каждого товара.
Чтобы не допускать повторяющуюся группу в табл. БД – для однозначности идентификации каждого товара – в таблицу включаем только один товар, тогда для счёта №123 потребуется 3 таблицы БД – по одной на каждый товар.
|
|
Но тогда №счёта будет одинаков во всех таблицах и как ключ не годится для идентификации
Вариант 2:: Назначить первичным ключом атрибут Товар – получим и однозначность идентификации, и исключение повторяющейся группы. Но при дополнении таблицы возможен повторяющийся товар – другое, но кресло и т.д.
Вариант 3: сделать составной ключ №счёта + Товар (возможно в одном № счёта повторение товара) или Товар+Цена – подходит для данной конкретной БД, хотя и является составным.
Вариант 4: ввести новый атрибут Код товара и сделать его ключевым.
Код товара | № счёта | Дата | Покуп-ль | Город | Адрес | Товар | Цена ед_изм | Кол-во.шт | Общая стоим. |
10.04.04 | Каф. ССУК | Краснодар | Красная, 135-189 | Компьютер | |||||
10.04.04 | Каф. ССУК | Краснодар | Красная, 135-189 | Стол компьютер | |||||
10.04.04 | Каф. ССУК | Краснодар | Красная, 135-189 | Кресло комп. |
В целом общее правило приведения таблиц БД к 1НФ:
1 Каждое поле должно быть разумно неделимым, достаточным для целей данной БД.
2 Исключение повторяющихся групп возможно повторением таблицы для каждой повторяющейся группы, но это загромождает память компьютера дублированием одинаковых данных, или введением составного ключа в одной таблице, или введением нового ключа в формате №, шифр, код,….