Курсовая работа: Работа торгового склада
Товар
Город
Адрес
Ед_измер
Цена_за_ед_измер
Отпущено_ед
Общая_стоимость
Рис. 4.1.4 Таблица с избыточным первичным ключом
Вторая нормальная форма
Вторая нормальная форма (2НФ) требует, чтобы все поля таблицы зависели от первичного ключа, то есть, чтобы первичный ключ однозначно определял запись и не был избыточен. Те поля, которые зависят только от части первичного ключа, должны быть выделены в составе отдельных таблиц. Таким образом, производится устранение неполных зависимостей.
Нетрудно увидеть, что созданный нами первичный ключ является избыточным: поле «Номер накладной» однозначно определяет дату и покупателя. Для данной накладной не может быть никакой иной даты и никакого иного покупателя. Поле «Товар» в комбинации с номером накладной, напротив, однозначно идентифицирует запись. После уточнения состава полей в первичном ключе получим таблицу со структурой, показанной на рис. 4.1.5.
ОТПУСК-ТОВАРОВ-СО-СКЛАДА
Номер_накладной Товар |
Дата Покупатель Город Адрес Ед_измер Цена_за_ед_измер Отпущено_ед Общая_стоимость |
Рис. 4.1.5 Таблица с неизбыточным первичным ключом, но еще не приведенная к 2НФ
Первое требование 2НФ выполнено, чего не скажешь о втором, гласящем, что значения всех полей записи должны однозначно зависеть от совокупного значения первичного ключа и не должна иметь место ситуация, когда некоторые поля зависят от части первичного ключа. В таблице на рис. 4.1.5 поля «Единица измерения», «Цена за единицу измерения» зависят от значения поля «Товар», входящего в первичный ключ. Поэтому выделяем эти поля в самостоятельную таблицу «Товары» и определяем связь: поскольку один товар может присутствовать во многих накладных, таблицы «Товары» и «Отпуск товаров со склада» находятся в связи один-ко-многим (рис. 4.1.6).
Рис. 4.1.6 Выделение таблицы «Товары»
После анализа структуры таблицы можно заметить, что значение поля «Покупатель» никоим образом не зависит от пары значений «Номер накладной», «Товар», а зависит только от значения поля «Номер накладной». Поэтому данное поле и зависящие от его значения поля «Город», «Адрес» выделяем в таблицу «Покупатели» (рис. 4.1.7).
Анализируя далее структуру таблицы «Отпуск товаров со склада», обнаруживаем, что одно из оставшихся полей - «Дата» - зависит только от значения поля «Номер накладной». Поэтому выделяем поля «Дата» и «Номер накладной» в самостоятельную таблицу «Накладные» (рис. 4.1.8).
Установим связи между таблицами. Один покупатель может встречаться во многих накладных. Поэтому между таблицами «Покупатели» и «Накладные» имеется связь один-ко-многим по полю «Покупатель». Одной накладной может соответствовать несколько товаров. Поэтому между таблицами «Накладные» и «Отпуск товаров со склада» имеется связь один-ко-многим по полю «Номер накладной» (рис. 4.1.9).