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