DIFT 3030 Bases de données Correction Travail pratique #1 Partir I
Transcription
DIFT 3030 Bases de données Correction Travail pratique #1 Partir I
DIFT 3030 Bases de données Correction Travail pratique #1 Partir I : LDD Q1 : Construction du schéma de la base e-commerce DROP TABLE DROP TABLE DROP TABLE DROP TABLE DROP TABLE DROP TABLE Article CASCADE CONSTRAINTS; Client CASCADE CONSTRAINTS; Commande CASCADE CONSTRAINTS; LigneDeCommande CASCADE CONSTRAINTS; Facture CASCADE CONSTRAINTS; Paiement CASCADE CONSTRAINTS; CREATE TABLE Article (codeA number, designation varchar2(60) NOT NULL, marque varchar2(30) NOT NULL, prixUnitaire decimal(10,2), quantiteDispo number, CONSTRAINT pk_article PRIMARY KEY(codeA), CONSTRAINT ck_design_marque UNIQUE (designation, marque) ); CREATE TABLE Client (login varchar2(20), password varchar2(20) NOT NULL, nom varchar2(20) NOT NULL, courriel varchar2(50) NOT NULL, nombreConn number, adresse varchar2(50) NOT NULL, CONSTRAINT pk_client PRIMARY KEY(login), CONSTRAINT ck_nom_adresse UNIQUE (nom, adresse), CONSTRAINT ck_courriel UNIQUE (courriel) ); CREATE TABLE Commande (codeC number, login varchar2(20), dateC date DEFAULT sysdate, CONSTRAINT pk_commande PRIMARY KEY(codeC), CONSTRAINT fk_commande_client FOREIGN KEY (login) REFERENCES Client (login) ON DELETE CASCADE ); CREATE TABLE LigneDeCommande (codeC number, codeA number, quantite number NOT NULL, CONSTRAINT quantite CHECK(quantite < 100), CONSTRAINT pk_ligneDeCommande PRIMARY KEY(codeC, codeA), CONSTRAINT fk_ligneDeCommande_commande FOREIGN KEY (codeC) REFERENCES COMMANDE (codeC) ON DELETE CASCADE, CONSTRAINT fk_ligneDeCommande_article FOREIGN KEY (codeA) REFERENCES ARTICLE (codeA) ON DELETE CASCADE ); CREATE TABLE Facture (codeF number, codeC number, dateF date DEFAULT sysdate, montant decimal(10,2) NOT NULL, CONSTRAINT check_Facture CHECK (dateF < '10-feb-2005'), CONSTRAINT pk_facture PRIMARY KEY(codeF), CONSTRAINT fk_facture_commande FOREIGN KEY (codeC) REFERENCES Commande (codeC) ON DELETE CASCADE ); CREATE TABLE Paiement (codeP number, codeF number, dateP date DEFAULT sysdate, montant decimal(10,2) NOT NULL, CONSTRAINT pk_paiement PRIMARY KEY(codeP), CONSTRAINT fk_paiement_commande FOREIGN KEY (codeF) REFERENCES Facture (codeF) ON DELETE CASCADE ); Q2 : Insertion de données dans la base INSERT INTO ARTICLE VALUES (100, 'Intel Pentium 4 2.8GHz Computer', 'HP pavilion', 699.95, 12); INSERT INTO ARTICLE VALUES (101, 'AMD Athlon 64 3000+ 1.8GHz Notebook', 'Compaq Presario', 1599.99, 3); INSERT INTO ARTICLE VALUES (102, 'DSC-P73 4.1MP Digital Camera', 'Sony Cybershot', 299.99, 30); INSERT INTO ARTICLE VALUES (103, 'PV-GS9 Digital Palmcorder Camcorder', 'Panasonic', 499.95, 13); INSERT INTO ARTICLE VALUES (104, '1GB JumpDrive Secure USB 2.0 Drive', 'Lexar', 79, 600); INSERT INTO ARTICLE VALUES (105, '1GB iPod Shuffle', 'Apple', 199.99, 0); INSERT INTO ARTICLE VALUES (106, '500-Watt Dolby Digital Receiver, 6-Speaker System', 'Yamaha', 900, 19); INSERT INTO CLIENT VALUES ('bondj', 'jamesB', 'James bond', '[email protected]', 3, '1030 rue belle aventure, Montréal, Canada'); INSERT INTO CLIENT VALUES ('breutoniereh', 'heleneR', 'Helene Bretoniere', '[email protected]', 10, '56 rue de l’église, paris, France'); INSERT INTO CLIENT VALUES ('skywalkerl', 'lucs', 'Luc Skywalker', '[email protected]', 45, '2334 édouart montpeti, Montréal'); INSERT INTO CLIENT VALUES ('pliskenz', 'zakep', 'Zake Plisken', '[email protected]', 34, '345 Ciccarili plaza, Milano, Italy'); INSERT INTO CLIENT VALUES ('neoa', 'andersonn', 'Neo Anderson', '[email protected]', 7, '987 Mandela Street, Calgary, Canada'); INSERT INTO COMMANDE VALUES (1, 'bondj', to_date('20-03-2004', 'dd-mmyyyy')); INSERT INTO COMMANDE VALUES (2, 'pliskenz', to_date('13-12-2004', 'dd-mmyyyy')); INSERT INTO COMMANDE VALUES (3, 'neoa', to_date('13-12-2004', 'dd-mmyyyy')); INSERT INTO COMMANDE VALUES (4, 'neoa', to_date('24-12-2004', 'dd-mmyyyy')); INSERT INTO COMMANDE VALUES (5, 'bondj', to_date('30-01-2005', 'dd-mmyyyy')); INSERT INTO COMMANDE VALUES (6, 'neoa', to_date('31-01-2005', 'dd-mmyyyy')); INSERT INTO LigneDeCommande VALUES (1, 100, 1); INSERT INTO LigneDeCommande VALUES (2, 106, 1); INSERT INTO LigneDeCommande VALUES (5, 104, 2); INSERT INTO LigneDeCommande VALUES (3, 105, 7); INSERT INTO LigneDeCommande VALUES (3, 102, 1); INSERT INTO LigneDeCommande VALUES (4, 100, 1); INSERT INTO LigneDeCommande VALUES (6, 104, 1); INSERT INTO FACTURE VALUES (100, 1, to_date('21-03-2004', 'dd-mm-yyyy'), 699.95); INSERT INTO FACTURE VALUES (101, 2, to_date('13-12-2004', 'dd-mm-yyyy'), 900); INSERT INTO FACTURE VALUES (102, 5, to_date('01-02-2005', 'dd-mm-yyyy'), 158); INSERT INTO FACTURE VALUES (103, 3, to_date('13-12-2004', 'dd-mm-yyyy'), 1699.92); INSERT INTO FACTURE VALUES (104, 4, to_date('24-12-2004', 'dd-mm-yyyy'), 699.95); INSERT INTO FACTURE VALUES (106, 6, to_date('01-02-2005', 'dd-mm-yyyy'), 900); INSERT INTO PAIEMENT VALUES (100, 100, to_date('10-04-2004', 'dd-mmyyyy'), 699.95); INSERT INTO PAIEMENT VALUES (102, 103, to_date('13-12-2004', 'dd-mmyyyy'), 1699.92); INSERT INTO PAIEMENT VALUES (103, 104, to_date('26-12-2004', 'dd-mmyyyy'), 699.95); Q3 : Ajout de la colonne age avec contrainte ALTER TABLE CLIENT ADD ( age number CHECK (age BETWEEN 18 AND 120)); Q4 : Modification de la quantité d'article UPDATE ARTICLE SET quantiteDispo = quantiteDispo + 3 WHERE codeA = 105; Q5 : Supprimer la commande ‘6’ DELETE FROM COMMANDE WHERE codeC = 6; Partir II : Algèbre relationnelle Q1 : Numéros des articles commandés par l’utilisateur ‘neoa’ et qui ne sont plus en stock actuellement. (π [codeA](Ligne_de_Commande ∗ σ [login=`neoa']Commande) )∩ (π [codeA] σ [quantiteDispo=0] Article) Q2 : Numéros de commandes dont le paiement est intervenu après le premier janvier 2004. π [codeC] ((π [codeF] σ [dateP > `01-jan-2004'] Paiement) * Facture ) Q3 : Prix des articles qui ne figurent dans aucune commande. π [prixUnitaire]( (π [codeA] Article - π [codeA] LigneDeCommande) * Article) Q4 : Logins des clients qui ont acheté, éventuellement dans plusieurs commandes, au moins un exemplaire de tous les articles de moins de 300$. (π [login, codeA] (Commande * LigneDeCommande)) / π [codeA] σ [prixUnitaire<300]Article) Q5 : Noms des clients qui ont acheté uniquement des articles de plus de 500 $. π [nom] ((π [login] Commande - π [login] (Commande * LigneDeCommande * π [codeA] σ [prixUnitaire<=500]Article)) * Client )