Bonsoir,
Citation:
Je te remercie pour ces explications détaillées, parfois incompréhensible car je ne maitrise pas bien tous ces termes et jargons.
Désolé, mais la théorie de la normalisation a été créée par des mathématiciens et s’applique aux relations dans leur acception mathématique. Les explications fournies pour hghlander03 devraient suffire, mais on peut les détailler...
Concept de dépendance fonctionnelle
Je redonne ici la définition de la dépendance fonctionnelle, qui est l’instrument, le tournevis à normaliser.
Soit X et Y deus sous-ensembles quelconques de l’en-tête d’une table S.
S satisfait à la dépendance fonctionnelle (DF) X → Y si et seulement si, à chaque fois que deux tuples (lignes) de S ont même valeur pour X, alors ils ont même valeur pour Y (X est appelé le déterminant et Y le dépendant, on dit encore que X détermine Y).
Je rappelle que l’en-tête d’une table consiste en la liste des attributs (colonnes) de la table. Par exemple, la table Source a pour en-tête :
{Id, Name, Type, Language, Country}
Je vous prie de noter l’utilisation des accolades, car l’en-tête de la table est un ensemble (au sens de la théorie des ensembles), dont les éléments sont Id, Name, Type, Language et Country.
Si Name représente le nom de la source, par exemple El periodico de las bases de datos relacionales, The crazy relational journal, et si pour chaque valeur de Name, l’attribut Language ne peut prendre qu'une seule valeur (respectivement espagnol, anglais) alors on a la dépendance fonctionnelle :
{Name} → {Language}
Notez à nouveau l’emploi des accolades, car {Name} et {Language} représentent encore des ensembles, des singletons en l’occurrence, c'est-à-dire composés d’un seul élément.
En revanche, si pour une valeur de l’attribut Name on peut avoir plus d’une valeur pour l’attribut Language, alors la dépendance fonctionnelle ci-dessus n’existe pas.
Ce qui sûr, c’est que par définition, parce que {Id} est clé (raccourci pour clé candidate), alors on a les dépendances fonctionnelles suivantes :
{Id} → {Name}
{Id} → {Type}
{Id} → {Language}
{Id} → {Country}
Réciproquement, si {Id} détermine fonctionnellement chaque {Attribut} de la table Source, alors {Id} est une clé (candidate) de la table.
Dépendance fonctionnelle triviale
Je rappelle ce que j’ai précisé dans la discussion avec highlander03 :
La DF : X → Y est triviale si et seulement si Y est un sous-ensemble (non nécessairement strict) de X. Une telle DF est toujours vraie.
Dans le cas de la table Source les dépendances fonctionnelles suivantes répondent à cette définition :
{Id} → {Id}
{Name} → {Name}
{Language} → {Language}
{Name, Language} → {Language}
{Name, Language} → {Name}
Etc.
Définition de la surclé
Je reprends la définition donnée dans la discussion avec highlander03 :
Soit SK un sous-ensemble (non strict) de l’entête d’une table S ; SK est une surclé de S si et seulement si deux tuples (lignes) distincts de S ne peuvent avoir la même valeur pour SK. Les surclés doivent donc satisfaire à une contrainte d'unicité.
Application à la table Source :
Soit SK un sous-ensemble (non strict) d’attributs de l’en-tête {Id, Name, Type, Language, Country} de cette table. SK est une surclé de Source si et seulement si deux lignes distinctes de Source ne peuvent avoir la même valeur pour SK.
Le sous-ensemble {Id} est-il une surclé de la table Source ? Oui, car on ne peut pas trouver deux lignes ayant la même valeur pour {Id}.
Le sous-ensemble {Language} est-il une surclé de la table Source ? Non, dans la mesure où deux sources n'ayant pas le même nom peuvent être rédigées dans la même langue.
Le sous-ensemble {Language, Type} est-il une surclé de la table Source ? Non, dans la mesure où deux sources n'ayant pas le même nom peuvent être rédigées dans la même langue et être du même type.
Le sous-ensemble {Language, Type, Country} est-il une surclé de la table Source ? Non, dans la mesure où deux sources n'ayant pas le même nom peuvent être rédigées dans la même langue, être du même type et être publiées dans le même pays.
Le sous-ensemble {Name} est-il une surclé ? Oui si deux sources ne peuvent pas porter le même nom, non dans le cas contraire.
A supposer que deux sources puissent porter le même nom, sauf si elles sont publiées dans le même pays : le sous-ensemble {Name} n’est pas une surclé, mais la paire {Name, Country} en est une si en plus les dépendances fonctionnelles suivantes sont vérifiées :
{Name, Country} → {Type}
{Name, Country} → {Language}
{Name, Country} → {Id}
Maintenant, une chose est sûre, un triplet tel que
{Name, Country, Id} → {Type}
est une surclé, car il contient le sous-ensemble {Id} qui à lui seul garantit la contrainte d’unicité caractérisant les surclés.
Définition de la BCNF (forme normale de Boyce-Codd)
Là aussi je rappelle la définition fournie à highlander03 :
Une table S est en forme normale de Boyce-Codd (BCNF) si et seulement si pour chaque dépendance fonctionnelle non triviale X → Y satisfaite par S, X est une surclé de S.
Autrement dit, à vous de dresser l’inventaire exhaustif des dépendances fonctionnelles de la table Source, en laissant tomber celles qui sont triviales. Ceci fait, vérifiez si le déterminant (la partie gauche) de chacune de ces dépendances fonctionnelles représente une surclé. A ce moment-là vous serez à même de vous prononcer sur le respect de la normalisation par la table.
Citation:
Je ne connais que les formes normalisées jusqu'à 3N.
J’ai parlé jusqu’ici de la BCNF, plus contraignante que la 3NF.
Reformulons ainsi cette BCNF :
Soit T une table, X un sous-ensemble d’attributs de l’en-tête de T et A un attribut de cet en-tête. T est en forme normale de Boyce-Codd (BCNF) si et seulement si, pour chaque dépendance fonctionnelle X → {A} vérifiée par T, au moins une des conditions suivantes est satisfaite :
1. A est un élément de X (cette dépendance fonctionnelle est donc triviale).
2. X est une surclé de T.
L'énoncé de la 3NF est le même, augmenté d'une chance supplémentaire, donc une contrainte en moins :
Soit T une table, X un sous-ensemble d’attributs de l’en-tête de T et A un attribut de cet en-tête. T est en troisième forme normale (3NF) si et seulement si, pour chaque dépendance fonctionnelle X → {A} vérifiée par T, au moins une des conditions suivantes est satisfaite :
1. A est un élément de X (cette dépendance fonctionnelle est donc triviale).
2. X est une surclé de T.
3. A appartient à une clé candidate de T.
Les deux définitions qui précèdent montrent que la BCNF implique la 3NF, autrement dit vous ne devriez pas avoir de difficulté pour passer de celle que vous connaissez — la moins contraignante — à la plus contraignante, puisqu'il vous suffit en l'occurrence de faire abstraction de la 3e condition.
Pour mémoire (cf. encore la discussion avec highlander03), une clé candidate K est une surclé devant vérifiant une contrainte dite d’irréductibilité : K ne doit pas contenir de sous-ensemble strict vérifiant lui aussi la contrainte d’unicité imposée aux surclés.