Contrôle Bases de Données

6 Mars 2002

 

 

 

Durée : 1h30. Documents autorisés.

Barème : I (12 points), II (8 points).

Recommandations : choisir des solutions simples et lisibles et des réponses succinctes.

 

Partie I : Conception de schéma

Vreng est une application permettant de concevoir et de naviguer dans des mondes virtuels. A chaque monde virtuel est associé un fichier mémorisant l’état initial du monde : les objets composant ce monde, les caractéristiques de ces objets et leur disposition dans l’espace. La navigation dans ces mondes virtuels se fait à l’aide d’avatars. Un avatar est un objet représentant un utilisateur du système. Certains objets sont mobiles, c’est-à-dire, qu’ils peuvent changer de position dans l’espace : une bouteille, un chaise ou un avatar peuvent changer de position, alors qu’un mur ne peut pas changer de position. Les caractéristiques du mouvement de chaque objet dépendent de sa classe d’appartenance. Chaque objet  possède des caractéristiques visuelles (couleur, etc.) une viscosité, une densité et une résistance en cas de collision. Les objets du monde virtuels possèdent des états : une porte peut être ouverte, fermée, verrouillée, etc. Un chaise peut être occupée ou non, une bouteille peut être vide, pleine, bouchée, etc.  Les objets peuvent être composés d’autres objets : un ordinateur est composé d’un clavier, un écran, une souris et une unité centrale. Certains objets permettent de passer d’un monde virtuel à un autre. Un  objet exposé dans un musée peut servir de porte d’entrée à un mode décrivant le site/musé d’où provient l’objet.

 

Les concepteurs de Vreng désirent gérer la persistance des mondes virtuels dans une base de données relationnelle. La liste suivante présente des informations relevées (et adaptées à ce contrôle) à partir des fichiers utilisés dans Vreng pour décrire les mondes virtuels  :

·         id                            //identifiant d’objet

·         given_name         //nom d’objet

·         world_name         //nom du monde d’appartenance d’un objet

·         url                          //URL de chargement de monde virtuel

·         class_name          //nom de classe d’objets

·         resistance             //code permettant de déterminer la résistance des objets en cas de collision

·         viscuosity            //code permettant de déterminer la viscosité des objets

·         color                      //code de couleur d’objet

·         density                  //code de densité d’objet

·         lspeed                   //vitesse linéaire d’objet

·         aspeed                  //vitesse angulaire d’objet

·         live                         //durée de vie d’objet

·         timestamp             //date de création d’un objet

·         x, y et z                  //coordonnés d’un objet dans un espace 3D

·         ax, ay, az               //angles d’inclinaison d’un objet par rapport aux différents axes

·         state                      //état d’un objet

 

On suppose que l’ensemble de dépendances fonctionnelles associé à ces données est le suivant :

·         id à x, y, z, ax, ay, az, world_name, state, color, timestamp, given_name, class_name

·         world_name à url

·         url à world_name

·         class_name à live, resistance, density, viscuosity, lspeed, aspeed

 

Travail demandé :

1.        Représenter sous forme de graphe la couverture minimale de l’ensemble de dépendances fonctionnelles donné ci-dessus.

2.       Déduire un schéma relationnel en troisième forme normale. Ce schéma est-il en BCNF ?

3.       Compléter les informations relevées et le graphe de dépendances fonctionnelles pour tenir compte du lien de composition entre objets et du fait que certains objets peuvent permettre de passer d’un monde à un autre. Répercuter les changements sur votre schéma relationnel.

4.       Affiner votre schéma relationnel pour tenir compte du fait que seuls les objets mobiles peuvent avoir une vitesse de déplacement (lspeed, aspeed). Donner le schéma obtenu.

Partie II : SQL

En reprenant la base de données vue en TP, schéma suivant :

 

Vins (nv, cru, mill, degre)

Buveurs (nb, nomb, prenomb, type)

Achats (nb, nv, dat, lieu, qte)

Recoltes (np, nv, qte)

Producteurs (np, nomp, prenomp, region)

Précisez si les requêtes suivantes sont correctes ou non. Décrivez en français le résultat des requêtes correctes :

1       Select distinct np from Producteurs where np  in Recoltes ;

2       Select cru from Vins group by cru having count(nv) >1 ;

3       Select distinct v1.cru from Vins v1, Vins v2 where v1.cru=v2.cru and v1.nv!=v2.nv ;

4       Select p1.nomp, p2.nomp from Producteurs p1, Producteurs p2

Where p1.region=p2.region and p1.np > p2.np ;

5       Select nv, count(np), sum(qte) from Recoltes ;

6       Select nv from Vins where not exists (select * from Achats where Achats.nv = Vins.nv) ;

7       Create view achats_tries as select * from Achats order by dat ;

8       Select * from Vins where degre = (select max(degree) from vins ) ;