Определение функциональных зависимостей отношений и их нормальных форм

Я готовлюсь к тесту базы данных, и в учебном пособии есть несколько (много) упражнений по нормализации БД и функциональной зависимости, но учитель не делал никаких подобных упражнений, поэтому я бы хотел, чтобы кто-нибудь помог мне понять это для атаки остальные 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, {Агент, Код продукта, Количество_Продано} → Квалификация -

Я думаю, что это хорошее усилие.

  1. Я думаю, что POS-> Зона это правильно.
  2. Я не думаю, что {POS, Агент} → Зона совершенно права. Если вы посмотрите на пример данных и немного подумаете об этом, я думаю, вы обнаружите, что Agent-> POS и этот Agent-> Zone.
  3. Я не думаю, что {Агент, Код товара, Количество_Продано} → Квалификация совершенно правильная. Требование гласит: "Для каждого продукта, проданного агентом, ему присваивается квалификация в зависимости от продукта и проданного количества". Важной частью этого является "Квалификация в зависимости от продукта и проданного количества". Квалификация зависит от продукта и количества, поэтому {Код продукта, Количество} -> Квалификация. (Ничто в требовании не говорит мне, что квалификация может отличаться для идентичных заказов от двух разных агентов.)

Исходя из вашего комментария, я думаю, что у вас пока есть эти функциональные зависимости.

  • POS->Zone
  • Agent-> POS
  • Agent-> Zone
  • Код продукта, Количество-> Квалификация

Но вам не хватает хотя бы одного, который оказывает существенное влияние на определение ключей. Вот требование.

Два агента из одинаковых торговых точек не могут продавать один и тот же продукт.

Как вы выражаете функциональную зависимость, подразумеваемую этим требованием?

Другие вопросы по тегам