DROP TABLE If EXISTS Fg01_CARACTERISATION;
DROP TABLE If EXISTS Fg01_MOT_CLEF;
DROP TABLE If EXISTS Fg01_EMPRUNT;
DROP TABLE If EXISTS Fg01_EXEMPLAIRE;
DROP TABLE If EXISTS Fg01_LIVRE;
DROP TABLE If EXISTS Fg01_ABONNE;








CREATE TABLE Fg01_ABONNE(
	NUMERO_ABONNE INTEGER,
	NOM VARCHAR(20) NOT NULL,
	PRENOM VARCHAR(20),
	AGE INTEGER,
	TARIF REAL,
	REDUCTION REAL,
	VILLE VARCHAR(30),
	CONSTRAINT Fg01_ABONNE_PK PRIMARY KEY (NUMERO_ABONNE),
	CONSTRAINT Fg01_AGE_DK CHECK (AGE BETWEEN 0 AND 120)
);





CREATE TABLE Fg01_LIVRE(
	ISBN VARCHAR(20),
	TITRE VARCHAR(50) NOT NULL,
	SIECLE INTEGER CHECK (SIECLE BETWEEN 0 AND 21),
	CATEGORIE VARCHAR(20),
	CONSTRAINT Fg01_LIVRE_PK PRIMARY KEY (ISBN)
);





CREATE TABLE Fg01_EXEMPLAIRE(
	NUMERO INTEGER,
	DATE_ACHAT DATE,
	PRIX REAL,
	CODE_PRET VARCHAR(20),
	ETAT VARCHAR(15) CHECK (ETAT IN ('BON','ABIME','EN_REPARATION')),
	ISBN VARCHAR(20),
	CONSTRAINT Fg01_EXEMPLAIRE_PK PRIMARY KEY (NUMERO),
	CONSTRAINT Fg01_EXEMPLAIRETOLIVRE_FK FOREIGN KEY (ISBN) REFERENCES Fg01_LIVRE(ISBN),
	CONSTRAINT Fg01_CODE_PRET_DK CHECK (CODE_PRET IN ('EXCLU', 'EMPRUNTABLE', 'CONSULTABLE')) 
);





CREATE TABLE Fg01_EMPRUNT(
	NUMERO_ABONNE INTEGER,
	NUMERO INTEGER,
	DATE_EMPRUNT DATE,
	DATE_RETOUR DATE,
	DATE_RETOUR_REEL DATE,
	NB_RELANCE INTEGER CHECK (NB_RELANCE IN (1,2,3)),
	CONSTRAINT Fg01_EMPRUNT_PK PRIMARY KEY (NUMERO_ABONNE,NUMERO,DATE_EMPRUNT),
	CONSTRAINT Fg01_EMPRUNTTOABONNE_FK FOREIGN KEY (NUMERO_ABONNE) REFERENCES Fg01_ABONNE(NUMERO_ABONNE),
	CONSTRAINT Fg01_EMPRUNTTOEXEMPLAIRE_FK FOREIGN KEY (NUMERO) REFERENCES Fg01_EXEMPLAIRE(NUMERO)
);





CREATE TABLE Fg01_MOT_CLEF (
	MOT VARCHAR(20),
	CONSTRAINT Fg01_MOT_CLEF_PK PRIMARY KEY (MOT)
);





CREATE TABLE Fg01_CARACTERISATION(
	ISBN VARCHAR(20),
	MOT VARCHAR(20),
	CONSTRAINT Fg01_CARACT_PK PRIMARY KEY (ISBN,MOT),
	CONSTRAINT Fg01_CARACTTOLIVRE_FK FOREIGN KEY (ISBN) REFERENCES Fg01_LIVRE(ISBN),
	CONSTRAINT Fg01_CARACTTOMOT_CLEF_FK FOREIGN KEY (MOT) REFERENCES Fg01_MOT_CLEF(MOT)
);
