Vous êtes sur la page 1sur 4

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, code-
article) 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, code-
article) 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