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 -

Documents pareils