© Your Copyright
Dans cette partie nous allons apprendre à :
- modéliser, structurer une base de données
- à partir d’un simple cahier des charges
dans lequel nous identifierons :
- les informations à mémoriser dans le système d’informations
- les dépendances entres ces informations liées aux contraintes exprimés par les besoins de l’entreprise
Une société de ventes par correspondance veut mettre en place un système d’informtion sur ses clients, ses produits et ses commandes.
Une première lecture du cahier des charges permet de relever les informations (attributs) à mémoriser.
Pour chaque client l’entreprise veut :
- pouvoir le retrouver par un numéro, unique à chaque client : attribut C
- une ou plusieurs adresses d’exp’edition : attribut A
- l’état de son compte (somme due ou à avoir) : attribut E
Pour chaque produit l’entreprise veut :
- identifier le produit par un numéro, unique à chaque produit : attribut P
- connaître le genre du produit (alimentaire,électro-ménager,…) : attribut G
- connaître la marque du produit : attribut M
Pour chaque commande l’entreprise veut
- une référence de commande, unique `a chaque commande : attribut R
- le numéro du client (attribut C déjà identifié)
- l” adresse d’expédition (attribut A déjà identifié)
- la date de commande : attribut D
- un numéro de produit (attribut P déjà identifié)
- une quantité commandée : attribut Q
A travers l’étude de ce cahier des charges on identifie la liste des attributs :
- \(U =(C,A,E,P,G,M,R,D,Q)\)
Un relecture du cahier des charges permet de relever un certain nombre de contraintes entre les différentes informations existantes dans l’entreprise :
un client n’a qu’un état de compte
il n’y a pas deux clients différents à une même adresse
un produit n’a qu’un seul genre et une seule marque
une commande ne concerne :
- qu’un seul client
- n’est livrée qu’à une seule adresse
- n’a qu’une seule date de livraison
pour la même commande,le même produit,le même client
- il n’y a qu’une seule quantité commandée
A partir de ce cahier des charges on peut structurer le base de données en s’appuyant sur l’identification des dépendances fonctionnelles qui apparaissent dans les contraintes relevées.
Une fois identifié toutes les DF on pourra déterminer les DFE nécessaires (couverture minimale) qui permettrons de structurer la base en s’appuyant sur une normalisation 3NF.
On relève la listes de DF détectées dans le cahier des charges.
un client n’a qu’un état de compte :
- \(C \rightarrow E\)
il n’y a pas deux clients différents à une même adresse :
- \(A \rightarrow C\)
un produit n’a qu’un seul genre et une seule marque :
- \(P \rightarrow GM\)
une commande ne concerne qu’un seul client,n’est livrée qu’à une seule adresse, n’a qu’une seule date de livraison :
- \(R \rightarrow CAD\)
pour la même commande,le même produit,le même client il n’y a qu’une seule quantité commandée :
- \(RPC \rightarrow Q\)
On a donc identifié à partir de ce cahier des charges l’ensemble des DF suivantes :
- \(C \rightarrow E\)
- \(A \rightarrow C\)
- \(P \rightarrow GM\)
- \(R \rightarrow CAD\)
- \((R,P,C) \rightarrow Q\)
A partir de ces DF on peut déduire de nouvelles DF en appliquant les axiomes d’Armstrong et ne faire apparaître que des DFE :
- Un seul attribut cible (à doite de la DF).
- pas d’attributs “superflus” à gauche de la DF.
et ne retenir que les DFE ou les attributs cibles (non-primitifs) n’apparaissent pas à gauche des DF.
On trouvera donc les DFE suivantes :
Transitivité (\(A \rightarrow C,C \rightarrow E\)) :
- \(A \rightarrow E\)
Décomposition (\(P \rightarrow GM\)) :
- \(P \rightarrow G\)
- \(P \rightarrow M\)
Décomposition (\(R \rightarrow CAD\)) :
- \(R \rightarrow C\)
- \(R \rightarrow A\)
- \(R \rightarrow D\)
Transitivité (\(R \rightarrow A, A \rightarrow E\)) :
- \(R \rightarrow E\)
Pseudo-transitivité (\(R \rightarrow C, (R,P,C) \rightarrow Q\)) :
- \((R,P) \rightarrow Q\)
On obtient donc l’ensemble de DFE suivant :
- \(R \rightarrow E\)
- \(P \rightarrow G\)
- \(P \rightarrow M\)
- \(R \rightarrow D\)
- \((R,P) \rightarrow Q\)
Avec :
- \(R \rightarrow A, A \rightarrow C, C \rightarrow E\)
On identifie à travers ces DFE qu’une clé du schéma relationnel serait (R,P)
et que nous pourrions structurer la base de la manière suivante :
- \(commandes(\underline{R},E,D)\)
- \(references(\underline{R,P},Q)\)
- \(produits(\underline{P},G,M)\)
Où nous aurions créé un schéma relationnel en 2NF :
- \((R,P,C) \rightarrow Q \Longrightarrow (R,P) \rightarrow Q\)
Sachant qu’il ne faut pas perdre les informations liées aux dépendances transitives :
- \(R \rightarrow A, A \rightarrow C, C \rightarrow E\)
On aurait donc la relation commandes
suivante :
- \(commandes(\underline{R},A,C,E,D)\)
Avec une telle structuration la base de données le schéma relationnel ne serait pas en 3NF :
- \(R \rightarrow A, A \rightarrow C, C \rightarrow E\)
- des attributs non-primitifs ne sont donc pas directement dépendant de la clé \((R,P)\).
Il faut donc répartir les différentes DFE transitives dans d’autres tables en appliquant le théorème de décomposition sans perte
- \(commandes(\underline{R},A)\)
- \(adresses(\underline{A},C)\)
- \(clients(\underline{C},E)\)
- \(quantites(\underline{R,P},Q)\)
- \(produits(\underline{P},G,M)\)
Nous aboutissons ainsi à un schéma relationnel 3NF qui permettra de retrouver les informations utiles par jointure naturelle.