0

Это ответ на вопрос Difference between 3NF and BCNF in simple terms (must be able to explain to an 8-year old). Почему следующая таблица в 3NF? Pizaa, Topping - это ключ-кандидат, а тип Topping частично зависит от Topping, поэтому он даже не в 2NF.Понимание нормализации базы данных. Как данная таблица 3NF?

Pizza Topping Topping Type 
-------- ---------- ------------- 
1  mozarella cheese 
1  pepperoni meat 
1  olives  vegetable 
2  mozarella meat 
2  sausage cheese 
2  peppers vegetable 

Пожалуйста, объясните подробно.

+0

Что значит тип Topping частично зависит от Topping? Частичная зависимость означает, что существует функциональная зависимость x -> y, где x - это правильная часть ключа-кандидата. Функциональная зависимость x -> y означает, что для любого заданного x существует одно значение для y. Я не вижу такого шаблона между Topping и Topping Type, или, что то же самое, между Pizza и Topping Type. – reaanb

+0

Pizza and Topping является основным ключом. mozarella не может быть мяса Topping. Следовательно, данная таблица имеет несогласованность и ее необходимо нормализовать. Учитывая Topping mozarella, тип Topping можно однозначно идентифицировать как сыр. Следовательно, верхний тип частично зависит от доливания. – Srinivas

+0

Нормализация основана на предположении, что данные являются согласованными. Если нет, отремонтировать его, прежде чем рассматривать нормализацию. – reaanb

ответ

1

Ответ, на который вы ссылаетесь, гласит, что есть две клавиши этой таблицы: (Пицца, Топпинг) и (Пицца, Тип Topping). Зависимость Topping-> Topping Type не нарушает 2NF или 3NF, потому что Topping Type является основным атрибутом (частью ключа-кандидата). 2NF и 3NF будут нарушены только в том случае, если Topping Type был неправым.

В этом примере показана существенная разница между BCNF и 3NF. BCNF касается частичных или неключевых зависимостей для всех атрибутов, а не только не-простых атрибутов.

+0

Рассматривая частичную зависимость, не должен быть атрибут prime (или non-prime) относительно выбранного ключа кандидата? Скажем, если (Pizza, Topping) является моим ключом-кандидатом, не должен ли Topping Type быть не простым относительно выбранного кандидата? – Srinivas

+0

№. Атрибут является простым, если он является частью любого ключа-кандидата, в противном случае он не является простым. – sqlvogel

Смежные вопросы