Aller au contenu

UGA - MIASHS - S7 - BDD - Pierre Blarre

Exemple

Icône Présentation
1 / 1

Place aux concepts au travers d’un exemple

Considérons le bon de commande suivant :

Bon de Commande



On peut identifier des données spécifiques à des entités distinctes :

Bon de Commande avec entités mise en évidence

Décomposition en tables

Les bases de données relationnelles sont composées de tables (autrement dit des tableaux).

Essayons de décomposer ce bon de commande en tables, en fonction des entités identifiées précédemment (Données de la commande, donnéees du client, données d’un détail). On obtiendrait :

Clients
numeronomadresse
2 Vincent Bouvier 53, rue Emmanuelle Monnier 02510 Lombard-sur-Leleu
Commandes
numerodatetotal
5 29/07/2024 €166.00
Détails
numero produitintituléprixquantitésous-total
1 T-shirt €42.00 2 €84.00
3 Chaussures €46.00 1 €46.00
4 Casquette €18.00 2 €36.00

Cette première décomposition n’est pas satisfaisante…

  • En l’état il est impossible de reconstruire le document initial

    • Comment récupérer le client d’une commande puisque nous avons extrait et rangé ailleurs le fragment décrivant ce client ?
    • Comment identifier la commande de laquelle nous avons extrait un détail ?
      • il manque des données de références pour effectuer des liaisons entre les données
  • Certaines données sont calculées, e.g., le total de la commande et les sous-totaux des détails

    • il n’est pas nécessaire de les stocker
Mettons à jour nos tables en prenant ces remarques en considération.

On va aussi ajouter un bon de commande supplémentaire (soit en ajoutant un client, une commande et des détails en plus) pour étoffer notre exemple

Clients
numeronomadresse
2 Vincent Bouvier 53, rue Emmanuelle Monnier 02510 Lombard-sur-Leleu
1 Marie Dupont 12, rue de la Paix 75000 Paris
Commandes
numerodatenumero client
5 29/07/2024 2
2 08/09/2024 1
Détails
numero commandenumero produitnom produitprixquantité
5 1 T-shirt €42.00 2
5 3 Chaussures €46.00 1
5 4 Casquette €18.00 2
2 3 Chaussures €46.00 1
2 4 Casquette €18.00 3
2 5 Sac à dos €48.00 3

Un résultat prometteur, mais

Certaines données sont stockées de manière redondantes dans les données de détails

Les colonnes nom produit et prix sont inutilement répétées

  • sources d’erreurs lors des mises à jour
  • inutile et dangereux
Certaines données ne sont pas stockées de manière atomique

La colonne adresse du client contient une adresse complète

  • il serait plus judicieux de la décomposer en plusieurs colonnes (numero, rue, code postal, ville)
  • Ceci facilterait les recherches et les tris

Il serait plus pertinent de construire une 4ème table pour stocker de manière unique les informations relatives aux produits, et de créér plusieurs attributs pour l’adresse du client.




Données des commandes
Commandes
numerodatenumero client
5 29/07/2024 2
2 08/09/2024 1
Données des clients
Clients
numeronomruecode postalville
2 Vincent Bouvier 53, rue Emmanuelle Monnier 02510 Lombard-sur-Leleu
1 Marie Dupont 12, rue de la Paix 75000 Paris
Données des détails des commandes
Détails
numero commandenumero produitquantité
5 1 2
5 3 1
5 4 2
2 3 1
2 4 3
2 5 3
Données des produits
Produits
numeronomprix
1 T-shirt €42.00
3 Chaussures €46.00
4 Casquette €18.00
5 Sac à dos €48.00

Ce résultat est satisfaisant !

  • Aucune donnée n’est dupliquée, hormis les données qui font références à d’autres tables.
  • On peut reconstruire les bons de commandes originaux en utilisant les références (numeros de clients, de commandes et de produits) et en calculant les totaux en multipliant les quantités commandées par les prix des produits

Conclusions

  • Une base de données est constituée d’un ensemble de tables
  • Chaque table contient les données relatives à des entités de même nature
  • Les lignes d’une table peuvent faire référence chacune à une ligne d’une autre table
  • On évite de stocker les informations qui peuvent être calculées