Module Bases de Données et Web Examen réparti du 4 novembre 2011 Version CORRIGEE

Documents pareils
TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Cours Bases de données 2ème année IUT

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

1 Position du problème

A QUOI SERVENT LES BASES DE DONNÉES?

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

A QUOI SERVENT LES BASES DE DONNÉES?

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Bases de données relationnelles

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Langage SQL : créer et interroger une base

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

CREATION WEB DYNAMIQUE

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

SQL Historique

Olivier Mondet

Gestion de base de données

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

Cours SQL. Base du langage SQL et des bases de données

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Présentation Windows Azure Hadoop Big Data - BI

PHP 5. La base de données MySql. A. Belaïd 1

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Bases de Données relationnelles et leurs systèmes de Gestion

1. Base de données SQLite

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Les bases de données

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

BTS/CGO P10 SYSTEME INFORMATION Année

Corrigés détaillés des exercices

Hala Skaf-Molli. Nancy-Université 14 mai 2007

Bases de données avancées

Devoir Data WareHouse

PROJET 1 : BASE DE DONNÉES REPARTIES

Compétences Business Objects

Mysql avec EasyPhp. 1 er mars 2006

OpenPaaS Le réseau social d'entreprise

Paginer les données côté serveur, mettre en cache côté client

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

OCL - Object Constraint Language

Sécurité des applications web. Daniel Boteanu

Notes de cours : bases de données distribuées et repliquées

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Cours Bases de données 2ème année IUT

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Ecran principal à l ouverture du logiciel

Création et Gestion des tables

Introduction aux Bases de Données 2004/2005

Manuel Viadeis CRM Connecteur intégration L100 étendue.

Historisation des données

TP Bases de données réparties

Encryptions, compression et partitionnement des données

Systèmes de Gestion de Bases de Données

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

I4 : Bases de Données

.NET - Classe de Log

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

PHP 4 PARTIE : BASE DE DONNEES

Attaques applicatives

Intégrité sémantique dans les bases de données relationnelles

Algorithmique & programmation

Application web de gestion de comptes en banques

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

IFT3030 Base de données. Chapitre 1 Introduction

Intégrité des données

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Cours 4 : Agrégats et GROUP BY

Vincent Augusto

Utilitaires méconnus de StrataFrame

Sommaire. I.1 : Alimentation à partir d un fichier Access (.mdb)...2

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

[BASE DE DONNEES MULTIMEDIA]

Rappel sur les bases de données

Java DataBaseConnectivity

Premiers Pas en Programmation Objet : les Classes et les Objets

TP3 : Creation de tables 1 seance

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

OUTIL DE TRAVAIL COLLABORATIF

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

Installation d'un serveur FTP géré par une base de données MySQL

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

PHP et les Bases de données - Généralités

Le langage SQL (première partie) c Olivier Caron

Configurer la supervision pour une base MS SQL Server Viadéis Services

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Les BASES de DONNEES dans WampServer

Gestion de stock pour un magasin

BASES DE DONNEES ORIENTEES OBJETS BDA10.1

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

SYSTÈMES D INFORMATIONS

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Transcription:

Nom : Prénom : page 1 Module Bases de Données et Web Examen réparti du 4 novembre 2011 Version CORRIGEE Les documents sont autorisés Durée : 2h. Répondre aux questions sur la feuille du sujet dans les cadres appropriés. La taille des cadres suggère celle de la réponse attendue. Utiliser le dos de la feuille précédente si la réponse déborde du cadre. Le barème est donné à titre indicatif. La qualité de la rédaction sera prise en compte. Ecrire à l encre bleue ou noire. Ne pas dégrafer le sujet. Exercice 1. SQL3 10 pts On considère le schéma SQL3 suivant : Create type Personne as object ( Nom varchar2(30), Affiliation varchar2(30) ) ; Create type EnsPersonnes as table of ref Personne ; Create type Article as object ( Titre varchar2(50), Auteurs EnsPersonnes ); Create type EnsArticles as table of ref Article ; Create type Conference as object ( Titre varchar2(50), Lieu varchar2(30), Dateconf number(4), Participants EnsPersonnes, Contient EnsArticles ) ; Question 1. Définir les tables LesPersonnes, LesArticles et LesConferences Create table LesPersonnes of Personne ; Create table LesArticles of Article nested table auteurs store as T-auteurs; Create table LesConferences of Conference Nested table participants store as T-participants, Nested table contient store as T-contient; Question 2. On effectue les instructions suivantes : Insert into LesPersonnes values( Personne( Max, UPMC ) ); Insert into LesPersonnes values( Personne( Léa, P6 ) ); Insert into LesArticles values ( Article( art1, EnsPersonnes()) );

Lettres initiales du Prénom et du Nom: page 2 Ecrivez en SQL3 l instruction permettant d insérer la conférence de titre BD et Web, qui a lieu à Lyon en 2010, à laquelle Max participe, et qui contient l article art1. Insert into LesConferences values ( BD et Web, Lyon, 2010, enspersonnes (( ref(p) from LesPersonnes p where p.nom= Max )), ensarticles(( ref(a) from LesArticles a where a.titre= art1 ))); Question 3. Ecrivez l instruction SQL3 qui permet d insérer Léa comme auteur de l article art1. Insert into table ( a.auteurs from LesArticles a where a.titre= art1 ) values (( ref(p) from lespersonnes p where p.nom= Léa )); Question 4. Ecrivez en SQL3 les requêtes suivantes : 1. Noms des participants à la conférence BD et Web. Select value(p).nom from lesconferences c, table(c.participants) p where c.titre= BD et Web ; 2. Nombre de participants à la conference BD et Web ;

Lettres initiales du Prénom et du Nom: page 3 Select count(value(p)) from LesConferences c, table(c.participants) p where c.titre = BD et Web ; 3. Nom des auteurs des articles qui ne participent pas à la conférence où est publié leur article. Select value(a).nom from LesConferences c, table(c.contient) cont, table(value(cont).auteurs) a where value(a) not in ( value(p) from table(c.participants) p); REQUETE NON POSEE Titre de la conférence qui a eu lieu en 2010 et qui contient l article art1. Réponse : Select c.titre from LesConferences c, table (c.contient) cont where c.dateconf=2010 and value(cont).titre= art1 ;; Question 5. Avant qu un article soit publié, il est évalué par plusieurs relecteurs (5 au maximum) qui lui attribuent une note. Modifier le schéma initial pour avoir, pour chaque article, les relecteurs et la note que chacun a attribuée. Par exemple, l article art1 a été relu par Luc, qui a donné la note de 5 et par Marie, qui a donné la note de 4. Drop type article ; Create type evaluation as object ( relecteur ref Personne, note number(2) ) ; Create type ensevaluation as varray(5) of evaluation ; Create type Article as object ( Titre varchar2(50),

Lettres initiales du Prénom et du Nom: page 4 Auteurs EnsPersonnes, Eval ensevaluation ); Comme il s agit d un varray, on n a pas besoin de modifier la table LesArticles en ajoutant une nested table. Si ensevaluation est defini comme une table, il faut aussi modifier la table en ajoutant une nested table. Exercice 2 : OQL Références: issu de l ex OQL du partiel 2010 10 pts Soit le schéma ODL d une base pour gérer les utilisateurs d un réseau social. Un internaute possède un mur sur lequel il partage ses photos. Un internaute peut commenter les photos des autres internautes. Un internaute peut voter pour (avis positif) ou contre (avis négatif) une photo. Une photo peut être associée avec les personnes qui apparaissent en portrait sur la photo. Un internaute a des amis directs, toujours mutuels. Les amis indirects, éloignés d un chemin de longueur d, sont appelés les proches, cf. la méthode proches(d). interface Personne { keys mail; attribute string mail; attribute string nom; attribute string prénom; relationship set<photo> paraît_sur inverse Photo::portrait_de ; interface Internaute : Personne { extent Internautes; attribute string login; attribute long age; attribute string ville; relationship set<internaute> amis inverse Internaute::amis; relationship Mur mur inverse Mur::propriétaire; set<internaute> proches(long d); ; interface Photo { extent Photos; keys numéro; attribute long numéro ; attribute string nom; attribute long hauteur; attribute long largeur; attribute long avis_positifs ; attribute long avis_négatifs ; relationship Mur sur inverse Mur::contient; relationship set<personne> portrait_de inverse Personne::paraît_sur; relationship set<commentaire> commentaires inverse Commentaire::sujet; ; interface Mur { extent Murs; keys id; attribute string id; attribute string nom; relationship Internaute propriétaire inverse Internaute::mur; relationship set<photo> contient inverse Photo::sur; Photo meilleur_avis(); set<photo> x() ; ; interface Commentaire { keys numéro; attribute long numéro; attribute string nom; attribute string texte; relationship Internaute écrit_par; relationship Photo sujet inverse Photo::commentaires; ; Question 1. Compléter le schéma en ajoutant une relation inverse pour la relation écrit_par de l interface Commentaire. Dans l interface Commentaire : Relationship Internaute écrit_par inverse Internaute::commente Dans l interface Internaute : Relationship set<commentaire> ecrit inverse Commentaire::ecrit_par

Lettres initiales du Prénom et du Nom: page 5 Question 2. Dans cette question et les suivantes, on ignore la modification de schéma faite à la question 1. On considère le schéma donné dans l énoncé. a) Combien de racines de persistance sont définies? 3 racines Inernautes,Murs,Photos b) La base peut-elle contenir des personnes qui ne sont pas des internautes? Oui, bien qu il n y ait pas de racine pour les Personnes, il est possible d atteindre toute les personnes qui apparaissent sur au moins une photo. Question 3. Ecrire en OQL les requêtes suivantes : R1 : Afficher le nom des photos ayant au moins 5 avis positifs, et se trouvant sur le mur de l internaute dont le mail est 123@etu.upmc.fr from where and in Select p.nom From p in Photos Where p.avis_positifs >5 And p.sur.propriétaire.mail= 123@etu.upmc.fr R2 : Afficher le mail des amis de l internaute ayant mis une photo nommée Tour Eiffel sur leur mur. Donner deux réponses équivalentes, la première en utilisant la racine Internautes, la deuxième utilisant la racine Photos. from i in Internautes where from p in Photos where

Lettres initiales du Prénom et du Nom: page 6 Select a.mail From i in Internautes, a in i.amis, p in i.mur.contient Where p.nom = Tour Eiffel Select a.mail From p in Photos, a in p.sur.propriétaire.amis Where p.nom = Tour Eiffel R3: Afficher le nombre moyen de photos par mur. Rmq : la fonction avg() calcule la moyenne. avg( count(m.contient) from m in Murs ) OU avg( count(*) from p in m.contient) from m in Murs OU Select avg(count(partition)) From m in Murs, p in m.contient Group by m R4: Quels sont les internautes qui n ont commenté aucune photos? from where Select From i in Internautes Where i not in ( p.écrit_par From p in Photos, c in p.commentaires) Autre possibilité avec un for all

Lettres initiales du Prénom et du Nom: page 7 R5 : Quel est le format (hauteur et largeur) de toutes les photos partagées sur les murs des amis de Jean Dupont? p.largeur, p.hauteur from i in Internautes, a in i.amis, p in a.mur.contient where i.nom= Dupont and i.prénom= Jean Autre solution (en utilisant 2 racines Select p.largeur, p.hauteur from m in Murs, p in m.contient, i in Internautes, a in i.amis where i.nom= Dupont and i.prénom= Jean and m.propriétaire = a Question 4 Ecrire le corps de la méthode top_commentaire() qui retourne la ou les photos ayant le plus grand nombre de commentaires, parmi les photos mur en question. Set<Photo> Mur::top_commentaire () { Photo Mur::top_commentaire() { return ( p from p in this.contient where count(p.commentaire) = ( max(p1.commentaire) from p1 in this.contient) ) Autre solution avec >= ALL Question 5 a) Expliquer ce que retourne la méthode y() définie ci-dessous. Quel est l inconvénient majeur de cette méthode?

Lettres initiales du Prénom et du Nom: page 8 set<photo> Mur::y() { return (this.contient union distinct p from a in this.propriétaire.amis, p in a.mur.y()); La méthode y retourne les photos d un mur d un internaute et celles de ses amis directs et indirects. Problème : fin de la récursion? b) Ecrire le corps de la méthode proches(d) qui retourne l ensemble des amis (et amis d amis par transitivité) atteignables par un chemin de longueur inférieure ou égale à d. Remarque : si nécessaire vous pouvez utiliser une instruction conditionnelle if then else endif. set<internaute> Internaute::proches(long d) { Set<Internaute> Internaute::proche(int d) if(d>1) then Return ( this.amis union Select distinct b From a in this.amis, b in a.proches(d-1) )

Lettres initiales du Prénom et du Nom: page 9 Else Return (this.amis) End if; QUESTION NON POSEE c) Etant donné une personne A, on veut déterminer l ensemble E des personnes qui apparaissent soit sur la même photo que A, soit sur la même photo que quelqu un appartenant à E. Expliquer brièvement comment obtenir E. Réponse : Fermeture transitive de la relation : p i est sur la même photo que p j On ajoute la méthode auxilliaire m() pour implémenter la relation «est sur la même photo» Set<Personne> Personne::m() { return ( distinct pers from ph in this.paraît_sur, pers in ph.portrait_de On détermine l ensemble E à l aide de la méthode récursive e() Initialisation: Set<Personne> visité = (A); Invocation: A.e(visité) ; Attention, il faut détecter les cycles sinon ça ne se termine pas. Set<Personne> Personne::e( set<personne> visitées) { // les personnes à visiter (moins celles qui ont déjà été visitées) Set <Personne> à_visiter = p From p in m() Where p not in visitées; Ou à visiter = m() minus visitées; // compléter les personnes visitées Visitées = Visitées union m() ; return à visiter union ( distinct q from p in à_visiter, q in p.e(visitées) )