Exemple BD Stock
Exemple BD Stock
Exemple BD Stock
Nahelou Sebastien
Base de données
Gestion d'un magasin
Exemple: Une Papeterie.
✔ Présentation du projet
✔ Choix des tables, références et schéma
✔ Présentation des règles, Fonctions
✔ Requêtes, Vues
✔ Exemples d'applications
I/ Présentation du projet.
Le but de notre projet est de gérer la quasi-totalité des stocks, des ventes, des livraisons d'une
papeterie tout en prenant compte la variation du prix d'un produit ainsi que la gestion des cartes
clients et tout ceci en évitant le plus possible la redondance des informations.
Dans ce projet, nous avons choisi arbitrairement de traiter le cas d'une papeterie néanmoins la
base de données peut convenir pour tout type de magasin.
Nous avons souhaité pouvoir prendre en compte la fluctuation des prix pour se rapprocher le plus
possible de la réalité. De plus, toujours dans cet optique, un système de carte client a été mis en
place. Ainsi à partir d'un client, il est possible de générer une liste complète ou partiel de ses achats,
mais aussi de récupérer des informations importantes tel que son adresse ou son numéro de
téléphone.
De plus nous avons voulu « automatiser » le plus possible notre projet. En effet, la gestion des
stock est automatique. Aucune intervention de l'utilisateur n'est nécessaire lors d'une vente ou d'une
livraison: les stocks sont mis à jour automatiquement grâce à des règles pré-enregistrées.
Pour simplifier la lecture ainsi que l'utilisation du programme nous avons créé un certain nombre
de fonctions servant d'alias à certaines requêtes.
Enfin pour conclure, nous exposerons un exemple d'utilisation de notre base de donnée à travers
l'exemple de la papeterie grâce à une journée « type ».
II/ Structures: Tables, Références et Optimisation.
Voici un schéma graphique de notre base de donnée:
Pour certaines clés primaires, nous avons utilisé le type Serial. Il permet d'ajouter des données
sans se préoccuper de remplir la clé primaire : elle est incrémenté automatiquement
Pour éviter la redondance, nous avons séparé les tables Detail Livraison et Facture fournisseur.
Ainsi nous évitons toute redondance sur les attributs Date et NFO (numéro fournisseur)
En ce qui concerne les fluctuations de prix, nous avons décidé de stocker le prix payé par le client
lors de son passage en caisse. L'intérêt de stocker ce prix est qu'en cas de changement de prix , si
nous souhaitons éditer une ancienne facture, le prix indiqué sur la facture sera identique a celui du
passage en caisse et non au nouveau prix du magasin. Cela permet aussi d'accorder une remise
ponctuelle à un client, tout en le sauvegardant dans la base de donnée.
III/ Règles de mise à jour, Fonctions
Pour répondre au besoin de mise a jour automatique, nous avons mis en place des règles.
Les règles sont des instructions qui s'exécutent lors d'un événement (ici l'insertion) pour mettre a
jour la valeur d'un champ.
–Lors de la mise à jour du stock après une livraison pour ajouter au stock les nouvelle quantitée:
MiseAjourStockLivraison
–Lors de la mise à jour du stock après une vente pour soustraire la quantitée vendue:
MiseAjourStockVente
Exemple:
Elle met a jour le champ produit en ajoutant la nouvelle valeur a la valeur présente.
Pour éviter de modifier tous les champs, nous ajoutons la condition de l'identité des numéros
produits.
Ensuite pour améliorer la lisibilité, nous avons introduit des fonctions. Au lieu de dupliquer les
requêtes complexes, il suffit de faire un appel a la fonction désirée avec les paramètres voulus.
Exemple:
L'utilisation de cette fonction suppose qu'un seul passage en caisse peut avoir lieu simultanément.
Vue FactureFournisseur:
CREATE VIEW
magasin.vueFactureFournisseur(NF,DateFacture,NomFournisseur,TelFournisseur)
AS
SELECT NF,datef,nom,tel
FROM
(magasin.factureFournisseur NATURAL JOIN magasin.fournisseur);
Cette vue crée une table ayant pour attribut le numéro,le nom et le téléphone du fournisseur ainsi
que la date de livraison.
Cette table permet par exemple de connaître très rapidement le nom des fournisseurs qui ont livré
le jour j.
Vue TicketCaisse:
Nous nous avons écrit quelques requêtes plutôt orientées gestion du magasin tel que le CA
journalier, l'historique des vente d'un article, le nombre de client par jour ...
Aujourd'hui nous sommes le 16 février 09, il est 8h00, et notre papeterie ouvre ses portes.
8h30, Un nouveau fournisseur nous livre des imprimantes ( DELL), nous entrons donc ces
coordonnées dans la base de donnée:
SELECT Magasin.ajouterAchat(16,1);
SELECT Magasin.ajouterAchat(14,3);
Nous décidons de modifier le prix de notre imprimante qui passe a 100€ au lieu de 119€.
Il a perdu son ticket de caisse et désire ré-imprimer la totalité de ses achats. Entre temps, un
changement de prix sur l'un de ces achat a été effectué (l'imprimante DELL). Cependant le prix
payé par ce client a été sauvegardé.
Il est 19h30, notre papeterie ferme ses portes, Le directeur décide de consulter ses chiffres: