Vous êtes sur la page 1sur 5

Base de données 2023

Activité pratique : MCD, MLD et base de données


Enoncé : Système de Gestion de Bibliothèque
On souhaite concevoir la base de données pour un système de gestion de bibliothèque. Le
système doit être capable de suivre les informations sur les livres, les auteurs, les éditeurs, les
lecteurs et les emprunts de livres. Pour cela, on dispose des renseignements suivants :

▪ Un livre est écrit par un ou plusieurs auteurs. Voici les attributs de l’entité livre : •
ISBN,
• Titre,
• Année de publication.
▪ Un auteur peut écrire un ou plusieurs livres. . Voici les attributs de l’entité l’auteur : •
Nom
• Prénom
• Date de naissance.
▪ Un livre est édité par un éditeur. Voici les attributs de l’entité l’éditeur : •
Nom
• Adresse.
▪ Un éditeur peut avoir plusieurs livres à son actif.
▪ Un lecteur peut emprunter un ou plusieurs livres. Voici les attributs de l’entité lecteur :
• Nom
• Prénom
• Adresse.
▪ Un livre peut être emprunté par un ou plusieurs lecteurs. Voici les attributs de l’entité
emprunt :
• Date d'emprunt
• Date de retour.

1. Elaborez le MCD correspondant.


1.
2. Créer le MLD correspondant et générer la base de données.
1. LECTEUR ( ID_ LECTEUR, NOM, PRENOM, ADRESSE )
2. LIVRE ( ID_LIVRE, ISBN, TITRE, ANNE_PUB, # ID_EDITEUR )
3. AUTEUR ( ID_ AUTEUR, NOM, PRENOM, DATE_NISSANCE )
4. EDITEUR ( ID_EDITEUR, NOM, ADRESSE )
5. ECRITEUR ( #ID_LIVRE , #ID_AUTEUR )
6. EMPRUNT ( # ID_LIVRE, # ID_ LECTEUR, DATE_EMP, DATE_RET )
3. Remplir les tables par des données en utilisant la commande INSERT INTO.
-- Création des tables
CREATE TABLE LECTEUR (
ID_LECTEUR INT PRIMARY KEY,
NOM VARCHAR(255),
PRENOM VARCHAR(255),
ADRESSE VARCHAR(255)
);

CREATE TABLE LIVRE (


ID_LIVRE INT PRIMARY KEY,
ISBN VARCHAR(13),
TITRE VARCHAR(255),
ANNEE_PUB INT,
ID_EDITEUR INT,
FOREIGN KEY (ID_EDITEUR) REFERENCES EDITEUR(ID_EDITEUR)
);

CREATE TABLE AUTEUR (


ID_AUTEUR INT PRIMARY KEY,
NOM VARCHAR(255),
PRENOM VARCHAR(255),
DATE_NAISSANCE DATE
);

CREATE TABLE EDITEUR (


ID_EDITEUR INT PRIMARY KEY,
NOM VARCHAR(255),
ADRESSE VARCHAR(255)
);

CREATE TABLE ECRITEUR (


ID_LIVRE INT,
ID_AUTEUR INT,
PRIMARY KEY (ID_LIVRE, ID_AUTEUR),
FOREIGN KEY (ID_LIVRE) REFERENCES LIVRE(ID_LIVRE),
FOREIGN KEY (ID_AUTEUR) REFERENCES AUTEUR(ID_AUTEUR)
);

CREATE TABLE EMPRUNT (


ID_LIVRE INT,
ID_LECTEUR INT,
DATE_EMP DATE,
DATE_RET DATE,
PRIMARY KEY (ID_LIVRE, ID_LECTEUR),
FOREIGN KEY (ID_LIVRE) REFERENCES LIVRE(ID_LIVRE),
FOREIGN KEY (ID_LECTEUR) REFERENCES
LECTEUR(ID_LECTEUR)
);

-- Insertion de données
INSERT INTO LECTEUR VALUES (1, 'Dupont', 'Jean', '123 Rue de la
Librairie');
INSERT INTO LECTEUR VALUES (2, 'Martin', 'Sophie', '456 Avenue des
Livres');

INSERT INTO LIVRE VALUES (1, '123-456-789', 'Le Guide du SQL', 2020,
1);
INSERT INTO LIVRE VALUES (2, '987-654-321', 'Python pour les Nuls',
2019, 2);

INSERT INTO AUTEUR VALUES (1, 'Smith', 'John', '1980-05-15');


INSERT INTO AUTEUR VALUES (2, 'Martin', 'Sarah', '1975-08-22');

INSERT INTO EDITEUR VALUES (1, 'Editions Tech', '789 Rue de


l''Informatique');
INSERT INTO EDITEUR VALUES (2, 'Librairie ABC', '101 Avenue des
Livres');

INSERT INTO ECRITEUR VALUES (1, 1);


INSERT INTO ECRITEUR VALUES (2, 2);

INSERT INTO EMPRUNT VALUES (1, 1, '2023-01-10', '2023-01-20');


INSERT INTO EMPRUNT VALUES (2, 2, '2023-02-15', '2023-03-01');
4. Sélectionner tous les livres empruntés par un lecteur donné.
SELECT LIVRE.*
FROM LIVRE
JOIN EMPRUNT ON LIVRE.ID_LIVRE = EMPRUNT.ID_LIVRE;
5. Sélectionner tous les livres disponibles (non empruntés) à une date donnée.
SELECT LIVRE.*
FROM LIVRE
LEFT JOIN EMPRUNT ON LIVRE.ID_LIVRE = EMPRUNT.ID_LIVRE
AND '2023-01-01' BETWEEN EMPRUNT.DATE_EMP AND
EMPRUNT.DATE_RET
WHERE EMPRUNT.ID_LIVRE IS NULL;
6. Sélectionner tous les lecteurs ayant des livres en retard.
SELECT LECTEUR.*
FROM LECTEUR
JOIN EMPRUNT ON LECTEUR.ID_LECTEUR =
EMPRUNT.ID_LECTEUR
WHERE '2023-01-21' > EMPRUNT.DATE_RET;
7. Sélectionner tous les emprunts en cours, avec les détails du livre et du lecteur.
SELECT EMPRUNT.*, LECTEUR.NOM AS NOM_LECTEUR,
LECTEUR.PRENOM AS PRENOM_LECTEUR,
LIVRE.TITRE AS TITRE_LIVRE
FROM EMPRUNT
JOIN LECTEUR ON EMPRUNT.ID_LECTEUR = LECTEUR.ID_LECTEUR
JOIN LIVRE ON EMPRUNT.ID_LIVRE = LIVRE.ID_LIVRE
WHERE '2023-01-21' BETWEEN EMPRUNT.DATE_EMP AND
EMPRUNT.DATE_RET;
8. Sélectionner tous les auteurs qui n'ont pas de livres empruntés.
SELECT AUTEUR.*
FROM AUTEUR
WHERE NOT EXISTS (
SELECT 1
FROM ECRITEUR
JOIN LIVRE ON ECRITEUR.ID_LIVRE = LIVRE.ID_LIVRE
LEFT JOIN EMPRUNT ON LIVRE.ID_LIVRE = EMPRUNT.ID_LIVRE
WHERE AUTEUR.ID_AUTEUR = ECRITEUR.ID_AUTEUR
AND EMPRUNT.ID_LIVRE IS NOT NULL
);
9. Sélectionner tous les livres empruntés et leur statut (emprunté ou retourné).

SELECT LIVRE.*, EMPRUNT.DATE_EMP, EMPRUNT.DATE_RET,


CASE
WHEN EMPRUNT.DATE_RET < CURRENT_DATE THEN 'Retourné'
ELSE 'Emprunté'
END AS STATUT
FROM LIVRE
JOIN EMPRUNT ON LIVRE.ID_LIVRE = EMPRUNT.ID_LIVRE;
Mr. Abdelmajid BOUSSELHAM 1

Vous aimerez peut-être aussi