Le sujet comporte 7 pages. A,B C D C D E E A



Documents pareils
COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

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

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

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

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

I4 : Bases de Données

Olivier Mondet

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

Construction d un EDD avec SQL 2008 R2. D. Ploix - M2 Miage - EDD - Création

Historisation des données

Bases de données et sites WEB Licence d informatique LI345

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

Langage SQL : créer et interroger une base

Gestion de base de données

TP Contraintes - Triggers

Création et Gestion des tables

Auto-évaluation Oracle: cours de base

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

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

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

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

CREATION WEB DYNAMIQUE

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

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

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

Bases de données relationnelles

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

Optimisations des SGBDR. Étude de cas : MySQL

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

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

FileMaker 13. Guide de référence SQL

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

TP3 : Creation de tables 1 seance

SQL Historique

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

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

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Ora2Pg Performances. (C) 2013 Gilles Darold

Les bases de données

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

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)

1. Base de données SQLite

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

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

A QUOI SERVENT LES BASES DE DONNÉES?

Master Exploration Informatique des données DataWareHouse

Bases de Données Avancées

Le Langage De Description De Données(LDD)

OpenPaaS Le réseau social d'entreprise

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

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

La base de données XML exist. A. Belaïd

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

1 Position du problème

Chapitre 5 LE MODELE ENTITE - ASSOCIATION

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

Structure fonctionnelle d un SGBD

1/ Présentation de SQL Server :

BD et XML : Exercices

.../5. Gestion de Bases de Données (J. Wijsen) 27 janvier 2011 NOM + PRENOM : Orientation + Année : Cet examen contient 8 questions. Durée : 2 heures.

Administration des bases de données. Jean-Yves Antoine

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Compétences Business Objects

Objectifs du TP : Initiation à Access

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

Django et PostgreSQL sous la charge

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

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)

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

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

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

Les BASES de DONNEES dans WampServer

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

1 Modélisation d une base de données pour une société de bourse

Développement de base de données Microsoft SQL Server Durée : 5 jours Référence : DPSQL12. Contenu

SUPPORT DE COURS / PHP PARTIE 3

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Encryptions, compression et partitionnement des données

Intégrité des données

BASES DE DONNEES TP POSTGRESQL

Stockage du fichier dans une table mysql:

NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur "TIJARA" 1

Devoir Data WareHouse

Systèmes de Gestion de Bases de Données

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

Pratique et administration des systèmes

Bases de données et sites WEB

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Bases de Données Avancées

Bible MySQL! La première version de MySQL est apparue en Cette première version est créée pour un usage personnel à partir de msql.

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

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Sybase Adaptive Server Enterprise 15

Service On Line : Gestion des Incidents

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

I. MySQL : Serveur et SGBD

Rappel sur les bases de données

TP11 - Administration/Tuning

Transcription:

Université Paris 7 Master 1 Informatique, Bases de données avancées. 10 janvier 2014 Durée : 2h30 Documents manuscrits, notes de cours, notes de TD/TP autorisés. Livres, ordinateurs, téléphones portables interdits. Le barème est donné à titre indicatif. Le sujet comporte 7 pages. Exercice 1 - Dépendances - 1.5 points On considère une relation R(A, B, C, D, E) qui satisfait les dépendances fonctionnelles suivantes : A,B C D C D E E A Question 1: Donner toutes les clés candidates de la relation R. Justifier. (Justifier ne veut pas dire qu il faut calculer systématiquement toutes les clôtures possibles.) Question 2: Est-ce que cette relation est BCNF? Justifier la réponse. Exercice 2 - Triggers et fonctions - 8 points Le site de vente aux enchères gère une base de données qui contient les tables suivantes : create table client ( id client int primary key check( id client > 0), nom varchar(30) not null, prenom varchar(30) create table objet en vente( id objet int primary key check( id objet >= 0), id vendeur int not null references client, date mise en vente timestamp not null, date fin timestamp not null check( date fin>date mise en vente ), prix reserve decimal(12,2) check( prix reserve > 0) create table objet vendu( id objet int primary key check( id objet >= 0), id vendeur int not null references client, id acheteur int not null references client, date fin timestamp not null, prix vente decimal(10,2) check(prix vente > 0) 1

create table objet non vendu( id objet int primary key check( id objet >= 0), id vendeur int not null references client, date fin timestamp not null, prix reserve decimal(12,2) check( prix reserve >0) create table offre ( id objet int references objet en vente, id acheteur int references client, date offre timestamp not null, prix offert decimal(12,2) not null check( prix offert > 0), primary key( id objet, id acheteur) client La table client regroupe les vendeurs et acheteurs. objet en vente La table objet_en_vente contient tous les objets actuellement en enchère. L attribut date_fin donne la date et temps(timestamp) de fin d enchère. L attribut prix_reserve c est le prix minimal fixé par le vendeur, le vendeur refuse de céder l objet pour un prix inférieur à prix_reserve, ce prix n est pas connu par l achéteur. objet vendu La table objet_vendu contient tous les objets vendus. objet non vendu La table objet_non_vendu contient tous les objets non vendus pour lesquels l enchère est terminé. L objet peut être non vendu pour deux raisons : il n y avait aucune offre pour cet objet, tous les offres étaient inférieures au prix_reserve fixé par le vendeur. offre La table offre sert à enregistrer les prix proposés par les acheteurs. La table contient les offres des acheteurs pour les enchères en cours. Chaque nouvelle offre est ajoutée dans la table sans qu on change les offres précédentes. Question 1: Écrire un trigger qui sera déclenché à la suppression d un objet de la table objet_en_vente. On considère deux situations : (1) On dit que la suppression d un objet de la table objet_en_vente est provoquée par la fin d enchères si date_fin <= current_timestamp. (2) Par contre si au moment de suppression de l objet date_fin > current_timestamp alors on parle de l annulation de l enchère. Dans le cas (1) le trigger implémente les actions suivantes : (A) si le plus grand prix offert pour l objet supprimé est supérieur au prix_reserve alors l objet est vendu au plus offrant est le trigger doit enregistré la vente dans la table objet_vendu, (B) si le plus grand prix offert pour l objet est inférieur ou égal au prix_reserve ou s il n y a pas d offres pour l objet alors l objet le trigger doit enregistrer l objet dans la table objet_non_vendu, 2

Finalement aussi bien dans le cas (2) d annulation d enchère que dans le cas (1) de fin d enchères le trigger doit supprimer de la table offre toutes les offres concernant l objet. Question 2: Écrire un trigger qui sera déclenché par l opération d insertion dans la table offre. Supposons qu on exécute INSERT INTO offre VALUES (i,a,do,p (1) c est-à-dire on insère une offre pour l objet i, l offre vient de l acheteur a, avec la date do et le prix p. Toutd abordsiladatedel offredoestnullletriggerdoitlaremplacerparcurrent_timestamp (la date et temps courants). On dit que l insertion (1) est valide si les conditions suivantes sont satisfaites : (A) si le prix proposé p est non NULL alors p doit être supérieur à m 1.01 où m le prix maximal offert jusqu à maintenant pour l objet i (donc il faut que le nouveau prix offert soit au moins 1% plus grand que la meilleure offre précédente), (B) la date dc est plus grande que la date de la dernière offre pour le même objet, (C) la date dc est inférieure à la date date_fin pour l objet. Bien sûr les conditions (A) et (B) sont à vérifier uniquement s il y a déjà des offres pour l objet i. Si une de condition (A)-(C) n est pas satisfaite alors l opération d insertion de l offre doit être annulée. Si le prix d achat dans l offre est p=null alors l acheteur demande qu on fixe le prix d offre automatiquement et le montant doit être m 1.05, où m le prix maximal proposé jusqu à ce moment pour l objet i. Pour résumer : définissons le prix p de façon suivante : p = p si p est non NULL et p = 1.05 m si p = NULL. Nous définissons aussi la date do de façon suivante : do = do si do n est pas NULL et do = current timestamp si do est NULL. Si l offre est valide alors l insertion de l offre (i,a,do,p) doit être remplacée par l insertion de (i,a,do,p ). Remarque. Pour les deux triggers il faut écrire la fonction qui implémente le trigger et la commande INSERT TRIGGER. Exercice 3 - XPath et XQuery - 8 points Les questions ci-dessous sont basées sur le document catalogue.xml. Pour comprendre la structure de fichier catalogue.xml nous donnons ici un petit extrait : <?xml version= 1.0 encoding= iso 8859 1?> <CATALOGUE> <LIVRES> <LIVRE lang= eng > <AUTEUR idauteur= 3 /> <AUTEUR idauteur= 4 /> 3

<TITRE>Computational complexity: a modern approach</titre> <EDITEUR>Cambridge University Press</EDITEUR> <ISBN>978 0 521 42425 4</ISBN> <ANNEE>2009</ANNEE> </LIVRE> <LIVRE lang= fr > <AUTEUR idauteur= 5 /> <AUTEUR idauteur= 6 /> <TITRE> Analyse mathématque. Grands théorèmes du vingtième siècle. </TITRE> <EDITEUR>Calvage & Mounet</EDITEUR> <ISBN>978 2 91 635210 7</ISBN> <ANNEE>2009</ANNEE> </LIVRE> <LIVRE lang= fr > <AUTEUR idauteur= 7 /> <TITRE> Les liaisons dangereuses </TITRE> <EDITEUR>Gallim ar d</editeur> <ANNEE>1972</ANNEE> </LIVRE> </LIVRES> <AUTEUR idauteur= 3 > <PRENOM>Sanjeev</PRENOM> <NOM>Arora</NOM> <AnneeNaiss>1968</ AnneeNaiss> <AUTEUR idauteur= 4 > <PRENOM>Boaz</PRENOM> <NOM>Barak</NOM> <AUTEUR idauteur= 5 > <PRENOM>Den is</prenom> <NOM>Choimet</NOM> <AUTEUR idauteur= 6 > <PRENOM>Hervé</PRENOM> <NOM>Queffélec</NOM> 4

<AUTEUR idauteur= 7 > <PRENOM>Pierre</PRENOM> <NOM>Choderlos de Laclos</NOM> <AnneeNaiss>1741</ AnneeNaiss> <AnneeMort>1803</AnneeMort> </CATALOGUE> Le fichier complet contient beaucoup plus de livres et d auteurs et les question qui suivent concernent le fichier complet catalogue.xml et non le petit extrait ci-dessus. Comme vous pouvez constater catalogue.xml est un catalogue de livres, le noeud CATALOGUE contient deux fils : LIVRES et AUTEURS. Le fils LIVRES du CATALOGUE contient plusieurs livres. Chaque livre peut avoir plusieurs auteurs 1. Question 1: Écrire une expression XPath qui donne les titres de livres écrits en français et publiés après 1970. Question 2: Expliquer ce que affiche la requête XQuery suivante : for $x in distinct-values(//livre[editeur= Gallimard ]//AUTEUR/@idauteur) for $y in /CATALOGUE/AUTEURS/AUTEUR where $y/@idauteur = $x return <li> { $y/nom/text(),, $y/prenom/text() } </li> Remarque : La fonction distinct_values supprime les doublons. Question 3: Écrire une requête XQuery qui affiche les titres de tous les livres d Alexandre Dumas. Le résultat doit sortir sous la forme : <tr> <td> titre 1 </td> <td> lang 1</td> </tr> <tr> <td> titre 2 </td> <td> lang 2</td> </tr>... <tr> <td> titre n </td> <td> lang n</td> </tr> où lang est la valeur de l attribut lang. Pour simplifier on ne demande pas de supprimer les doublons, donc si le livre avec le même titre apparaît plusieurs fois dans le catalogue (par exemple édité par des éditeurs différents) alors il peut apparaître plusieurs fois dans le résultat. Exercice 4 - transactions (1.5 point) Question 1: On exécute la transaction suivante : 1. Noter que les éléments AUTEUR qui apparaissent comme les descendants d un LIVRE donnent les auteurs de ce livre et contiennent uniquement l attribut idauteur qui permet d identifier l auteur. L auteur lui-même est présenté en détail dans la partie CATALOGUES/AUTEURS du catalogue. En particulier il ne faut pas confondre AUTEURS et AUTEUR qui apparaissent comme le fils et petits-fils d un LIVRE avec AUTEURS et AUTEUR qui sont le fils et petit-fils de CATALOGUE 5

start transaction ; insert into T values (1,2 savepoint A; insert into T values (2,3 savepoint B; insert into T values (3,4 rollback to A; insert into T values (5,6 rollback to A; insert into T values (5,6 commit; En supposant que la table T est initialement vide, quel est le contenu de T à la fin de la transaction? Question 2: On exécute on parallèle deux transactions : start transaction isolation level seralizable; insert into s values(1,1 select * from S; commit; START transaction isolation level read committed; select * from S; select * from S; commit; La transaction à gauche c est la transaction T1, à droit T2. L ordre d exécution de différentes commandes est celui de haut vers le bas, par exemple commit de T1 est entre deux select de T2. Initialement la table S est vide. Indiquer ce que affiche chaque select. Question 3: Est-ce que quelque chose change dans l exercice précédent si T 2 était ouvert avec isolation level serializable? (On garde l ordre d exécutions de différentes commandes et S est vide au début). Exercice 5 - plan d exécution, indexes (1 point) On exécute : explain select * from X,Y where X.A = 4 and X.B=Y.B; et on obtient le plan d exécution suivant : Hash Join Hash Cond: (y.b = x.b) -> Seq Scan on y 6

-> Hash -> Seq Scan on x Filter: (a = 4) (les estimation de coût sont supprimées). On sait qu il y a un index B-arbre sur l attribut A de la table X. Question 1: Est-ce que cet index est utilisé si on exécutera cette requête select? Question 2: Expliquer très brièvement comment cette requête select sera réalisée (quelle opérations élémentaire dans quel ordre?) 7