Gestion d`une Bibliothèque
Transcription
Gestion d`une Bibliothèque
Gestion d’une Bibliothèque Projet Base de Données T2 : Enregistrement des prêts et statistiques sur les emprunts des lecteurs Wilson JOUËT Stéphane GIVARNET 16 janvier 2008 Groupe 2 - Mme Jouve Sommaire Sommaire.......................................................................................................................................- 2 Script de création des tables (commandes SQL)...................................................- 3 Impression du schéma créé (résultat exécution SQL).......................................- 5 Script de création des tuples de test (exemples commentés) ......................- 7 Liste des contraintes d’intégrité non déclarées ...................................................- 10 - -2- Script de création des tables (commandes SQL) ---------- creation des domaines CREATE DOMAIN dom_dispo AS CHAR CHECK (VALUE IN ('e','d','c','p')); CREATE DOMAIN dom_code_type AS INTEGER CHECK (VALUE BETWEEN 1 AND 10); CREATE DOMAIN dom_relance AS INTEGER CHECK (VALUE IN ('0','1')); ---------- creation des tables CREATE TABLE ouvrage ( code_titre VARCHAR (13) CONSTRAINT cleprim_ouvrage PRIMARY KEY, code_livre INTEGER UNIQUE, titre VARCHAR (250) NOT NULL, code_ed VARCHAR (7), code_mat VARCHAR (4) ); CREATE TABLE exemplaire ( code_livre INTEGER CONSTRAINT cle_etr_ouvrage REFERENCES ouvrage(code_livre) INITIALLY DEFERRED, num_ex INTEGER UNIQUE, dispo dom_dispo, CONSTRAINT cleprim_exemplaire PRIMARY KEY (code_livre,num_ex) ); CREATE TABLE type_lect ( code_type dom_code_type CONSTRAINT cleprim_type_lect PRIMARY KEY, libelle_type VARCHAR (60) UNIQUE, conditions VARCHAR (60) ); CREATE TABLE lecteur ( code_lec VARCHAR (5) UNIQUE CONSTRAINT cleprim_lecteur PRIMARY KEY, nom_lec VARCHAR (20) NOT NULL, prenom_lec VARCHAR (20) NOT NULL, adresse_lec VARCHAR (100) NOT NULL, code_type dom_code_type CONSTRAINT cle_etr_type_lect REFERENCES type_lect(code_type) INITIALLY DEFERRED, relance dom_relance ); -3- CREATE TABLE pret ( code_lec VARCHAR (5) NOT NULL CONSTRAINT cle_etr_lecteur REFERENCES lecteur(code_lec) INITIALLY DEFERRED, code_livre INTEGER NOT NULL, num_ex INTEGER NOT NULL, date_emprunt DATE NOT NULL, CONSTRAINT cle_etr_exemplaire FOREIGN KEY (code_livre,num_ex) REFERENCES exemplaire(code_livre,num_ex) INITIALLY DEFERRED, CONSTRAINT cleprim_pret PRIMARY KEY (code_livre,num_ex) ); CREATE TABLE h_emprunt ( date_emp DATE, code_livre INTEGER, num_ex INTEGER, prem_rel dom_relance, sec_rel dom_relance, code_lect VARCHAR (5), date_retour DATE CONSTRAINT emprunt_date_retour CHECK (date_retour > date_emp), CONSTRAINT cleprim_h_emprunt PRIMARY KEY (date_emp,code_livre,num_ex) ); -4- Impression du schéma créé (résultat exécution SQL) bibli=# \d List of relations Schema | Name | Type | Owner --------+------------+-------+-------------public | exemplaire | table | wilson.jouet public | h_emprunt | table | wilson.jouet public | lecteur | table | wilson.jouet public | ouvrage | table | wilson.jouet public | pret | table | wilson.jouet public | type_lect | table | wilson.jouet (6 rows) bibli=# \d exemplaire Table "public.exemplaire" Column | Type | Modifiers ------------+-----------+----------code_livre | integer | not null num_ex | integer | not null dispo | dom_dispo | Indexes: "cleprim_exemplaire" primary key, btree (code_livre, num_ex) Foreign-key constraints: "cle_etr_ouvrage" FOREIGN KEY (code_livre) REFERENCES ouvrage(code_livre) DEFERRABLE INITIALLY DEFERRED bibli=# \d h_emprunt Table "public.h_emprunt" Column | Type | Modifiers -------------+----------------------+----------date_emp | date | not null code_livre | integer | not null num_ex | integer | not null prem_rel | character(1) | sec_rel | character(1) | code_lect | character varying(5) | date_retour | date | Indexes: "cleprim_h_emprunt" primary key, btree (date_emp, code_livre, num_ex) Check constraints: "emprunt_date_retour" CHECK (date_retour > date_emp) bibli=# \d lecteur Table "public.lecteur" Column | Type | Modifiers -------------+------------------------+----------code_lec | character varying(5) | not null -5- nom_lec | character varying(20) | not null prenom_lec | character varying(20) | not null adresse_lec | character varying(200) | not null code_type | dom_code_type | relance | dom_relance | Indexes: "cleprim_lecteur" primary key, btree (code_lec) Foreign-key constraints: "cle_etr_type_lect" FOREIGN KEY (code_type) REFERENCES type_lect(code_type) DEFERRABLE INITIALLY DEFERRED bibli=# \d ouvrage Table "public.ouvrage" Column | Type | Modifiers ------------+------------------------+----------code_titre | character varying(13) | not null code_livre | integer | titre | character varying(250) | not null code_ed | character varying(7) | code_mat | character varying(4) | Indexes: "cleprim_ouvrage" primary key, btree (code_titre) "ouvrage_code_livre_key" unique, btree (code_livre) bibli=# \d pret Table "public.pret" Column | Type | Modifiers --------------+----------------------+----------code_lec | character varying(5) | not null code_livre | integer | not null num_ex | integer | not null date_emprunt | date | not null Indexes: "cleprim_pret" primary key, btree (code_livre, num_ex) Foreign-key constraints: "cle_etr_lecteur" FOREIGN KEY (code_lec) REFERENCES lecteur(code_lec) DEFERRABLE INITIALLY DEFERRED "cle_etr_exemplaire" FOREIGN KEY (code_livre, num_ex) REFERENCES exemplaire(code_livre, num_ex) DEFERRABLE INITIALLY DEFERRED bibli=# \d type_lect Table "public.type_lect" Column | Type | Modifiers --------------+------------------------+----------code_type | dom_code_type | not null libelle_type | character varying(60) | conditions | character varying(60) | Indexes: "cleprim_type_lect" primary key, btree (code_type) "type_lect_libelle_type_key" unique, btree (libelle_type) -6- Script de création des tuples de test (exemples commentés) -- remplissage de la table ouvrage INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('PETPOU1',256,'Le Petit Poucet','PU1','LCO1'); INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('PETPOU2',1352,'Le Petit Poulet','GRMA1','LCO2'); INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('CHABOT1',304,'Le Chat Botte','PU1','LCO1'); INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('ECOMAIGOD1',2996,'L\'economie vue par Maitre Godard','PU2','EEG1'); INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('METGENANAAPP1',2855,'Methode generale d\'analyse d\'une application informatique','EDEL1','IAI1'); INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('GUEVIE1',1975,'La Guerre du Viet-Nam','FL1','HHC1'); INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('MONHAU1',143,'Monsieur Hautain','EN1','LLE1'); INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('TUNILL1',2644,'Le Tuning Illustre','PU1','LIT1'); INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('BIB1',1,'La Bible','PREV1','SATAN1'); -- erreur : code_mat > 4 caracteres INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('MATANARESSYSDIFDEUORD1',1988,'Mathematiques - Analyse : Resolution des systemes differentiels du deuxieme ordre','MAGA1','MMA1'); -- erreur : code_titre > 13 caracteres INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('SEIANN1',17,'Le Seigneur Des Anneaux','TOEDANFA1','LFA1'); -- erreur : code_ed > 7 caracteres INSERT INTO OUVRAGE(code_titre,code_livre, titre, code_ed, code_mat) VALUES ('DEFINF1',1,'Le defi informatique','GAFL1','IIS1'); -erreur : unicite du code_livre non respectee -- remplissage de la table exemplaire INSERT INTO EXEMPLAIRE(code_livre, INSERT INTO EXEMPLAIRE(code_livre, (1352,1,'e'); INSERT INTO EXEMPLAIRE(code_livre, INSERT INTO EXEMPLAIRE(code_livre, (2996,2,'c'); INSERT INTO EXEMPLAIRE(code_livre, (2855,1,'p'); INSERT INTO EXEMPLAIRE(code_livre, (1975,1,'e'); INSERT INTO EXEMPLAIRE(code_livre, INSERT INTO EXEMPLAIRE(code_livre, INSERT INTO EXEMPLAIRE(code_livre, (2644,3,'d'); num_ex, dispo) VALUES (256,1,'e'); num_ex, dispo) VALUES num_ex, dispo) VALUES (304,1,'d'); num_ex, dispo) VALUES num_ex, dispo) VALUES num_ex, dispo) VALUES num_ex, dispo) VALUES (143,2,'e'); num_ex, dispo) VALUES (1,1,'d'); num_ex, dispo) VALUES -7- INSERT INTO EXEMPLAIRE(code_livre, num_ex, dispo) VALUES (2644,2,'e'); -- erreur : unicite de la cle INSERT INTO EXEMPLAIRE(code_livre, num_ex, dispo) VALUES (2644,2,'d'); -- (code_livre,num_ex) non respectee INSERT INTO EXEMPLAIRE(code_livre, num_ex, dispo) VALUES (1,1,'a'); -- erreur de domaine : 'a' ne fait pas parti des choix possibles -- remplissage de la table type_lect INSERT INTO TYPE_LECT(code_type, libelle_type, conditions) VALUES (1,'Doctorant','A deja fait une these'); INSERT INTO TYPE_LECT(code_type, libelle_type, conditions) VALUES (2,'Chercheur','Doit avoir son propre laboratoire de recherche'); INSERT INTO TYPE_LECT(code_type, libelle_type, conditions) VALUES (3,'Footballeur','A remporte un titre en equipe de France et joue dans des pub'); INSERT INTO TYPE_LECT(code_type, libelle_type, conditions) VALUES (5,'Etudiant en Informatique','Doit avoir moins de 25 ans et suivre des etudes en informatique'); INSERT INTO TYPE_LECT(code_type, libelle_type, conditions) VALUES (7,'Intermittent du spectacle','Doit etre rigolo'); INSERT INTO TYPE_LECT(code_type, libelle_type, conditions) VALUES (9,'Militaire Extremiste','Doit avoir fait la guerre du Viet-Nam, avoir tire plus de 1000 balles et etre sourd d\'une oreille'); -erreur car l'attribut 'conditions' possede plus de 60 caracteres INSERT INTO TYPE_LECT(code_type, libelle_type, conditions) VALUES (10,'Chasseur','A deja chasse la galinette cendree'); -- remplissage de la table lecteur INSERT INTO LECTEUR(code_lec, nom_lec, prenom_lec, adresse_lec, code_type, relance) VALUES ('GIVS1','GIVARNET','Stephane','1 square des Cottages 91200 ATHIS-MONS', 5, 0); INSERT INTO LECTEUR(code_lec, nom_lec, prenom_lec, adresse_lec, code_type, relance) VALUES ('JOUW1','JOUET','Wilson','22 rue des Petits Champs 75014 PARIS', 5, 1); INSERT INTO LECTEUR(code_lec, nom_lec, prenom_lec, adresse_lec, code_type, relance) VALUES ('AUTA1','AUTIN','Alain','3 allee du Pentagone WASHINGTON', 9, 0); INSERT INTO LECTEUR(code_lec, nom_lec, prenom_lec, adresse_lec, code_type, relance) VALUES ('BOZC1','BOZO','Clown','3 avenue du Cirque 91000 EVRY', 7, 1); INSERT INTO LECTEUR(code_lec, nom_lec, prenom_lec, adresse_lec, code_type, relance) VALUES ('ZIDZ1','ZIDANE','Zinedine','Stade de France 92310 SAINT DENIS', 3, 0); INSERT INTO LECTEUR(code_lec, nom_lec, prenom_lec, adresse_lec, code_type, relance) VALUES ('ZIDZ2','ZIDIBIBI','Zazou','3 rue Beaudelaire 91200 ATHIS-MONS', 10, 0); INSERT INTO LECTEUR(code_lec, nom_lec, prenom_lec, adresse_lec, code_type, relance) VALUES ('REDRO1','REDFORD','Robert','17 chemin des Saules 92010 Epinay', 7, 1); -- erreur : code_lec superieur a 5 caracteres -8- INSERT INTO LECTEUR(code_lec, nom_lec, prenom_lec, adresse_lec, code_type, relance) VALUES ('FUCK1','FURDON','Kevin','58 rue des Champs Elysees 75001 Paris', 15, 0); -- erreur code_type superieur a 10 INSERT INTO LECTEUR(code_lec, nom_lec, prenom_lec, adresse_lec, code_type, relance) VALUES ('SEPA1','SEBASTIEN','Patrick','8 impasse du Pot Rouge 95110 Sannois', 7, 3); -- erreur de domaine : relance est different de 0 ou 1 -- remplissage de la table pret INSERT INTO PRET(code_lec, code_livre, num_ex, date_emprunt) VALUES ('GIVS1',1352,1,'2008-2-16'); INSERT INTO PRET(code_lec, code_livre, num_ex, date_emprunt) VALUES ('AUTA1',1975,1,'2007-12-15'); INSERT INTO PRET(code_lec, code_livre, num_ex, date_emprunt) VALUES ('ZIDZ1',2644,2,'2008-2-18'); INSERT INTO PRET(code_lec, code_livre, num_ex, date_emprunt) VALUES ('ZIDZ2',143,2,'2008-5-12'); INSERT INTO PRET(code_lec, code_livre, num_ex, date_emprunt) VALUES ('GIVS1',256,1,'2008-2-12'); -- erreur : primary key, deux personnes differentes prennent le meme livre INSERT INTO PRET(code_lec, code_livre, num_ex, date_emprunt) VALUES ('JOUW1',256,1,'2008-5-13'); INSERT INTO PRET(code_lec, code_livre, num_ex, date_emprunt) VALUES ('AUTA1',2644,3,'15-12-2007'); -- erreur dans le type de la date INSERT INTO PRET(code_lec, code_livre, num_ex, date_emprunt) VALUES ('ZIDZ1',100,1,'2007-12-15'); -- erreur : livre qui n'existe pas -- remplissage de la table h_emprunt INSERT INTO H_EMPRUNT(date_emp, code_livre, num_ex, prem_rel, sec_rel, code_lect, date_retour) VALUES ('2008-114',256,1,0,0,'JOUW1','2008-1-23'); INSERT INTO H_EMPRUNT(date_emp, code_livre, num_ex, prem_rel, sec_rel, code_lect, date_retour) VALUES ('2007-121',2644,2,1,0,'GIVS1','2008-1-1'); INSERT INTO H_EMPRUNT(date_emp, code_livre, num_ex, prem_rel, sec_rel, code_lect, date_retour) VALUES ('2007-113',143,2,1,1,'AUTA1','2008-1-2'); INSERT INTO H_EMPRUNT(date_emp, code_livre, num_ex, prem_rel, sec_rel, code_lect, date_retour) VALUES ('2007-1212',1352,1,1,0,'BOZC1','2008-1-15'); INSERT INTO H_EMPRUNT(date_emp, code_livre, num_ex, prem_rel, sec_rel, code_lect, date_retour) VALUES ('2008-129',2996,2,0,0,'ZIDZ1','2008-1-30'); INSERT INTO H_EMPRUNT(date_emp, code_livre, num_ex, prem_rel, sec_rel, code_lect, date_retour) VALUES ('2007-1212',2644,3,0,0,'ZIDZ21','2007-12-2'); -- erreur de domaine : la date de retour est anterieure a la date d'emprunt -9- Liste des contraintes d’intégrité non déclarées Code-titre : les 12 premiers caractères sont la concaténation des 3 premiers caractères de chaque mot de plus de 3 lettres du titre. Le dernier est un chiffre permettant de distinguer les homonymes. Il n’a pas été possible de déclarer cette contrainte. Code-lec : Concaténation des 3 premiers caractères du noms et du prénom du lecteur. Le dernier caractère est un chiffre permettant de distinguer les homonymes. Il n’a pas été possible de déclarer cette contrainte. Code-ed : Concaténation des 2 premiers caractères des mots de longueur supérieur a 2 dans le nom de l’éditeur. Le dernier caractère est un chiffre permettant de distinguer les homonymes. Il n’a pas été possible de déclarer cette contrainte. Code-mat : Concaténation du premier caractère de la section et des premiers caractères des mots de longueur supérieure a 2 dans le nom de la matière. Le dernier caractère est un chiffre permettant de distinguer les homonymes. Il n’a pas été possible de déclarer cette contrainte. - 10 -