Votre pizza peut avoir exactement trois types de garniture:
- un type de fromage
- un seul type de viande
- un type de légume
Nous avons donc commander deux pizzas et choisissez les garnitures suivantes:
Pizza Topping Topping Type
-------- ---------- -------------
1 mozarella cheese
1 pepperoni meat
1 olives vegetable
2 mozarella meat
2 sausage cheese
2 peppers vegetable
Attendez une seconde, mozzarella ne peut pas être à la fois un fromage et viande! Et la saucisse n'est pas un fromage!
Nous devons éviter que ces sortes de fautes, de faire de mozzarella toujours être de fromage. Nous devrions utiliser un tableau distinct pour cela, nous avons donc écrire que fait dans un seul endroit.
Pizza Topping
-------- ----------
1 mozarella
1 pepperoni
1 olives
2 mozarella
2 sausage
2 peppers
Topping Topping Type
---------- -------------
mozarella cheese
pepperoni meat
olives vegetable
sausage meat
peppers vegetable
Re votre commentaire:
Votre question nécessite qu'un enfant de 8 ans pourrait comprendre l'explication. :-)
FNBC agit différemment de 3FN seulement lorsqu'il y a plusieurs chevauchement candidat clés.
La raison en est que la dépendance fonctionnelle X -> Y
a, certes, si Y
est un sous-ensemble de l' X
. Donc dans une table qui n'a qu'un seul candidat à la clé et est en 3FN, il est déjà en FNBC, car il n'y a pas de colonne (clé ou non-clé) qui est fonctionnellement dépendant de rien d'ailleurs que les principaux.
Parce que chaque pizza doit avoir exactement un de chaque garniture type, nous savons que (Pizza, Garniture Type) est une clé candidate. Nous savons aussi intuitivement que la garniture ne peut pas appartenir à différents types en même temps. (Pizza, Garniture) doit être unique et, par conséquent, est également une clé candidate. Nous avons donc les deux se chevauchent candidat clés.
J'ai montré une anomalie où nous avons marqué mozzarella comme le mauvais type de garniture. Nous savons que c'est mal, mais la règle qui fait mal, c'est une dépendance Topping -> Topping Type
qui n'est pas valide dépendance pour FNBC pour cette table. C'est une dépendance à quelque chose d'autre qu'un ensemble de clé candidate.
Donc, pour résoudre ce problème, nous prenons Type de Garniture de la pizza de table et d'en faire un attribut non-clé dans un des Garnitures de tableau.