Université Pierre et Marie Curie - Paris 6 - UFR 922 - Licence d'informatique
Module Bases de Données et Sites Web
Partiel du 1
eravril 2005
Documents autorisés – Durée : 2h.
Exercice 1 : Autorisation 2 pts
Question 1. On considère le schéma relationnel suivant :
Enseignant (id-ens, nom, prenom, grade, domaine) Etudiant (id-et, nom, prenom, niveau, statut ) Enseigne (id-ens, id-cours)
Cours (id-cours, titre, salle, jour)
Quels sont les privilèges nécessaires pour exécuter les requêtes suivantes ? Pour chacune des requêtes, on donnera les privilèges les plus spécifiques, et les privilèges généraux permettant d’effectuer la requête.
a) SELECT nom, prenom FROM Enseignant UNION
SELECT nom, prenom FROM Etudiant where niveau = ‘doctorat’ ; Privilèges les plus spécifiques :
Privilèges généraux :
b) SELECT domaine FROM Enseignant E1, Enseigne E2 WHERE E1.id-ens=E2.id-ens
AND E2.id-cours IN
(SELECT id-cours FROM Cours WHERE jour = ‘vendredi’);
Privilèges les plus spécifiques :
Privilèges généraux :
c) INSERT INTO Enseignant(nom)
SELECT DISTINCT nom FROM Etudiant WHERE statut = ‘moniteur’ AND
nom NOT IN (SELECT nom FROM Enseignant)
Privilèges les plus spécifiques :
Privilèges généraux :
Question 2. On considère la séquence d’autorisation suivante (Max est propriétaire de R):
(1) Max GRANT INSERT ON R TO Luc, Léa WITH GRANT OPTION (2) Luc GRANT INSERT ON R TO Zoé
(3) Luc GRANT INSERT(A1) ON R TO Jules WITH GRANT OPTION (4) Léa GRANT INSERT(A1) ON R TO Zoé
(5) Jules GRANT INSERT (A1) ON R TO Léa WITH GRANT OPTION (6) Max REVOKE INSERT ON R FROM Luc
Donnez l’état du graphe à l’étape 5 puis à l’étape 6 Graphe à l’étape 5 :
Graphe à l’étape 6 :
Exercice 2 : Transactions 4 pts
On considère la relation R(a, b). Dans l'état initial, la relation R contient 2 tuples :
[1, 10]
[2, 20]
On considère les transactions T1 et T2. Les instructions SQL de chaque transaction sont numérotées.
T1 : 1.1 : update R set b = 3 * (select b from R where a=2) where a=1;
1.2 : update R set b = (select b from R where a=1) - b where a=2;
1.3 : commit;
T2 2.1 : update R set b=b + 5 where a=2;
2.2 : commit;
Le SGBD utilise de l'estampillage et gère plusieurs versions des données pour garantir l'isolation des transactions.
Question 1 Pour éviter les écritures perdues, le SGBD doit-il demander un verrou exclusif avant toute écriture?
oui
non
Question 2. On donne les séquences suivantes :
S1 1.1, 1.2, 1.3, 2.1, 2.2 S2 2.1, 2.2, 1.1, 1.2, 1.3 S3 1.1, 2.1, 2.2, 1.2, 1.3
On propose de traiter les séquences S1 à S3, avec le niveau d'isolation read committed ou sérializable.
Chaque séquence est traitée à partir de l'état initial de R. On considère qu'une transaction abandonne (puis ne recommence pas) lorsque le SGBD refuse de traiter une opération.
- Toutes les instructions peuvent-elles être traitées? Répondre dans le tableau ci-dessous en soulignant en bleu les instructions qui ont pu être traitées.
- Donner la valeur des 2 tuples de R en fin d'exécution, selon le niveau d'isolation choisi. Répondre en complétant les colonnes 2 et 3 du tableau. Puis compléter votre réponse par une brève explication Séquence (souligner
les instr traitées
niveau: read committed
niveau serializable
Explication
1.1, 1.2, 1.3, 2.1, 2.2 [1, ...]
[2, ... ]
[1, ...]
[2, ... ]
2.1, 2.2, 1.1, 1.2, 1.3 [1, ...]
[2, ... ]
[1, ...]
[2, ... ]
1.1, 2.1, 2.2, 1.2, 1.3 [1, ...]
[2, ... ]
[1, ...]
[2, ... ]
Question 3. On complète T2 en ajoutant une nouvelle instruction qui succède à l'instruction 2.1 (et précède la validation de T2)
Donner un exemple de nouvelle instruction SQL pouvant provoquer un interblocage.
Par la suite, on appelle Instr cette nouvelle instruction. Parmi les séquences suivantes lesquelles provoquent un interblocage ? Répondre en cochant la case et justifier brièvement.
Séquence: 1.1, 1.2, 2.1, Instr
Interblocage ? oui
non
Justification:
Séquence: 1.1, 2.1, 1.2, Instr
Interblocage ? oui
non
Justification:
Séquence: 2.1, 1.1, Instr, 1.2
Interblocage ? oui
non
Justification:
Séquence: 2.1, Instr, 1.1, 1.2
Interblocage ? oui
non
Justification:
Exercice 3 : Contrôle de concurrence 3 pts
Soit la relation Vente (nv, prix, jour)
nv est le numéro d'une vente (clé)
Question 1 : Soit la transaction V qui insère une nouvelle vente avec un nouveau numéro.
a) x Å select max(nv) from Vente; on affecte la variable x avec le résultat de la requête b) insert into Vente ( x + 1, 10, '01 avril 2005'); l'insertion utilise la valeur de la variable x
c) commit;
Deux transactions V1 et V2 de type V s'exécutent simultanément. On note V1a, V1b, V1c les instructions a) b) c) de V1 respectivement et V2a, V2b, V2c celles de V2.
La séquence : V1a, V2a, V1b, V1c, V2b provoque une erreur : V2b est refusée car elle ne respecte pas la contrainte d'unicité de nv. Expliquer pourquoi ?
Modifier ou compléter l'instruction a) de V pour éviter ce refus.
Question 2 : On complète la BD avec une nouvelle relation M(n) contenant initialement un seul tuple [0].
On considère maintenant la transaction T : a) update M set n= n+1;
b) x Å select n from M;
c) insert into Vente ( x , 10, '01 avril 2005');
d) update Vente set prix = prix*0,8 where nv = x ; remise de 20% sur la vente
e) commit;
2 transactions T1 et T2 de type T s'exécutent simultanément.
La séquence suivante peut-elle s'exécuter ? Justifier votre réponse.
T1a, T1b, T2a, T2b, T1c, T1d, T1e, T2c, T2d, T2e
On distingue les ventes courtes des ventes longues selon la durée de la négociation avec le client avant de lui accorder une remise. Soit t le délai entre la fin de l'étape c) et le début de l'étape d) :
t = 10 secondes pour une vente courte, t = 10 minutes pour une vente longue.
Compléter l'instruction b) pour que plusieurs ventes rapides ne soient pas bloquées par une longue négociation en cours avec un client.
Exercice 4 : OQL Schéma, création de types, références, héritage 5 pts
On propose de concevoir le schéma d’une base de données permettant la gestion du matériel informatique d’une petite société. La base de données permet de décrire chacun des ordinateurs de l’entreprise.L’exercice consiste en la création du schéma de cette BD. Il sera éventuellement nécessaire de créer des types intermédiaires même si l’exercice ne le précise pas.
Question 1 : On définit les objets suivants:
• Un écran est constitué d’un numéro de série et d’une taille (sous forme d’un nombre entier)
• Un disque dur est constitué d’un numéro de série, d’une marque et d’une capacité
• Une imprimante est constituée d’un numéro de série d’un nom et d’une adresse IP ; une
adresse IP est constituée de 4 nombres de 3 chiffres maximum, séparés par des . (par exemple : 127.45.63.129)
Ecrire en SQL 3 la définition des objets décrits
Type(s) « supplémentaire(s) » :
Type Ecran :
Type Disque :
Type Imprimante :
Question 2 : Définir un type Périphérique définissant des périphériques supplémentaires (Clavier, souris, etc…). Un périphérique est constitué d’un numéro de série et d’un genre de périphérique (sous forme de chaîne de caractère). Définir ensuite un type Souris et un type Clavier : Une souris est un périphérique avec un attribut supplémentaire indiquant de quelle sorte de souris il s’agit (« Optique » ,
«Normale », « TrackBall »,……). Un clavier possède quant à lui une information sur le type de clavier (« AZERTY », « QWERTY », ….)
Type périphérique :
Type Souris :
Type Clavier :
Question 3 : Définir le type ordinateur : un ordinateur est constitué d’un numéro de série, d’un nom et d’une adresse IP. Chaque ordinateur possède un écran et un ou plusieurs disques durs et éventuellement des périphériques (disques et périphériques n’appartiennent qu’à un et un seul ordinateur). Chaque ordinateur peut être connecté à une ou plusieurs imprimantes ; plusieurs ordinateurs peuvent être connectés à la même imprimante.
1) Dessiner le schéma entité association correspondant à cette description
2) Ecrire le type ordinateur en SQL3
Question 4 : Définir une table LesOrdinateurs permettant le stockage de l’ensemble des ordinateurs de l’entreprise.
Question 5 : La table LesOrdinateurs est-elle suffisante pour stocker tous les objets de la base ? Justifiez votre réponse et définissez, si besoin, les autres tables nécessaires.
Exercice5 : Insertions et Requêtes 6 pts
Soit le schéma suivant en SQL 3 :
CREATE TYPE Employe AS OBJECT ( nom VARCHAR2(50), prenom VARCHAR2(50), numero NUMBER(5), salaire NUMBER(6) );
CREATE TYPE LesEmployes AS VARRAY(50) Of Employe;
@compile
CREATE TYPE Departement AS OBJECT ( Code NUMBER(5), Nom VARCHAR2(50), Budget NUMBER(10), membres LesEmployes );
@compile
CREATE TYPE Installation AS OBJECT ( dat DATE,
dept REF Departement );
@compile
CREATE TYPE LesInstallations AS VARRAY(50) OF Installation;
@compile
CREATE TYPE Logiciel AS OBJECT ( nom VARCHAR2(50), prix NUMBER(6), installes LesInstallations );
@compile
CREATE TABLE EnsDepartements OF Departement;
CREATE TABLE EnsLogiciels OF Logiciel;
Question 1 (insertion): Ecrire en SQL3 les requêtes suivantes 1.1) Insérer :
• le département « Informatique » de code 10521, dont le budget est de 100 000 euros, qui possède deux employés :
o Gérard Dupont (numéro 1) dont le salaire est de 15 000 euros/an o Pierre Durand (numéro 2) dont le salaire est de 23 000 euros/an
• et le département « Comptabilité » de code 23652, dont le budget est de 20 000 euros, qui possède un employé :
o Jean Martin (numéro 3) dont le salaire est de 12 000 euros/an
1.2) Insérer le logiciel « Word » dont le prix est de 13 000 euros/an qui n’a pas été installé
1.3) Insérer le logiciel « Oracle » dont le prix est de 30000 euros/an et qui a été installé dans le département « Informatique » le 12-03-2005
1.4) Ajouter l’installation du logiciel Oracle dans le département Comptabilité au 15-04-2005
Question 2 : Ecrire les requêtes suivantes en SQL3
2.1) Sélectionner les départements dont le budget est supérieur à 50000 euros
2.2) Sélectionner les noms et numéros des départements dont l’un des employés gagne plus de 20 000 euros
2.3) Sélectionner les départements dans lesquels le logiciel ORACLE est installé
2.4) Expliquer ce que fait la requête suivante :
SELECT dept.nom
FROM EnsDepartements dept, EnsDepartements dept2
WHERE dept.Budget=dept2.Budget AND dept2.nom='Ressources Humaines';