isades,
Votre exemple est la reprise exacte (mais francisée) de celui qui a été donné par Chris Date dans An Introduction to Database Systems, 7th edition, servant à illustrer la différence importante entre la troisième forme normale (due à Ted Codd et datant de 1971) et la forme normale de Boyce-Codd (due encore à Ted Codd, mais avec la complicité de Raymond Boyce, et datant de 1974, peu avant le décès de celui-ci).
Comme vous le montrez correctement, la relvar R viole la BCNF. Quant au respect de la 3NF, à mon avis les choses sont moins simples à montrer si la définition dont on se sert fait intervenir la notion de transitivité, laquelle peut s’avérer délicate à interpréter (je suppose que la définition dont vous disposez de la 3NF fait intervenir cette notion). Quoi qu’il en soit, foin des scrupules, Carlo Zaniolo nous a permis de nous débarrasser de cette fichue transitivité en fournissant une définition élégante et efficace de la 3NF :
Soit R une relvar, X un sous-ensemble d'attributs de l'en-tête de R et A un attribut de cet en-tête. R est en troisième forme normale (3NF) si et seulement si, pour chaque dépendance fonctionnelle X ➔ {A} qui doit être vérifiée par R, au moins une des conditions suivantes est satisfaite :
1. A appartient à X (la dépendance fonctionnelle considérée est donc triviale).
2. X est une surclé de R.
3. A appartient à une clé candidate de R.
Observez qu’en supprimant la condition 3, on obtient une version plus restrictive, qui est justement la définition de la BCNF, chapeau Carlo !
Pour reprendre votre exemple :
{numDepartement} ➔ {nomDepartement} mais NomDepartement appartient à la clé {nomDepartement, TypeVehicule}, donc la condition 3 est satisfaite ;
{NomDepartement} ➔ {numDepartement} mais numDepartement appartient à la clé {numDepartement, TypeVehicule}, donc la condition 3 est satisfaite.
Au bout du compte, la 3NF est respectée.
En tout cas, il faut décomposer R pour que la BCNF soit elle aussi respectée, en effectuant les projections :
R1 {numDepartement, nomDepartement}
R2 {numDepartement, TypeVehicule, nb}
Ou :
R1 {numDepartement, nomDepartement}
R2 {nomDepartement, TypeVehicule, nb}
Envoyé par
isades
Comment prend-on en compte dans cet exemple la présence de plusieurs clés candidates dans la 2FN et la 3FN ?
Pour la 3NF, outre ce qui précède, à titre de complément, voyez ici, et pour la 2NF, ici.
Quant à la BCNF, voyez ici.
Vous constaterez que pour chaque définition correcte, on ne parle pas de « la » clé mais de chaque clé, ce qui devrait répondre à votre interrogation.
Envoyé par
CinePhil
Mais pourquoi torture t-on encore les étudiants avec ces trucs ? !!
Philippe, comme tu y vas ! Dans le contexte de la modélisation, l’étude de la normalisation est salutaire...
Partager