Vous êtes sur la page 1sur 7

Nom :

Prénom :
Identifiant : Groupe : /30

Haute École Bruxelles-Brabant Janvier 2021


École Supérieure d’Informatique DON3
Bachelor en Informatique -

DON3 – Persistance des données

Examen - Corrigé

Voici un schéma conceptuel de base de données qui rassemble les informations relatives
aux données d’un centre de soin pour animaux.

Cage : Une cage dans laquelle sont logés les animaux


Une cage peut contenir un ou plusieurs animaux.

Ź num - entier : numéro de la cage,


Ź capacite - entier : le nombre maximum d’animaux que la cage peut contenir,
Ź interieur - entier : 1 si la cage est située à l’intérieur d’un bâtiment, 0 s’il s’agit
d’une cage d’extérieur.

Animal : Un animal résidant dans le centre.

Ź mat - entier : matricule identifiant l’animal ;


Ź espèce - alphanumérique : nom de l’espèce à laquelle appartient l’animal,

Ce document est distribué sous licence Version du document


Creative Commons Paternité - Partage à l’Identique 2.0 Belgique (http://creativecommons.org/licenses/by-sa/2.0/be/). 26 janvier 2021
Les autorisations au-delà du champ de cette licence peuvent être demandées à gcuvelier@he2b.be.
Ź nCage - entier : numéro de la cage dans laquelle l’animal est logé.

Soignant : un employé du centre prodiguant des soins aux animaux

Ź id - entier : numéro d’identification du soignant,


Ź nom - alphanumérique : nom du soignant,
Ź sup - entier : numéro d’identification du supérieur hiérarchique du soignant, ou
NULL si le soignant n’admet aucun supérieur.

Soin : Un soin prodigué à un animal donné par un soignant donné

Ź idS - entier : identifiant du soignant,


Ź matA - entier : matricule de l’animal soigné,
Ź date - date : date a laquelle le soin a été prodigué.

Les questions qui suivent portent toutes sur le schéma Animaux.

DON3 – Examen - Corrigé – page 2/ 7


1 SQL(Select) :

Veuillez fournir une requête SQL permettant de :

1 Lister les (l’) identifiant(s) des (du) soignant(s) ayant prodigué le plus grand nombre de /5
soins sur les pigeons du centre (les pigeons ont tous un nom d’espèce commençant par
le mot ‘Pigeon’).

Réponse :

SELECT idS FROM Soin S


JOIN Animal A ON A.matricule = S.matA
WHERE espece LIKE ‘Pigeon%’
GROUP BY idS
HAVING count(*) ě ALL (SELECT count(*) FROM Soin
JOIN Animal ON matA = matricule
WHERE espece like ‘Pigeon%’
GROUP BY idS) ;

DON3 – Examen - Corrigé – page 3/ 7


2 Lister les numéros de tous les soignants avec le numéro de leur supérieur ainsi que le /5
nombre d’animaux ayant profité de ses soins. Prenez garde à ne pas oublier les éventuels
soingants sans supérieur ni les éventuels soignants n’ayant encore prodigué de soin à
aucun animal.

Réponse :
SELECT S.Id, S.sup, count(T.matA) FROM Soignant S
LEFT JOIN Soin T ON S.id = T.idS
GROUP BY S.Id, S.sup ;

DON3 – Examen - Corrigé – page 4/ 7


2 SQL(DDL-DML-DCL)

3 Nous souhaiterions permettre à l’utilisateur U1 de consulter et éventuellement suppri- /5


mer de la base de données les animaux logés dans une cage dont le numéro est situé
entre 10 et 20. Veuillez proposer une (des) requête(s) SQL permettant d’arriver à ce
résultat.
L’utilisateur U1 doit pouvoir transmettre le droit en consultation à d’autres utilisateurs
potentiels de la base de donnée, mais pas les droits en suppression.
(Attention : l’utilisateur U1 ne peut ni avoir accès ni modifier les données des animaux
dont le numéro ne satisfait pas la condition ci-dessus, et ne peut pas avoir des droits
autres que ceux décrits ci-dessus sur les animaux en question).

Réponse :
CREATE VIEW AnimauxCagesSpéciales AS
SELECT * FROM Animal
WHERE nCage BETWEEN 10 AND 20 ;

GRANT SELECT ON AnimauxCagesSpéciales TO U1


WITH GRANT OPTION ;
GRANT DELETE ON AnimauxCagesSpéciales TO U1 ;

DON3 – Examen - Corrigé – page 5/ 7


4 Le centre de soin souhaite s’agrandir et construire d’autres bâtiments dans lesquels se- /5
ront stockées des cages. Nous souhaiterions donc disposer d’une table supplémentaire
contenant des informations sur les différents bâtiments. Cette table doit contenir un nu-
méro d’identification du bâtiment (constituant la clé primaire de la table), la superficie
(en mètres carrés) ainsi qu’une brève description de celui-ci. Veuillez proposer une (des)
requête(s) SQL permettant de :

1. Créer la table en question, et y ajouter une ligne contenant les informations sur le
bâtiment actuellement présent dans le centre (son numéro d’identification est le 01,
sa superficie est de 400 mètres carrés, et sa description est "bâtiment principal"),
2. Enregistrer le fait que les cages intérieures actuellement présentes dans le centre
sont contenues dans le bâtiment principal ci-dessus.

Réponse :

CREATE TABLE Bâtiment (


id INTEGER NOT NULL
CONSTRAINT batPK PRIMARY KEY,
superficie INTEGER NOT NULL,
description VARCHAR(20) NOT NULL
)

INSERT INTO Bâtiment VALUES (01,400,’Bâtiment Principal’) ;

ALTER TABLE Cage ADD numBat INTEGER ;

ALTER TABLE Cage ADD CONSTRAINT cageFK FOREIGN KEY


(numBat) REFERENCES Bâtiment (id) ;

UPDATE Cage SET numBat = 01 WHERE interieur = 1 ;

ALTER TABLE Cage DROP COLUMN interieur ;

DON3 – Examen - Corrigé – page 6/ 7


3 PL/SQL

5 Veuillez écrire une procédure PL/SQL prenant en paramètre le nom d’une espèce animale /10
donnée et le numéro d’une cage et déplaçant l’animal dans la cage si cette cage n’est pas
pleine.
Si la cage est pleine, un message d’erreur est renvoyé.

CREATE OR REPLACE PROCEDURE changerCage (mat Ani-


mal.matricule%TYPE, numCage Cage.num%TYPE) AS
nombreCage INTEGER ;
capCage INTEGER ;
BEGIN
SELECT count(*) INTO nombreCage FROM Animal
WHERE nCage = cage ;
SELECT capacite INTO capCage FROM Cage
WHERE num = cage ;

IF nombreCage >= capCage THEN


RAISE_APPLICATION_ERROR(-20433, "la cage est pleine !") ;
ELSE
UPDATE Animal SET nCage = numCage WHERE matricule = mat ;
END IF ;
END ;

DON3 – Examen - Corrigé – page 7/ 7

Vous aimerez peut-être aussi