1.
Script de création des tables :
CREATE TABLE Utilisateur (
ID_Utilisateur INT PRIMARY KEY,
Nom VARCHAR(100) NOT NULL,
Prénom VARCHAR(100) NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
Téléphone VARCHAR(15) NOT NULL,
Adresse VARCHAR(255) NOT NULL
);
CREATE TABLE Livreur (
ID_Livreur INT PRIMARY KEY,
Nom VARCHAR(100) NOT NULL,
Téléphone VARCHAR(15) NOT NULL,
Statut ENUM('Disponible', 'Indisponible') NOT NULL
);
CREATE TABLE Restaurant (
ID_Restaurant INT PRIMARY KEY,
Nom VARCHAR(100) NOT NULL,
Adresse VARCHAR(255) NOT NULL,
Téléphone VARCHAR(15) NOT NULL,
Type_Cuisine VARCHAR(100) NOT NULL
);
CREATE TABLE Plat (
ID_Plat INT PRIMARY KEY,
Nom VARCHAR(100) NOT NULL,
Description TEXT,
Prix DECIMAL(10, 2) NOT NULL,
Disponibilité BOOLEAN NOT NULL,
ID_Restaurant INT,
FOREIGN KEY (ID_Restaurant) REFERENCES Restaurant(ID_Restaurant) ON
DELETE CASCADE
);
CREATE TABLE Commande (
ID_Commande INT PRIMARY KEY,
Statut ENUM('En attente', 'En préparation', 'Livrée') NOT NULL,
Date DATE NOT NULL,
Heure TIME NOT NULL,
ID_Utilisateur INT,
ID_Livreur INT,
FOREIGN KEY (ID_Utilisateur) REFERENCES Utilisateur(ID_Utilisateur)
ON DELETE CASCADE,
FOREIGN KEY (ID_Livreur) REFERENCES Livreur(ID_Livreur) ON DELETE SET
NULL
);
CREATE TABLE Ligne_Commande (
Quantité INT NOT NULL,
ID_Commande INT,
ID_Plat INT,
PRIMARY KEY (ID_Commande, ID_Plat),
FOREIGN KEY (ID_Commande) REFERENCES Commande(ID_Commande) ON DELETE
CASCADE,
FOREIGN KEY (ID_Plat) REFERENCES Plat(ID_Plat) ON DELETE CASCADE
);
CREATE TABLE Evaluation_Restaurant (
ID_Evaluation_Restaurant INT PRIMARY KEY,
Note INT CHECK (Note BETWEEN 1 AND 5),
Commentaire TEXT,
ID_Utilisateur INT,
ID_Restaurant INT,
FOREIGN KEY (ID_Utilisateur) REFERENCES Utilisateur(ID_Utilisateur)
ON DELETE CASCADE,
FOREIGN KEY (ID_Restaurant) REFERENCES Restaurant(ID_Restaurant) ON
DELETE CASCADE
);
CREATE TABLE Evaluation_Livreur (
ID_Evaluation_Livreur INT PRIMARY KEY,
Note INT CHECK (Note BETWEEN 1 AND 5),
Commentaire TEXT,
ID_Utilisateur INT,
ID_Livreur INT,
FOREIGN KEY (ID_Utilisateur) REFERENCES Utilisateur(ID_Utilisateur)
ON DELETE CASCADE,
FOREIGN KEY (ID_Livreur) REFERENCES Livreur(ID_Livreur) ON DELETE
CASCADE
);
2. Clés primaires et étrangères :
Les clés primaires et étrangères sont déjà incluses dans le script ci-
dessus.
3. Contraintes de domaine :
a. Note entre 1 et 5 : Déjà géré avec CHECK (Note BETWEEN 1 AND 5).
b. Statut de la commande : Géré avec ENUM('En attente', 'En préparation',
'Livrée').
c. Statut du livreur : Géré avec ENUM('Disponible', 'Indisponible').
4. Clauses de suppression automatique :
Déjà inclus avec ON DELETE CASCADE et ON DELETE SET NULL dans le script
de création.
5. Vérification de la création des tables :
Utiliser la commande suivante pour vérifier les tables créées :
SHOW TABLES;
Requêtes d'interrogation :
Afficher tous les utilisateurs :
SELECT * FROM Utilisateur;
Afficher tous les plats du restaurant « La Kasbah » :
SELECT * FROM Plat WHERE ID_Restaurant = (SELECT ID_Restaurant FROM
Restaurant WHERE Nom = 'La Kasbah');
Afficher les noms de tous les plats et leurs prix :
SELECT Nom, Prix FROM Plat;
Afficher les commandes passées par « Amrani » :
SELECT * FROM Commande WHERE ID_Utilisateur = (SELECT ID_Utilisateur FROM
Utilisateur WHERE Nom = 'Amrani');
Afficher les détails des lignes de commande de la commande 4 :
SELECT * FROM Ligne_Commande WHERE ID_Commande = 4;
Afficher la liste des restaurants notés :
SELECT DISTINCT ID_Restaurant FROM Evaluation_Restaurant;
Afficher le nom des livreurs disponibles :
SELECT Nom FROM Livreur WHERE Statut = 'Disponible';
Afficher les évaluations du restaurant « La Kasbah » :
SELECT * FROM Evaluation_Restaurant WHERE ID_Restaurant = (SELECT
ID_Restaurant FROM Restaurant WHERE Nom = 'La Kasbah');
Afficher les livreurs ayant une note ≥ 4 :
SELECT DISTINCT [Link] FROM Livreur L JOIN Evaluation_Livreur E ON
L.ID_Livreur = E.ID_Livreur WHERE [Link] >= 4;
Afficher les commandes en préparation :
SELECT * FROM Commande WHERE Statut = 'En préparation';
Afficher les plats disponibles du restaurant « La Kasbah » :
SELECT * FROM Plat WHERE ID_Restaurant = (SELECT ID_Restaurant FROM
Restaurant WHERE Nom = 'La Kasbah') AND Disponibilité = TRUE;