Bases de données B6
Algorithme de BERNSTEIN Exemple 1ier scénario : Considérons la relation : CLIENTCOMMANDE ( code-client, nom-client, num-commande, date-commande, adresse-client, tél_client, montant-commande, code-article, libellé ) Le concepteur a déterminé l'ensemble des dépendances fonctionnelles suivantes : DF = { code-client -> nom-client, num-commande -> code-client, num-commande -> date-commande, code-client -> adresse-client, code-client -> tél-client, code-article -> libellé, num-commande -> montant-commande } Cet ensemble, ne possédant de dépendances fonctionnelles redondantes, il correspond à la couverture minimale CM : donc CM = DF Si vous faites le graphe des dépendances fonctionnelles de la CM, vous confirmerez que la clé primaire de la relation est bien : num-commande, code-article Vous pouvez vérifier également que cette relation n'est pas en 3FN. Appliquons l'algorithme de BERNSTEIN : 1ère itération : Création d'une relation CLIENT pour toutes les dépendances fonctionnelles ayant la même source : code-client. CLIENT ( code-client, nom-client, adresse-client, tél_client ) La clé primaire de CLIENT est la source des dépendances fonctionnelles utilisées : code-client. Il reste : CM = { num-commande -> code-client, num-commande -> date-commande, code-article -> libellé, num-commande -> montant-commande } 2ème itération : Création d'une relation COMMANDE pour toutes les dépendances fonctionnelles ayant la même source : num-commande. COMMANDE ( num-commande, date-commande, montant-commande, #code-client ) La clé primaire de COMMANDE est la source des dépendances fonctionnelles utilisées : num-commande. Il reste : CM = { code-article -> libellé }
5 décembre 2003
1
Bases de données B6 3ème itération : Création d'une relation ARTICLE pour toutes les dépendances fonctionnelles ayant la même source : code-article. ARTICLE ( code-article, libellé ) La clé primaire de ARTICLE est la source des dépendances fonctionnelles utilisées : code-article. La CM étant vide, l'itération est terminée. Il reste une question : L'une des relations issues de la décomposition a-t-elle comme clé primaire, la clé primaire (num-commande, codearticle) de la relation décomposée CLIENTCOMMANDE ? réponse : non. ð Il faut créer une relation supplémentaire contenant la clé primaire num-commande, code-article : LIGNECOMMANDE ( num-commande, code-article ) Conclusion : 4 relations étaient imbriquées dans la relation CLIENTCOMMANDE : CLIENT COMMANDE ARTICLE LIGNECOMMANDE L'algorithme de BERNSTEIN a permis de mettre ces 4 relations en évidence et de les créer : elles sont toutes en 3FN.
5 décembre 2003
2
Bases de données B6 2ieme scénario : Ajoutons l'attribut quantité-commandée dans la relation : CLIENTCOMMANDE ( code-client, nom-client, num-commande, date-commande, adresse-client, tél_client, montant-commande, code-article, libellé, quantité-commandée ) Le concepteur a déterminé l'ensemble des dépendances fonctionnelles suivantes : DF = { code-client -> nom-client, num-commande -> code-client, num-commande -> date-commande, code-client -> adresse-client, num-commande, code-article -> quantité-commandée, code-client -> tél-client, code-article -> libellé, num-commande -> montant-commande } Cet ensemble, ne possédant de dépendances fonctionnelles redondantes, il correspond à la couverture minimale CM : donc CM = DF Si vous faites le graphe des dépendances fonctionnelles de la CM, vous confirmerez que la clé primaire de la relation est bien ; num-commande, code-article Vous pouvez vérifier également que cette relation n'est pas en 3FN. Appliquons l'algorithme de BERNSTEIN : 1ère itération : Création d'une relation CLIENT pour toutes les dépendances fonctionnelles ayant la même source : code-client. CLIENT ( code-client, nom-client, adresse-client, tél_client ) La clé primaire de CLIENT est la source des dépendances fonctionnelles utilisées : code-client. Il reste : CM = { num-commande -> code-client, num-commande -> date-commande, num-commande, code-article -> quantité-commandée, code-article -> libellé, num-commande -> montant-commande } ème
2
itération :
Création d'une relation COMMANDE pour toutes les dépendances fonctionnelles ayant la même source : num-commande. COMMANDE ( num-commande, date-commande, montant-commande, #code-client ) La clé primaire de COMMANDE est la source des dépendances fonctionnelles utilisées : num-commande. Il reste : CM = { num-commande, code-article -> quantité-commandée, code-article -> libellé } ème
3
itération :
Création d'une relation ARTICLE pour toutes les dépendances fonctionnelles ayant la même source : code-article. 5 décembre 2003
3
Bases de données B6 ARTICLE ( code-article, libellé ) La clé primaire de ARTICLE est la source des dépendances fonctionnelles utilisées : code-article. Il reste : CM = { num-commande, code-article -> quantité-commandée } 4ème itération : Création d'une relation LIGNECOMMANDE pour toutes les dépendances fonctionnelles ayant la même source : code-article. LIGNECOMMANDE ( #num-commande, #code-article, quantité-commandée ) La clé primaire de LIGNECOMMANDE est la source des dépendances fonctionnelles utilisées : num-commande, code-article La CM étant vide, l'itération est terminée. Il reste une question : L'une des relations issues de la décomposition a-t-elle comme clé primaire, la clé primaire (num-commande, codearticle) de la relation décomposée CLIENTCOMMANDE ? réponse : oui. ð
C'est la relation LIGNECOMMANDE. Il n'est pas nécessaire de créer une relation supplémentaire.
Conclusion : Idem 1ier scénario.
5 décembre 2003
4