UNIVERSITÉ DE SHERBROOKE DÉPARTEMENT D INFORMATIQUE IFT 159 - Analyse et programmation Devoir session Base de données Travail présenté à Marc Frappier Par Olivier Charbonneau Clément Zotti le 29 mars 2012
Description du système : La pharmacie gère, des clients, des employés, des produits, des commandes, des réservations, des fournisseurs, des caisses, des assurances et des ordonnances. Un client possède une assurance, des ordonnances et une identité unique. Il peut aussi passer une réservation («téléphone», «en ligne», «sur place») a un employé. Un employé possède une identité unique, une caisse qui lui est associé, et une fonction («gérant», «caissier», «livreur») avec plusieurs taches. Il peut aussi produire une facture pour une réservation, mettre à jour les produits de la pharmacie, passé des commandes aux fournisseurs et valider les ordonnances des clients (en fonction de sa fonction). Les réservations passées à la pharmacie peuvent être livré ou alors prise sur place. Le fournisseur en fonction de la commande qu un employé lui passe livre les produits à la pharmacie. Le système doit permettre de connaitre toutes les ordonnances d un client, et de savoir leur état («valide», «pas valide»). Il doit aussi permettre de connaitre tout les commandes qu un employé passe à un fournisseur et de connaitre la quantité et le produit livré.
Employe noemploye(c1) TauxHoraire DateEmbauche DateDebauche Client noclient(c1) Fournisseur nofournisseur(c1) nom typef Produits noproduit(c1) prix nom description surordonnance Quantité Facture nofacture(c1) QuantiteProduit DateFacture Commande nocommande(c1) quantité DateLivraison Fonction nofonction(c1) nom Reservation noreservation(c1) typereservation DateReservation Identité NAS(c1) Prenom Initiale Ordonnance noordonnance(c1) noproduit(c1) posologie etat DateDebut DateFin Assurances noassurance(c1) nom TauxRembourssement Caisse nocaisse(c1) MontantInitial MontantFinal 0..1 0..1 Possède Possède a Valide Possède 0..* 0..*
Description des entités et associations L entité Assurances contient les données de remboursement pour ses clients. L entité Client est une personne qui vient à la pharmacie pour acheter des produits. L entité Identité permet d identifié une personne de manière unique. L entité Caisse contient le montant en argent. L entité Fonction décrit la tache que peut faire un employé. L entité Employé est une personne travaillant à la pharmacie. L entité faible Réservation a pour parent l entité Employé et Client. Elle contient les réservations effectués par un client a un employé. L entité Facture contient les produits achetés par un client. L entité faible Ordonnance contient les médicaments et la posologie pour un client. L entité Produit contient la liste des produits que peut vendre la pharmacie. L entité Fournisseur contient la liste des fournisseurs que la pharmacie possède. L entité faible Commande contient les commandes qu un employé a passé à un fournisseur. L association Assurance-Client, montre qu un client possède une et une seule assurance. L association Client-Identité, montre permet l identification d un client. L association Identité-Employe, permet l identification d un employé. L association Employe-Caisse, permet d associé une caisse à un seul employé. L association Employe-Fonction, décrit les taches que peut faire un employé. L association Ordonnance-Produit, permet d associer plusieurs produit à une ordonnance. L association Commande-Produits, permet d ajouter des produits à une commande. L association Facture-Produits, permet a une facture d avoir plusieurs produit. L association Employe-Ordonnance, permet a l employé de valider l ordonnance fournie par un client. L association Employe-Facture, permet a l employé de produire une facture. L association Facture-Reservation, permet d associé un achat à une facture.
DROP TABLE Identite CASCADE ; CREATE TABLE Identite( NAS VARCHAR(20) NOT NULL, Prenom VARCHAR(20) NOT NULL, Initiale CHAR(2), CONSTRAINT clenas PRIMARY KEY (NAS) DROP TABLE Assurance CASCADE; CREATE TABLE Assurance( noassurance NUMERIC(8), VARCHAR(8) NOT NULL, TauxRemboursement NUMERIC(3,2) CHECK( TauxRemboursement >= 0.00 AND TauxRemboursement <= 1.00), CONSTRAINT cleassurance PRIMARY KEY(noAssurance) DROP TABLE Produit CASCADE ; CREATE TABLE Produit( noproduit Prix NUMERIC(5,2) NOT NULL, VARCHAR(9) NOT NULL, Description VARCHAR(9), SurOrdonnance BOOLEAN, Quantite NUMERIC(5) CHECK( Quantite >= 0.00), CONSTRAINT cleproduit PRIMARY KEY (noproduit) DROP TABLE Client CASCADE; CREATE TABLE Client( noclient NUMERIC(8), NAS noassurance NUMERIC(8), CONSTRAINT cleclient PRIMARY KEY(noClient), CONSTRAINT clefnas FOREIGN KEY (NAS)REFERENCES Identite (NAS), CONSTRAINT clefassurance FOREIGN KEY (noassurance)references Assurance (noassurance) DROP TABLE Fonction CASCADE ; CREATE TABLE Fonction( nofonction VARCHAR(9) NOT NULL, CONSTRAINT clefonction PRIMARY KEY (nofonction) DROP TABLE Caisse CASCADE ; CREATE TABLE Caisse( nocaisse
MontantInitial NUMERIC(4) CHECK( MontantInitial >= 0.00) NOT NULL, MontantFinal NUMERIC(4) NOT NULL, CONSTRAINT clecaisse PRIMARY KEY (nocaisse) DROP TABLE Employe CASCADE; CREATE TABLE Employe( noemploye nofonction nocaisse NAS TauxHoraire NUMERIC(3) CHECK( TauxHoraire >= 0.00) NOT NULL, DateEmbauche DATE NOT NULL, DateDebauche DATE, CONSTRAINT cleemploye PRIMARY KEY(noEmploye), CONSTRAINT cleffonction FOREIGN KEY (nofonction) REFERENCES Fonction (nofonction), CONSTRAINT clefcaisse FOREIGN KEY (nocaisse) REFERENCES Caisse (nocaisse), CONSTRAINT clefnas FOREIGN KEY (NAS)REFERENCES Identite (NAS) DROP TABLE Facture CASCADE ; CREATE TABLE Facture( nofacture noproduit noemploye DateFacture TIMESTAMP NOT NULL, QuantiteProduit NUMERIC(9) NOT NULL, CONSTRAINT clefacture PRIMARY KEY (nofacture,noproduit), CONSTRAINT clefproduit FOREIGN KEY (noproduit)references Produit (noproduit), CONSTRAINT clefemploye FOREIGN KEY (noemploye)references Employe (noemploye) DROP TABLE Reservation CASCADE; CREATE TABLE Reservation( noreservation noproduit noclient noemploye nofacture typereservation VARCHAR(9) CHECK( typereservation = 'internet' OR typereservation = 'magasin' OR typereservation = 'livraison'), DateReservation TIMESTAMP NOT NULL, DateLivraison TIMESTAMP, CONSTRAINT clereservation PRIMARY KEY (noreservation,noemploye,noclient),
CONSTRAINT cleffacture FOREIGN KEY (nofacture,noproduit) REFERENCES Facture (nofacture, noproduit), CONSTRAINT clefemploye FOREIGN KEY (noemploye) REFERENCES Employe (noemploye), CONSTRAINT clefclient FOREIGN KEY (noclient) REFERENCES Client (noclient) DROP TABLE Ordonnance CASCADE ; CREATE TABLE Ordonnance( noordonnance noclient noemploye noproduit Posologie Etat BOOLEAN NOT NULL, DateDebut DATE NOT NULL, DateFin DATE NOT NULL, CONSTRAINT cleordonnance PRIMARY KEY (noordonnance), CONSTRAINT clefproduit FOREIGN KEY (noproduit)references Produit (noproduit), CONSTRAINT clefemploye FOREIGN KEY (noemploye) REFERENCES Employe (noemploye), CONSTRAINT clefclient FOREIGN KEY (noclient) REFERENCES Client (noclient) DROP TABLE Fournisseur CASCADE ; CREATE TABLE Fournisseur( nofournisseur VARCHAR(9), Typef VARCHAR(9), CONSTRAINT clefournisseur PRIMARY KEY (nofournisseur) DROP TABLE Commande CASCADE ; CREATE TABLE Commande( nocommande noproduit nofournisseur noemploye Quantite DateLivraison DATE, CONSTRAINT clecommande PRIMARY KEY (nocommande, nofournisseur, noemploye, noproduit), CONSTRAINT cleffournisseur FOREIGN KEY (nofournisseur) REFERENCES Fournisseur (nofournisseur), CONSTRAINT clefemploye FOREIGN KEY (noemploye) REFERENCES Employe (noemploye), CONSTRAINT clefproduit FOREIGN KEY (noproduit) REFERENCES Produit (noproduit)