• Aucun résultat trouvé

Module Bases de Données et Sites Web Partiel du 1

N/A
N/A
Protected

Academic year: 2022

Partager "Module Bases de Données et Sites Web Partiel du 1"

Copied!
19
0
0

Texte intégral

(1)

Université Pierre et Marie Curie - Paris 6 - UFR 922 - Licence d'informatique

Module Bases de Données et Sites Web

Partiel du 1

er

avril 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 :

Réponse :

Spécifiques : Grant SELECT (nom, prenom) on Enseignant Grant SELECT(nom, prenom, niveau) on Etudiant

Généraux : Grant SELECT on Enseignant et grant SELECT on Etudiant 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 :

(2)

Réponse : Spécifiques :

Grant SELECT(domaine, id-ens) ON Enseignant,

Grant SELECT (id-cours ; id-ens, jour) ON Cours, SELECT (id-ens,id-cours) on Enseigne Généraux :

Grant SELECT on Enseignant, Cours, Enseigne 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 :

Réponse :

Spécifiques : Grant INSERT (nom) on Enseignant

Grant SELECT(nom,statut) on Etudiant, SELECT(nom) on Enseignant Généraux : INSERT, SELECT on Enseignant, SELECT on Etudiant.

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 :

(3)

Réponse : A l’étape 5 :

Max possède tous les droits sur R

Luc :possède INSERT on R, avec grant OPTION

Léa possède INSERT on R et INSERT(A1) on R avec grant option Zoé possède INSERT on R, et INSERT(A1) on R

Jules possède INSERT(A1) on R, avec grant option

A l’étape 6 :

Max possède tous les droits.

Zoé possède INSERT(A1) on R

Léa possède INSERT on R avec grant option Jules et Luce n’ont plus de droits sur R.

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? Justifier

oui

‰

non

‰

Justif. :

Oui toujours un Vx avant une écriture pour éviter le cas suivant :

(4)

E1a, E2a, commit T1, commit T2 : perte de E1a

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. On note RC le niveau read committed et SER le niveau serializable. Répondre en complétant les colonnes du tableau et en donnant une brève explication

Séquence souligner les instructions traitées

état final Explication

S1 niveau RC 1.1, 1.2, 1.3, 2.1, 2.2

[1, ...]

[2, ... ]

S1 niveau SER 1.1, 1.2, 1.3, 2.1, 2.2

[1, ...]

[2, ... ]

S2 niveau RC 2.1, 2.2, 1.1, 1.2, 1.3

[1, ...]

[2, ... ]

S2 niveau SER 2.1, 2.2, 1.1, 1.2, 1.3

[1, ...]

[2, ... ]

S3 niveau RC 1.1, 2.1, 2.2, 1.2, 1.3

[1, ...]

[2, ... ]

S3 niveau SER [1, ...]

(5)

1.1, 2.1, 2.2, 1.2, 1.3 [2, ... ]

S1 1.1, 1.2, 1.3, 2.1, 2.2

Séquence en série T1 puis T2 (donc sérializable): état final [1, 60] [2, 45]

Exécution identique en RC et en SER S2 2.1, 2.2, 1.1, 1.2, 1.3

Séquence en série T2 puis T1 (donc sérializable): état final [1, 75] [2, 50]

Exécution identique en RC et en SER S3 1.1, 2.1, 2.2, 1.2, 1.3

S3 Niveau RC (read committed)

Etat vu par T1 après 1.1 : [1, 60] [2, 20]

Etat vu par T2 après 2.1, 2.2 [1, 10] [2, 25]

Etat vu par T1 après 2.2 [1, 60] [2, 25]

Etat vu par T1 après 1.2, 1.3 [1, 60] [2, 35]

S3 Niveau SER (sérializable); 1.1, 2.1, 2.2, sont traitées puis 1.2 est refusée

Car 1.2 modifie le 2ème tuple, qui a été modifié et validé par T2 après le début de T1.

Donc on abandonne T1. Seule T2 est traitée Etat après 2.1, 2.2 : [1, 10] [2, 25]

Supplément de réponse : S4 2.1, 1.1, 2.2, 1.2, 1.3

Niveau read committed

Etat vu par T2 après 2.1 : [1, 10] [2, 25]

Etat vu par T1 après 1.1 [1, 60] [2, 20]

Etat vu par T2 après 2.2 [1, 10] [2, 25]

Etat vu par T1 après 2.2 [1, 60] [2, 25]

Etat vu par T1 après 1.2, 1.3 [1, 60] [2, 35]

Niveau sérializable; 1.2 est refusée (idem séquence S3)

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.

Toute update qui modifie seulement le 1er tuple . Par ex:

Update R set b=1 where a=1;

Ou

(6)

Update R set b=1 where b=10; (initialement, l'attribut b du 1er tuple vaut 10) Réponse erronée :

La mise à jour de tous les tuples de R. Cette instruction attend

avant d'être exécutée d'obtenir tous les verrous sur les tuples de R, mais cela ne provoque pas d'interblocage

Update R set b=1 (sans clause where) Autres réponses erronées :

Update R set b=1 where a=2;

ou

Update R set b=1 where b=20;

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 ainsi :

- s'il y a un interblocage, lister les blocages qui en sont la cause.

- sinon compléter la séquence avec les instructions 1.3 et 2.2 de validation, puis écrire la séquence dans l'ordre d'exécution des instructions.

Séquence: 1.1, 1.2, 2.1, Instr

Interblocage ? oui

‰

non

‰

Justification: blocages : ordre d'exécution : ... ..., ..., ..., ..., ..., ...

Non T1 obtient tous ses verrous avant que T2 ne commence.

T1 doit valider pour que T2 puisse s'exécuter Séquence: 1.1, 2.1, 1.2, Instr

Interblocage ? oui

‰

non

‰

Justification: blocages : ordre d'exécution : ... ..., ..., ..., ..., ..., ...

Oui, T1 attend que T2 relâche le verrou sur le tuple a=2 puis T2 demande le verrou sur le tuple a=1 détenu par T1

T1 reçoit le message signalant l'interblocage Séquence: 2.1, 1.1, Instr, 1.2

Interblocage ? oui

‰

non

‰

Justification: blocages : ordre d'exécution : ... ..., ..., ..., ..., ..., ...

(7)

Oui, T2 attend que T1 relâche le verrou sur le tuple a=1 puis T1 demande le verrou sur le tuple a=2 détenu par T2

T2 reçoit le message signalant l'interblocage Séquence: 2.1, Instr, 1.1, 1.2

Interblocage ? oui

‰

non

‰

Justification: blocages : ordre d'exécution : ... ..., ..., ..., ..., ..., ...

Non T2 obtient tous ses verrous avant que T1 ne commence.

Exercice 3 : Contrôle de concurrence 3 pts

La BD d'une application de vente est constitué de la relation Vente (nv, prix, jour) nv est le numéro d'une vente (clé)

Question 1 : Soit la transaction V d'un vendeur qui insère une nouvelle vente avec un nouveau numéro.

Soit x une variable locale au terminal d'un vendeur.

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, en une seule phrase ?

Question complémentaire

b) La séquence suivante s'exécute-t-elle entièrement ? V1a, V2a, V1b, V2b, V1c

V1 insère une nouvelle vente: [x, ..., ...] dans Vente.

Une autre transaction V2 tente d'insérer une nouvelle vente [x, ..., ...] avec le même numéro de vente que celui choisi par V1. Or il ne peut y avoir 2 ventes avec le même numéro.

Complément

b) La séquence suivante s'exécute-t-elle entièrement ? V1a, V2a, V1b, V2b, V1c

Réponse : NON : V2B est en attente. La contrainte d'unicité est garantie par un index sur nv. L'insertion V2b ne provoque pas d'erreur mais une attente du VX sur l'index, détenu par T1.

Lorsque V1 valide : V1c, alors V2 reçoit un message d'erreur car l'unicité n'est pas respectée.

(8)

Modifier ou compléter l'instruction a) de V pour éviter ce refus.

Solution 1 :

Verrouiller la Vente qui a le plus grand numéro

x Å select nv from Vente where nv = (select max(nv) from Vente) FOR UPDATE

Rmq : la réponse suivante n'est pas correcte :

x Å select max(nv) from Vente FOR UPDATE

car la clause for update s'applique seulement aux requêtes dont le résultat est un sous ensemble d'une relation (et sans aggrégation).

Solution 2 a) : rien

b) insert into Vente (1 + (select max(nv) from Vente), 10, '01 avril 2005');

Solution 3

a) lock table Vente; x Å select max(nv) from Vente;

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 dans cet ordre? Sinon, indiquer l'ordre d'exécution des instructions.

T1a, T1b, T2a, T2b, T1c, T1d, T1e, T2c, T2d, T2e

(9)

Non. La séquence ne peut pas s'exécuter dans cet ordre

Instruction T2a : T2 attend que T1 relâche le VX sur le tuple de M Ordre : toutes les instr. de T1 puis toutes les instr. de T2

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 puissent jamais être bloquées par une longue négociation en cours avec un client.

Solution

Le blocage est dû au VX sur M

Relâcher le VX sur M dès que possible, lorsque le numéro unique de la nouvelle vente est connu.

Objectif: relacher le VX sur M avant la négociation qui peut durer 10 minutes.

b) x Å select n from M; commit;

Cela revient à découper T en 2 transactions.

Exercice 4 : SQL3 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) » :

(10)

CREATE TYPE IPAdress AS OBJECT ( n1 NUMBER(3),

n2 NUMBER(3), n3 NUMBER(3), n4 NUMBER(3) );

Type Ecran :

CREATE TYPE Ecran AS OBJECT ( serie NUMBER(10), taille NUMBER(2) );

Type Disque :

CREATE TYPE Disque AS OBJECT (

(11)

serie NUMBER(10), marque VARCHAR2(50), taille NUMBER(4) );

Type Imprimante :

CREATE TYPE Imprimante AS OBJECT ( serie NUMBER(10),

nom VARCHAR2(50), adresse IPAdress );

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 :

CREATE TYPE Peripherique AS OBJECT ( serie NUMBER(10),

genre VARCHAR2(10) );

(12)

Type Souris :

CREATE TYPE Souris UNDER Peripherique (

typeDeSouris VARCHAR2(20) );

Type Clavier :

CREATE TYPE Clavier UNDER Peripherique (

typeDeClavier VARCHAR2(20) );

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

(13)
(14)

2) Ecrire le type ordinateur en SQL3

(15)

CREATE TYPE EnsPeripheriques AS VARRAY(10) Of Peripherique;

CREATE TYPE EnsDisques AS VARRAY(10) OF Disque;

CREATE TYPE EnsImprimantes AS VARRAY(10) OF REF Imprimante;

CREATE TYPE Ordinateur AS OBJECT ( per EnsPeripheriques, ecr Ecran,

dis EnsDisques,

impri EnsImprimantes, serie NUMBER(10), nom VARCHAR2(50), ip IPAdress

);

Question 4 : Définir une table LesOrdinateurs permettant le stockage de l’ensemble des ordinateurs de l’entreprise.

CREATE TYPE LesOrdinateurs AS TABLE OF Ordinateur;

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.

Non, il faut aussi une table d’imprimantes (vues les références)

Exercice 5 : 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

(16)

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

INSERT INTO EnsDepartements VALUES ( Departement(10521,

'Informatique',

(17)

100000, LesEmployes(

Employe('Dupont','Gerard',1,15000), Employe('Durand','Pierre',2,23000)

)

));

INSERT INTO EnsDepartements VALUES (

Departement(23652, 'Comptabilite',

20000,

LesEmployes(

Employe('Martin','Jean',3,12000) )

)

);

1.2) Insérer le logiciel « Word » dont le prix est de 13 000 euros/an qui n’a pas été installé

INSERT INTO EnsLogiciels VALUES ( Logiciel('WORD',13000,NULL));

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

INSERT INTO EnsLogiciels VALUES (

Logiciel('ORACLE',30000,LesInstallations(Installation('12-03-2005',(SELECT REF(j) FROM EnsDepartements j WHERE j.nom='Informatique')))));

1.4) Ajouter l’installation du logiciel Oracle dans le département Comptabilité au 15-04-2005

(18)

INSERT INTO

TABLE(SELECT t.installes FROM EnsLogiciels t WHERE t.nom='ORACLE') VALUES

(Installation('15-04-2005',(SELECT REF(j) FROM EnsDepartements j WHERE j.nom='Comptabilite')));

Question 2 : Ecrire les requêtes suivantes en SQL3

2.1) Sélectionner les départements dont le budget est supérieur à 50000 euros

SELECT t.nom FROM EnsDepartements t WHERE t.Budget > 50000;

2.2) Sélectionner les noms et numéros des départements dont l’un des employés gagne plus de 20 000 euros

SELECT t.nom,t.code FROM EnsDepartements t WHERE EXISTS (

SELECT m.nom FROM TABLE(t.membres) m WHERE m.salaire > 20000);

(19)

2.3) Sélectionner les départements dans lesquels le logiciel ORACLE est installé

SELECT DEREF(t.dept) INTO dpt FROM TABLE( SELECT l.installes FROM EnsLogiciels l WHERE l.nom='ORACLE') t;

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';

Elle sélectionne les noms des départements dont le budget est le même que celui du département Ressources Humaines.

Références

Documents relatifs

Huiles essentielles, hydrolats et huiles végétales, produits naturels, cosmétiques: Rabais de 10 % sur les huiles essentielles, hydrolats et huiles végétales.. Offre valable sur

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

« Charles, par la grâce de Dieu roi de France, Comte de Provence, Forcalquier et terres adjacentes, savoir faisons à tous les présents et à venir que nous

• CONNECT : Autorise la connexion à une base Oracle ainsi qu’un certain nombre d’autres actions (privilèges associés CREATE TABLE, CREATE VIEW, CREATE SESSION, etc.). •

1) Je veux autoriser l’utilisateur ‘Dupont’ à lire et à supprimer des lignes sur la table ‘Employe’.?. GRANT SELECT , DELETE

La transmission héréditaire de la loge depuis deux siècles et demi — puisque les lettres patentes royales prévoyaient « la propriété de la loge à huit places (…)

LE MINISTRE de l'Education nationale, Abdelhakim Belabed et la ministre de la Culture et des Arts, Soraya Mouloudji ont co-pré- sidé, lundi au siège du ministère de la Culture,

(Si en lisant que je suis noire, t’as envie de dire que non, je suis métisse, laisse- moi te dire que la société entière ne fait pas de différence dans la manière dont elle