Table passage en caisse BDD : Problématique Liste de passages en caisse = une BDD avec une table : Table passage en caisse 1 enregistrement = 50+50+8+8 =116 caractères (ou octets) Hypothèse : 1000 passages en caisse avec 100 clients - Zone de chalandise comportant 50 villes => Taille de la BDD = 116 000 octets (1000 enregistrements x 116 octets) Client Ville Date d’achat Montant Duclos Saint-Brieuc 23/11/2013 50,00 € … = 50 car. = 8 car.
= Informations redondantes Constat = Informations redondantes Exemples : Le nom d’un client figure autant de fois que de passages en caisse de ce client. Le nom d’une ville figure autant de fois que de passages en caisse avec des clients de cette ville … Conséquences des redondances Taille de la base de données (occupation de place, ralenti les traitements) Problèmes de mise à jour : Ex : un client change de ville => effectuer autant de modifications que de passages en caisse => Risque de perte d’intégrité des données Problèmes de tri, d’extraction Ex : Saint-Brieuc <> Saint Brieuc …
Eliminer les redondances Solution / Question Eliminer les redondances Comment ?
Elimination des redondances -> Elimination de la redondance sur le champ Client = créer une nouvelle table : la table Client Relation Code Client Ville = 4 car. = 50 car. Code client Date d’achat Montant = 4 car. = 8 car. Table Client Table Passage en caisse
C L I E N T Code : 1 Client : Duclos Ville : Saint-Brieuc PASSAGE EN CAISSE Client : Duclos Ville : Saint-Brieuc Date d’achat : 23/11/2013 Montant : 50,00 € €€ C L I E N T Code : 1 Client : Duclos Ville : Saint-Brieuc Afin d’éliminer la redondance sur client : 1 - On créé une nouvelle table : la table Client 2 - Dans cette nouvelle table on commence par ajouter un champ : le code client 3 - On identifie dans la table Passage en caisse de départ les champs qui caractérisent un client (Client, Ville) et on les transfert dans la table Client 4 - Dans la table Passage en caisse de départ, on enlève les champs transférés que l’on remplace par le code Client afin d’établir la relation PASSAGE EN CAISSE Code client : 1 Date d’achat : 23/11/2013 Montant : 50,00 €
Table Passage en caisse Table Client Code Client Ville 1 Duclos Saint Brieuc 2 Leclerc Saint-Brieuc Table Passage en caisse Code client Date d’achat Montant 1 23/11/2013 50,00 € 2 199,50 € 1/12/2013
Le nouveau champ Code client Il faut prévoir une taille de code (nombre de caractères du code) permettant d’attribuer un code différent à chacun des 100 clients. Avec un code numérique, il faut donc un minimum de 3 caractères (Code 1, Code 2, …, Code 100, … Code 999) Pourquoi le choix d’un code sur 4 caractères ? Afin de se laisser une marge si un jour il y a plus de 999 clients, autant prévoir plus large dès la conception de la BDD
Taille de la nouvelle BDD Table Client = 104 octets x 100 clients = 10 400 octets Table Passage en caisse = 20 octets x 1000 passages = 20 000 octets Taille de la BDD avec 2 tables = 10 400 + 20 000 = 30 400 octets Taille de la base quasiment divisée par 4 !!
Elimination des redondances suite Identifier d’éventuelles redondances au sein des tables résultantes. -> Table Client : redondance sur le champ Ville => créer une nouvelle table : la table Ville Relation Cp Ville = 5 car. = 50 car. Code Client Cp = 4 car. = 50 car. = 5 car. Table Ville Table Client
Nouvelle base avec 3 tables Code client Date d’achat Montant = 4 car. = 8 car. Relation Table Passage en caisse Relation Code Client Cp = 4 car. = 50 car. = 5 car. Cp Ville = 5 car. = 50 car. Table Client Table Ville
Table Passage en caisse Table Client Code Client Cp 1 Duclos 22000 2 Leclerc Table Ville Cp Ville 22000 Saint-Brieuc Table Passage en caisse Code client Date d’achat Montant 1 23/11/2013 50,00 € 2 199,50 € 1/12/2013
Taille de la nouvelle BDD Table Client = 59 octets x 100 clients = 5900 octets Table Ville = 55 x 50 villes = 2750 octets Table Passage en caisse = 20 octets x 1000 passages = 20 000 octets Taille de la BDD avec 3 tables = 5900 + 2750 + 20000 = 28 650 octets Economie : 116 000 – 28 650 = 87 350 (75%)
Suite et fin … Situation finale avec 3 tables. Plus de redondances à l’exception des codes : CP dans la table Client Code client et Date d’achat dans la table Passage en caisse Pas possible de faire ‘plus petit’ qu’un code Les codes ne sont modifiés qu’en cas de changement de codification (évènement exceptionnel)
Règle Champs des tables : 1-1 (et non 1-plusieurs) A 1 passage en caisse correspond 1 et un seul code client, une et une seule date d’achat, un et un seul montant A 1 client correspond 1 et un seul code client, un et un seul client (Nom), 1 et un seul Code postal A 1 ville correspond 1 et un seul Code postal, une et une seule Ville (Nom) => Si on avait par exemple le champ Montant dans la table client, ce serait une erreur, car à 1 client correspond 1 ou plusieurs passages en caisse.
Table Client Code Client 1 Duclos 2 Leclerc Table Ville Cp Ville 22000 Saint-Brieuc Table Passage en caisse Code client Date d’achat Montant Cp 1 23/11/2013 50,00 € 22000 2 199,50 € 1/12/2010 Erreur : champ Cp laissé dans la table Passage en caisse au lieu de le placer dans la table client lors de la création de la table client => Stockage du Cp d’un client pour chacun de ses passage en caisse au lieu d’une seule fois
Erreur : champ Date d’achat placé dans la table client lors de la création de la table client Code client Montant = 4 car. = 8 car. Relation Table Passage en caisse Relation Code Client Cp Date d’achat = 4 car. = 50 car. = 5 car. = 8 car. Cp Ville = 5 car. = 50 car. Table Client Table Ville
Table Client 23/11/2013 1/12/2013 Code Client Cp Date d’achat 1 Duclos 22000 ? 2 Leclerc 15/11/2013 … A un client correspond 1 ou plusieurs passages en caisse, et donc plusieurs dates d’achat. Sur la fiche d’un client, il n’y a la place que pour une seule date => problème ! => Le champ Date d’achat doit être dans la table passage en caisse (la date d’achat est une caractéristique d’un passage en caisse, pas d’un client)