Vous êtes sur la page 1sur 6

CONSERVATOIRE NATIONAL DES ARTS ET METIERS

Samedi 11 Février 2006


2 heures
10 H 45 – 12 H 45

SYSTEMES DE GESTION DE BASES DE DONNEES


Code UE NFP107

EXAMEN
Première session

Documents autorisés : aucun

Le sujet doit impérativement être remis dans la copie

1/6
Centre d’Enseignement à Distance
Laurent MOREAU
CONSERVATOIRE NATIONAL DES ARTS ET METIERS

PARTIE 1 : Création de schéma (5 points)

Le Modèle Conceptuel de Données suivant permet de modéliser le domaine de gestion d’un parc informatique

Travail à réaliser :

1. Donnez les scripts de création de tables correspondant à ce schéma.

Il ne fallait pas oublier d’insérer les clés étrangères dans les bonnes tables
CREATE TABLE reparation (
id_reparation uniqueidentifier NOT NULL,
date_envoi datetime,
date_ret datetime,
prix decimal,
id_panne uniqueidentifier,
id_tiers uniqueidentifier );
ALTER TABLE reparation ADD CONSTRAINT PK_reparation PRIMARY KEY (id_reparation);
ALTER TABLE reparation ADD CONSTRAINT FK_reparation_id_panne FOREIGN KEY (id_panne)
REFERENCES panne (id_panne);

2/6
Centre d’Enseignement à Distance
Laurent MOREAU
CONSERVATOIRE NATIONAL DES ARTS ET METIERS
ALTER TABLE reparation ADD CONSTRAINT FK_reparation_id_tiers FOREIGN KEY (id_tiers) REFERENCES
tiers (id_tiers);

2. Expliquez les choix de modélisation effectués par l’analyste. Vous concentrerez vos explications sur les
choix de cardinalités.

Explication des cardinalités particulières 1,1 ou 0,1

PARTIE 2 : SQL (5 POINTS)

Vous disposez d’un script de création de tables

-- CREATION DE TABLES

CREATE TABLE menu_type (


id_menu uniqueidentifier NOT NULL,
libelle_aliment_compose varchar(25),
qte_commandee decimal ,
code_espece uniqueidentifier,
CONSTRAINT PK_menu_type PRIMARY KEY (id_menu),
CONSTRAINT FK_menu_type_code_espece FOREIGN KEY (code_espece) REFERENCES espece
(code_espece)
);

CREATE TABLE element_de_base (


code_element uniqueidentifier NOT NULL,
libelle_element varchar(50),
CONSTRAINT PK_element_de_base PRIMARY KEY (code_element)
);

CREATE TABLE espece (


code_espece uniqueidentifier NOT NULL,
libelle_espece varchar(50),
CONSTRAINT PK_espece PRIMARY KEY (code_espece )
);

CREATE TABLE animal (


nom_bapteme uniqueidentifier NOT NULL,
sexe varchar(5),
date_naissance datetime,
date_deces datetime,
code_espece uniqueidentifier,
CONSTRAINT PK_animal PRIMARY KEY (nom_bapteme),
CONSTRAINT FK_animal_code_espece FOREIGN KEY (code_espece) REFERENCES espece
(code_espece)
);

CREATE TABLE enclos (


num_enclos uniqueidentifier NOT NULL,
nom_enclos varchar(50),
CONSTRAINT PK_enclos PRIMARY KEY (num_enclos )
);

CREATE TABLE periode (


id_periode uniqueidentifier NOT NULL,
date_debut datetime,
date_fin datetime,
CONSTRAINT PK_periode PRIMARY KEY (id_periode)
);

CREATE TABLE se_composer (


code_element uniqueidentifier NOT NULL,
id_menu uniqueidentifier NOT NULL,
pourcentage decimal,
CONSTRAINT PK_se_composer PRIMARY KEY (code_element, id_menu),

3/6
Centre d’Enseignement à Distance
Laurent MOREAU
CONSERVATOIRE NATIONAL DES ARTS ET METIERS
CONSTRAINT FK_se_composer_code_element FOREIGN KEY (code_element) REFERENCES
element_de_base (code_element),
CONSTRAINT FK_se_composer_id_menu FOREIGN KEY (id_menu) REFERENCES menu_type
(id_menu)
);

CREATE TABLE recevoir (


id_menu uniqueidentifier NOT NULL,
nom_bapteme uniqueidentifier NOT NULL,
qte_absorbee decimal,
date_repas datetime,
heure_repas datetime,
CONSTRAINT PK_recevoir PRIMARY KEY (id_menu, nom_bapteme),
CONSTRAINT FK_recevoir_id_menu FOREIGN KEY (id_menu) REFERENCES menu_type (id_menu),
CONSTRAINT FK_recevoir_nom_bapteme FOREIGN KEY (nom_bapteme) REFERENCES animal
(nom_bapteme)
);

CREATE TABLE pouvoir_vivre (


code_espece uniqueidentifier NOT NULL,
num_enclos uniqueidentifier NOT NULL,
CONSTRAINT PK_pouvoir_vivre PRIMARY KEY (code_espece, num_enclos),
CONSTRAINT FK_pouvoir_vivre_code_espece FOREIGN KEY (code_espece) REFERENCES espece
(code_espece),
CONSTRAINT FK_pouvoir_vivre_num_enclos FOREIGN KEY (num_enclos ) REFERENCES enclos
(num_enclos)
);

CREATE TABLE occuper (


nom_bapteme uniqueidentifier NOT NULL,
id_periode uniqueidentifier NOT NULL,
num_enclos uniqueidentifier NOT NULL,
CONSTRAINT PK_occuper PRIMARY KEY (nom_bapteme, id_periode, num_enclos),
CONSTRAINT FK_occuper_nom_bapteme FOREIGN KEY (nom_bapteme) REFERENCES animal
(nom_bapteme),
CONSTRAINT FK_occuper_id_periode FOREIGN KEY (id_periode) REFERENCES periode
(id_periode),
CONSTRAINT FK_occuper_num_enclos FOREIGN KEY (num_enclos) REFERENCES enclos
(num_enclos)
);

Travail à réaliser : Ecrivez les requêtes correspondantes

1. Requête 1 : Quels sont les tigres mâles qui reçoivent un menu composé de 40% de protides ?
SELECT nom baptême
FROM Animal, Recevoir, Menu Type, Se composer, Eléments de base, Espece
WHERE Animal.sexe = « Male »
AND Se composer.pourcentage = 40
AND Element de base.Libellé aliment = « Protides »
AND Espece.Libellé espèce = « Tigre »
2. Requête 2 : Pendant quelle période les rhinocéros vivent-ils dans un enclos ?
SELECT date début, date fin
FROM Période, Enclos, Espèce, Pouvoir vivre, Occuper
WHERE Espèce.Libellé espèce = « Rhinocéros »
3. Requête 3 : Quels sont les menus qui sont composés de moins de 10% de glucides ?
SELECT id menu
FROM Menu type, Se composer, Eléments de base
WHERE Eléments de base.libellé éléments = « Glucides »
AND Se composer.pourcentage >= 10
4. Requête 4 : Lister les animaux dont le nom ressemble à « PUMBA »
SELECT Nom baptême
FROM Animal
4/6
Centre d’Enseignement à Distance
Laurent MOREAU
CONSERVATOIRE NATIONAL DES ARTS ET METIERS
WHERE Nom baptême LIKE « %PUMBA% »
5. Requête 5 : Combien d’espèces peuvent vivre en enclos ?
SELECT COUNT(Code espèce)
FROM Espèce, Pouvoir vivre, Enclos

PARTIE 3 : TRIGGERS (6 POINTS)

On dispose de :
CREATE TABLE dept(
nodept NUMERIC(2) NOT NULL CONSTRAINT dept_nodept_pk PRIMARY KEY,
nom VARCHAR(25),
noregion NUMERIC(1) NOT NULL
);

CREATE TABLE emp(


noemp NUMERIC(7) NOT NULL CONSTRAINT emp_noemp_pk PRIMARY KEY,
nom VARCHAR(25),
prenom VARCHAR(25) ,
embauche DATE,
nosupr NUMERIC(7) ,
titre VARCHAR(25) ,
nodept NUMERIC(2) NOT NULL ,
salaire NUMERIC(11, 2) ,
tx_commission NUMERIC(4, 2) CONSTRAINT emp_tx_commission_ck CHECK (tx_commission
BETWEEN 10 AND 20) ,
CONSTRAINT emp_nodept_fk FOREIGN KEY (nodept) REFERENCES dept(nodept)
);

1. Écrire une fonction moySalaire sans paramètre qui renvoie le salaire moyen des employés.
CREATE OR REPLACE FUNCTION moySalaire() RETURNS NUMERIC AS ’
DECLARE
Moyennne NUMERIC
BEGIN
SELECT INTO moyenne AVG(salaire) FROM emp;
RETURN moyenne;
END;
‘ LANGUAGE plpgsql;
2. Utiliser ensuite cette fonction pour afficher les noms et le salaire des employés qui gagnent plus que le
salaire moyen,
SELECT nom, salaire FROM emp
WHERE salaire > moySalaire() ;
3. puis ceux dont le salaire est égal au salaire moyen à 10% près (c'est-à-dire ceux dont le salaire est
compris entre 90% et 110% du salaire moyen).
SELECT nom, salaire FROM emp
WHERE ABS(salaire-moySalaire()) < 0.10*moySalaire() ;

PARTIE 4 : DIVERS (2 POINTS)

Une table ayant été créée, son propriétaire peut accorder ou retirer à un autre utilisateur (ou à tous) les droits
suivants :

¾ SELECT : Accès en lecture à toutes les colonnes d'une table ou d'une vue.

¾ INSERT : Insérer des données dans toutes les colonnes d'une table.

¾ UPDATE : Mettre à jour dans toutes les colonnes d'une table.

¾ DELETE : Supprimer des enregistrements d'une table.

5/6
Centre d’Enseignement à Distance
Laurent MOREAU
CONSERVATOIRE NATIONAL DES ARTS ET METIERS

¾ RULE : Définir une règle sur une table ou une vue.

¾ ALL : Donner tous les privilèges.

1. Créer une vue relative au numéro, nom, titre, numéro de département des employés.
Puis accorder les droits de SELECT sur la vue à un autre user
CREATE VIEW EMPVUE AS
SELECT NOEMP, NOM, TITRE, NODEPT
FROM EMP;
GRANT SELECT
ON EMPVUE
TO <nom de l’utilisateur>
2. Accorder tous les droits sur la table DEPT à un autre user

GRANT ALL ON DEPT TO <nom de l’utilisateur>

PARTIE 5 : REPRISE DUR PANNE (2 POINTS)

Expliquez les différentes techniques de reprises sur panne

Cf cours

6/6
Centre d’Enseignement à Distance
Laurent MOREAU

Vous aimerez peut-être aussi