FABOL |1
Soit le modèle ci-après :
Question :
A. À l’aide du langage Transact-SQL, créer la base de données BibliothequeDB et toutes les
tables représentées dans le schéma (Membres, Livres, Auteurs, Emprunts, AuteursLivres)
avec leurs relations et clés primaires/étrangères.
Création de la base de données
CREATE DATABASE BibliothequeDB;
GO
USE BibliothequeDB;
GO
Création des tables
1. Table Membres
CREATE TABLE Membres (
NoMembre INT PRIMARY KEY,
Nom NVARCHAR(50),
Prenom NVARCHAR(50),
Adresse NVARCHAR(100),
Telephone NVARCHAR(20),
DateNaissance DATE
);
2. Table Livres
CREATE TABLE Livres (
CodeLivre INT PRIMARY KEY,
Titre NVARCHAR(100),
DateSortie DATE,
Prix DECIMAL(10, 2)
);
3. Table Auteurs
CREATE TABLE Auteurs (
CodeAuteur INT PRIMARY KEY,
Nom NVARCHAR(50),
Prenom NVARCHAR(50),
DateNaissance DATE,
DateDeces DATE NULL
);
FABOL |2
4. Table Emprunts
CREATE TABLE Emprunts (
NoMembre INT,
CodeLivre INT,
DateEmprunt DATE,
DateRetour DATE,
PRIMARY KEY (NoMembre, CodeLivre, DateEmprunt),
FOREIGN KEY (NoMembre) REFERENCES Membres(NoMembre),
FOREIGN KEY (CodeLivre) REFERENCES Livres(CodeLivre)
);
5. Table AuteursLivres (relation N-N)
CREATE TABLE AuteursLivres (
CodeAuteur INT,
CodeLivre INT,
PRIMARY KEY (CodeAuteur, CodeLivre),
FOREIGN KEY (CodeAuteur) REFERENCES Auteurs(CodeAuteur),
FOREIGN KEY (CodeLivre) REFERENCES Livres(CodeLivre)
);
B. Écrire une requête SQL permettant d’afficher le nom, le prénom, la date d’emprunt et la
date de retour d’un membre ainsi que le titre du livre emprunté.
SELECT
[Link],
[Link],
[Link],
[Link],
[Link]
FROM
Membres M
JOIN
Emprunts E ON [Link] = [Link]
JOIN
Livres L ON [Link] = [Link];
C. Créer une vue VueEmpruntsMembres qui affiche le nom, prénom, titre du livre, date
d’emprunt et date de retour.
CREATE VIEW VueEmpruntsMembres AS
SELECT
[Link],
[Link],
[Link],
[Link],
[Link]
FROM
Membres M
JOIN
Emprunts E ON [Link] = [Link]
JOIN
Livres L ON [Link] = [Link];
D. Insérer un nouvel auteur dans la table Auteurs.
INSERT INTO Auteurs (CodeAuteur, Nom, Prenom, DateNaissance, DateDeces)
VALUES (101, 'Senghor', 'Léopold', '1906-10-09', '2001-12-20');