Определение функциональных зависимостей отношений и их нормальных форм
Я готовлюсь к тесту базы данных, и в учебном пособии есть несколько (много) упражнений по нормализации БД и функциональной зависимости, но учитель не делал никаких подобных упражнений, поэтому я бы хотел, чтобы кто-нибудь помог мне понять это для атаки остальные 16 проблем.
1) Дана следующая логическая схема: Отношение product_sales
POS Zone Agent Product_Code Qualification Quantity_Sold
123-A Zone-1 A-1 P1 8 80
123-A Zone-1 A-1 P1 3 30
123-A Zone-1 A-2 P2 3 30
456-B Zona-1 A-3 P1 2 20
456-B Zone-1 A-3 P3 5 50
789-C Zone-2 A-4 P4 2 20
Предполагая, что: • Точки продаж сгруппированы в Зону. • В каждой торговой точке есть агенты. • Каждый агент работает в одном POS. • Два агента из одинаковых торговых точек не могут продавать один и тот же продукт. • Для каждого продукта, проданного агентом, ему присваивается квалификация в зависимости от продукта и проданного количества.
а) Укажите 4 функциональных зависимости присутствуют.
б) Какова нормальная форма этой структуры.
2 ответа
Чтобы начать находить 4 функциональные зависимости, подумайте, какие атрибуты зависят от другого атрибута:
Например: Зона зависит от POS? (если это так, POS -> Zone) или POS зависит от зоны? (в этом случае Зона -> POS).
Четыре из пяти ваших утверждений что-то говорят о зависимости между атрибутами (или комбинациями нескольких атрибутов).
Что касается нормализации, то здесь есть (относительно) понятное руководство. Фраза "ключ, весь ключ и ничего, кроме ключа" также является хорошим способом запоминания 1-й, 2-й и 3-й нормальных форм.
В своем комментарии вы сказали
Ну, согласно теории, которую я прочитал, я думаю, что это может быть, но у меня есть много сомнений: POS → Зона, {POS, Агент} → Зона, Агент → POS, {Агент, Код продукта, Количество_Продано} → Квалификация -
Я думаю, что это хорошее усилие.
- Я думаю, что POS-> Зона это правильно.
- Я не думаю, что {POS, Агент} → Зона совершенно права. Если вы посмотрите на пример данных и немного подумаете об этом, я думаю, вы обнаружите, что Agent-> POS и этот Agent-> Zone.
- Я не думаю, что {Агент, Код товара, Количество_Продано} → Квалификация совершенно правильная. Требование гласит: "Для каждого продукта, проданного агентом, ему присваивается квалификация в зависимости от продукта и проданного количества". Важной частью этого является "Квалификация в зависимости от продукта и проданного количества". Квалификация зависит от продукта и количества, поэтому {Код продукта, Количество} -> Квалификация. (Ничто в требовании не говорит мне, что квалификация может отличаться для идентичных заказов от двух разных агентов.)
Исходя из вашего комментария, я думаю, что у вас пока есть эти функциональные зависимости.
- POS->Zone
- Agent-> POS
- Agent-> Zone
- Код продукта, Количество-> Квалификация
Но вам не хватает хотя бы одного, который оказывает существенное влияние на определение ключей. Вот требование.
Два агента из одинаковых торговых точек не могут продавать один и тот же продукт.
Как вы выражаете функциональную зависимость, подразумеваемую этим требованием?