Du producteur au consommateur++

[30 min]

Soit la base de données suivante :

CREATE TABLE  Producteur (
raison_sociale VARCHAR (25),
ville VARCHAR(255),
PRIMARY KEY (raison_sociale)
);
CREATE TABLE Consommateur (
login VARCHAR(10),
email VARCHAR(50),
nom VARCHAR(50) NOT NULL,
prenom VARCHAR(50) NOT NULL,
ville VARCHAR(255) NOT NULL,
PRIMARY KEY (login,email),
UNIQUE (nom,prenom,ville)
);
CREATE TABLE Produit (
id INTEGER,
description VARCHAR(100),
produit_par VARCHAR(25) NOT NULL,
consomme_par_login VARCHAR(10),
consomme_par_email VARCHAR(50),
PRIMARY KEY (id),
FOREIGN KEY (produit_par) REFERENCES Producteur(raison_sociale),
FOREIGN KEY (consomme_par_login,consomme_par_email) REFERENCES Consommateur(login,email)
);

Établissez les instructions LCD permettant d'attribuer :

  • les droits en lecture seule pour tous les utilisateurs pour la table Produit

  • les droits en lecture et en écriture pour l'utilisateur Admin sur toutes les tables.

GRANT SELECT ON Produit TO PUBLIC;
GRANT ALL PRIVILEGES ON Producteur, Consommateur, Produit TO Admin;

Afin d'alimenter une application de suivi nommée Big Brother écrivez les trois vues SQL LMD permettant de connaître :

  • Les produits produits et consommés dans la même ville

  • Les produits qui ne sont pas consommés

  • Le nombre de produits produits par chaque producteur

Établissez un schéma externe limité à ces trois vues pour l'utilisateur BB (sous lequel se connecte l'application Big Brother).

Les produits produits et consommés dans la même ville

CREATE VIEW ProduitsConsommes AS
SELECT P.id AS produit
FROM Produit P, Producteur PE, Consommateur C
WHERE P.produit_par = PE.raison_sociale
AND P.consomme_par_login = C.login
AND P.consomme_par_email = C.email
AND C.ville = PE.ville ;

Les produits qui ne sont pas consommés

CREATE VIEW ProduitsNonConsommes AS
SELECT id AS produit
FROM Produit
WHERE consomme_par_login IS NULL ;

Le nombre de produits produits par chaque producteur

CREATE VIEW NbProduitsParProducteur AS
SELECT produit_par AS producteur, COUNT(id) AS nb_produits
FROM Produit
GROUP BY produit_par ;

Schéma externe

REVOKE SELECT ON Produit FROM BB;
GRANT SELECT ON ProduitsConsommes, ProduitsNonConsommes, NbProduitsParProducteur TO BB;
AccueilExercice > Exercice : Du producteur au consommateur++< PrécédentSuivant >