Correction de l'activité 4.1 - Bases de données Avancées

Page 1 sur 4Lecteur de document UniversityLib

Correction de l'activité 4.1 - Bases de données Avancées

Database Design and Querying · lab

Voir tous les documents en bases de données

I N S T I T U T

S U P E R I E U R

INFORMATIQUE

)@J@@ED'@9D%D J@D'@9D' /@G9E@D'

ISI

Ann e Universitaire 2020-2021

Mast re professionnel en logiciels libres - M1

Bases de donn es Avanc es Activit 4.1

R. ZAAFRANI, 23/11/2020

Correction de l'activit 4.1

1) Sch ma ODL possible pour la base de donn es

Une d cision prendre lors de la d finition est de choisir entre interfaces et classes. Certaines classes peuvent

avoir des extensions. Nous avons choisi dimpl menter les extensions de Voiture, Vin, Appartement, Buveur et

Employ et Personne.

nveh) {

inverse

nss)

{

inverse

inverse

key

key

voitures

string nveh ;

string couleur;

string marque;

short km;

Personne

Appartient

rouler(in short distance);

class Voiture (extent

attribute

attribute

attribute

attribute

relationship

short

} ;

class Personne

attribute

attribute

attribute

attribute

relationship

relationship

short

void

short

} ;

class Employ extends Personne (extent employ s

attribute

attribute

attribute

relationship

relationship

void

Publicité

} ;

(extent personnes

string nss ;

string nom;

string prenom;

date datenaissance;

habite

Appart

Voiture

Poss de

vieillir();

dormir();

age();

inf rieurs

sup rieur

key

nss)

{

salaire;

primes; //attribut multivalu

enum fonct{ing nieur, secr taire, analyste, programmeur} fonction ;

float

list<float>

Set<Employ >

Employ

travailler();

inverse Employ :: sup rieur;

inverse Employ :: inf rieurs;

Personne :: Poss de;

Appart :: loge;

Voiture :: Appartient;

class Buveur extends Personne (extent buveurs

attribute

attribute

relationship

void

} ;

typebuv{petit, moyen, gros} type ;

etabuv{normal, ivre} etat ;

list<Vin>

boire(in Vin v);

inverse

boire

key

nss)

{

vin :: bu_par;

class Appart

attribute

relationship

(extent

Apparts)

{

struct adresse(short etage, unsigned short numero, string rue, unsigned short code, string ville) ;

Set<personne>

loge

Publicité

inverse

Personne::habite;} ;

Bases de donn es Avanc es Activit 4.1

1

class Vin (extent Vins) {

attribute

attribute

attribute

attribute

relationship

string cru;

string millesime;

string degre;

string qualite;

list<Buveur> bu_par

inverse

Buveur ::boire;} ;

Lh ritage multiple n tant pas possible au niveau des classes, les employ s buveurs sont des employ s avec les

propri t s de buveurs r p t es.

class Employ Buveur extends Employ

attribute

attribute

relationship

void

typebuv{petit, moyen, gros} type ;

etabuv{normal, ivre} etat ;

list<Vin>

boire(in Vin v);} ;

inverse

boire

(extent employ s_buveurs) {

vin ::bu_par;

2) OQL :

a. Nous attribuons le nom persistant MAVOITURE lobjet d signant ma voiture. Donnez sa couleur ?

(Q1):

mavoiture.couleur;

b. Donnez le nom de son propri taire ?

(Q2):

mavoiture.appartient.nom;

c. Retrouvez les num ros de s curit sociale des employ s inf rieurs du propri taire de MAVOITURE ?

(Q3):

mavoiture.appartient.inf rieurs.nss;

select

from m in mavoiture.appartient.inf rieurs;

m.nss

d. Retrouvez les noms et les pr noms des grands buveurs ?

(Q4):

SELECT b.nom, b.pr nom

FROM

WHERE

b in buveurs

b.type = 'gros';

e. Retrouvez les noms et les pr noms des employ s grands buveurs ?

(Q5):

SELECT eb.nom, eb.pr nom

FROM

Publicité

WHERE

eb in employ s_buveurs

eb.type = 'gros';

(Q6):

f. Retrouvez les noms et les pr noms des buveurs qui ont bu du Volnay?

SELECT b.nom, b.pr nom

FROM

WHERE

b in buveurs, v in b.boire

v.cru= 'Volnay';

Les collections d pendantes se parcourent par des variables imbriqu es

derri re le FROM.

g. Retrouvez les doublets (nom, ville) pour chaque gros buveur ?

(Q7):

SELECT STRUCT (nom : b.nom, ville:b.habite.adresse.ville)

FROM

WHERE

b in buveurs

b.type = 'gros';

Bases de donn es Avanc es Activit 4.1

2

h. Extraire le nom et le pr nom des employ s buveurs inf rieurs du propri taire de MAVOITURE, ainsi

que la liste de leurs vins bus (cru, mill sime, degr , qualit ).

SELECT STRUCT (

(Q8):

nom:struct(nom_buveur: eb.nom,

prenom_buveur: eb.prenom),

vins:( SELECT STRUCT (cru_vin: v.cru,

mill sime_vin: v.mill sime,

degr _vin: v.degr ,

qualit _vin: v.qualit )

FROM v in eb.boire)

FROM

WHERE

eb in employ s_buveurs

eb.sup rieur = mavoiture.appartient;

i. Retournez le seul objet qui r f rence l'employ ayant le num ro de s curit sociale "77" ?

(Q9): element (SELECT e

FROM e in employ s

WHERE e.nss = '77');

j. Retournez la moyenne ms de tous les salaires des employ s buverurs

ayant pour fonction "analyste".

(Q10): avg (SELECT eb.salaire

FROM eb in employ s_buveurs

WHERE eb.fonction = 'analyste');

k. Donner la liste des identifiants dobjets des voitures de la marque Renault ?

(Q11):

ARRAY( SELECT v

FROM v in voiture

WHERE v.marque = 'renault')

l. Retrouvez le nom, la ville dhabitation et l ge des employ s dont le salaire est sup rieur 10000 et

l ge inf rieur 30 ans ?

(Q12):

SELECT DISTINCT e.nom, e.habite.adresse.ville, e.age()

FROM

WHERE

Publicité

e in employ s

e.salaire > 10000 AND e.age()<30;

m. Extraire les noms et les pr noms de tous les buveurs qui ont bu le vin beaujolais 2019

(Q13): SELECT b.nom, b.pr nom

FROM

b in buveurs

WHERE 'beaujolais 2019' in (select v.cru from v in b.boire);

n. Tous les employ s buveurs ayant pour fonction "programmeur" habitent-ils "Tunis" ?

(Q14): for all eb in

(SELECT eb FROM eb in employ s_buveurs

WHERE eb.fonction = 'programmeur') :

eb.Habite.adresse.ville = 'Tunis' ;

o. Donnez le nom et la liste des inf rieurs de chaque employ qui sont mieux pay s que lui ?

(Q15):

SELECT DISTINCT (nom:e.nom, inf_mieux_pay s :

LIST( SELECT i

FROM

WHERE

i in e.inf rieurs

i.salaire > e.salaire))

FROM e in employ s;

p. Extraire les noms et pr noms des trois mieux pay s employ s buveurs poss dant une voiture de la

marque "Volswagen".

(Q16): (SELECT STRUCT(nom_personne: eb.nom,

prenom_personne:eb.prenom, salaire: eb.salaire)

FROM

WHERE

ORDER BY eb.salaire desc) [0:2] ;

eb in employ s_buveurs

eb.Poss de.marque = ' Volswagen'

Bases de donn es Avanc es Activit 4.1

3

q. Donnez pour chaque ville le salaire moyen des employ s sil est sup rieur 5000 ?

(Q17): SELECT STRUCT(ville, moy:AVG(SELECT p.salaire FROM p in

PARTITION))

e in employ s

FROM

GROUP BY ville:e.habite.adresse.ville

HAVING AVG (SELECT p.salaire FROM p in PARTITION)> 5000;

3)

a)Cr er une vue a_pour_inf rieurs pour extraire l'ensemble des employ s inf rieurs d'un

sup rieur propri taire d'une voiture ayant un num ro donn .

DEFINE

a_pour_inferieurs(nveh) as

SELECT i

FROM e in employ s, i in e.inf rieurs

WHERE e.poss de = nveh;

b) Ecrire une requ te qui retourne le nombre d'inf rieurs ayant comme sup rieur le propri taire

de la voiture num ro "55"

count (a in a_pour_inferieurs ('55'));

Bases de donn es Avanc es Activit 4.1

4