1 BDD : Problématique Liste de chèques = une BDD avec une table 1 enregistrement = =116 caractères (ou octets) Hypothèse : chèques encaissés avec 100 clients - Zone de chalandise comportant 50 villes => Taille de la BDD = octets (1000 enregistrements x 116 octets) ClientVilleDate d’achatMontant DuclosSaint-Brieuc23/11/201350,00 € ………… = 50 car. = 8 car.
2 Constat= Informations redondantes Exemples : Le nom d’un client figure autant de fois que de chèques encaissés avec ce client. Le nom d’une ville figure autant de fois que de chèques encaissés 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 chèques encaissés => Risque de perte d’intégrité des données Problèmes de tri, d’extraction Ex : Saint-Brieuc <> Saint Brieuc …
3 Eliminer les redondances Comment ? Solution / Question
4 Elimination des redondances CodeClientVille = 4 car. = 50 car. -> Elimination de la redondance sur le champ Client = créer une nouvelle table : la table Client Code clientDate d’achatMontant = 4 car. = 8 car. Relation Table Client Table Chèque
C H E Q U E Client : Duclos Ville : Saint-Brieuc Date d’achat : 23/11/2013 Montant : 50,00 € €€ 5 C L I E N T Code : 1 Client : Duclos Ville : Saint-Brieuc C H E Q U E Code client : 1 Date d’achat : 23/11/2013 Montant : 50,00 € 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 chèque de départ les champs qui caractérisent un client (Client, Ville) et on les transfert dans la table Client 4 - Dans la table Chèque de départ, on enlève les champs transférés que l’on remplace par le code Client afin d’établir la relation
6 CodeClientVille 1DuclosSaint Brieuc 2LeclercSaint-Brieuc Code client Date d’achat Montant 123/11/201350,00 € 223/11/ ,50 € 11/12/201350,00 € Table Client Table Chèque
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 7
8 Taille de la nouvelle BDD Table Client = 104 octets x 100 clients = octets Table Chèque = 20 octets x 1000 chèques = octets Taille de la BDD avec 2 tables = = octets Taille de la base quasiment divisée par 4 !!
9 Elimination des redondances suite CodeClientCp = 4 car. = 50 car. = 5 car. 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 Table Client Table Ville CpVille = 5 car. = 50 car.
10 Nouvelle base avec 3 tables Code clientDate d’achatMontant = 4 car. = 8 car. CpVille = 5 car. = 50 car. CodeClientCp = 4 car. = 50 car. = 5 car. Relation Table Chèque Table Ville Table Client Relation
11 CodeClientCp 1Duclos Leclerc22000 Code client Date d’achat Montant 123/11/201350,00 € 223/11/ ,50 € 11/12/201350,00 € Table Client Table Chèque CpVille 22000Saint-Brieuc Table Ville
12 Taille de la nouvelle BDD Table Client = 59 octets x 100 clients = 5900 octets Table Ville = 55 x 50 villes = 2750 octets Table Chèque = 20 octets x 1000 chèques = octets Taille de la BDD avec 3 tables = = octets Economie : – = (75%)
13 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 Chèques 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)
14 Règle Champs des tables : 1-1 (et non 1-plusieurs) A 1 chèque 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 montants (chèques).
15 CodeClient 1Duclos 2Leclerc Code client Date d’achat MontantCp 123/11/201350,00 € /11/ ,50 € /12/201050,00 €22000 Table Client Table Chèque CpVille 22000Saint-Brieuc Table Ville Erreur : champ Cp laissé dans la table chèque 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 chèques au lieu d’une seule fois
16 Code clientMontant = 4 car. = 8 car. CpVille = 5 car. = 50 car. CodeClientCpDate d’achat = 4 car. = 50 car. = 5 car. = 8 car. Relation Table Chèque Table Ville Table Client Relation Erreur : champ Date d’achat placé dans la table client lors de la création de la table client
17 CodeClientCpDate d’achat 1Duclos22000? 2Leclerc22000? Table Client23/11/2013 1/12/ /11/2013 … A un client correspond 1 ou plusieurs chèques, 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 chèque (la date d’achat est une caractéristique d’un chèque, pas d’un client)