Bases de données 2I009 Examen du 15 Mai 2015 Durée : 2 heures CORRIGÉ Documents autorisés



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

Bases de données relationnelles

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

Langage SQL : créer et interroger une base

TP Contraintes - Triggers

SQL Historique

1 Position du problème

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

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

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

CREATION WEB DYNAMIQUE

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

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

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

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

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

Devoir Data WareHouse

Bases de Données Avancées

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

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

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

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

Corrigés détaillés des exercices

Modélisation de bases de données : Le modèle relationnel

Le Langage De Description De Données(LDD)

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

1 Introduction et installation

1. Base de données SQLite

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

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

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Le langage SQL Rappels

BTS/CGO P10 SYSTEME INFORMATION Année

TP3 : Creation de tables 1 seance

Création et Gestion des tables

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

A QUOI SERVENT LES BASES DE DONNÉES?

Olivier Mondet

I4 : Bases de Données

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

Introduction au Système de Gestion de Base de Données et aux Base de Données

Chapitre 5 LE MODELE ENTITE - ASSOCIATION

Objectifs du TP : Initiation à Access

A QUOI SERVENT LES BASES DE DONNÉES?

Introduction aux Bases de Données 2004/2005

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

Intégrité des données

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

Bases de données. Yamine AIT AMEUR. INPT-ENSEEIHT DIMA 2 Rue Charles Camichel Toulouse Cedex 7

Cours 4 : Agrégats et GROUP BY

Les bases de données

Historisation des données

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

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

Auto-évaluation Oracle: cours de base

UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE

Vincent Augusto

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Durée : 4 heures Le sujet se présente sous la forme de deux dossiers indépendants

Compétences Business Objects

Gestion de base de données

Rappel sur les bases de données

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

OpenPaaS Le réseau social d'entreprise

Introduction au PL/SQL Oracle. Alexandre Meslé

Le Langage SQL version Oracle

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

Bases de données avancées

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

Bases de données. PTSI Lycée Eiffel. 28 février 2014

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)

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

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

Optimisation SQL. Quelques règles de bases

Systèmes de Gestion de Bases de Données

Présentation Windows Azure Hadoop Big Data - BI

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

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

16H Cours / 18H TD / 20H TP

UML et les Bases de Données

BASES DE DONNEES TP POSTGRESQL

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

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

TP Bases de données réparties

Introduction aux Bases de Données

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

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

Application web de gestion de comptes en banques

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

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)

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

FileMaker 13. Guide de référence SQL

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

Bases de données Cours 4 : Le langage SQL pour ORACLE

Bases de Données Relationnelles. Le Modèle Relationnel

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

Gestion des utilisateurs et de leurs droits

Modélisation et Gestion des bases de données avec mysql workbench

Transcription:

Examen BD 2I009 15 Mai 2015 Votre numéro d anonymat : Université Pierre et Marie Curie Bases de données 2I009 Examen du 15 Mai 2015 Durée : 2 heures CORRIGÉ Documents autorisés Les téléphones mobiles doivent être éteints et rangés dans les sacs. Le barème sur 70 points (26 questions) n a qu une valeur indicative. 1 Schéma Entité-Association (14 pts) On considère une base de données qui permet de gérer des hôtels avec leurs clients et qui est modélisée à l aide d un schéma entité-association dont une partie est illustrée dans la figure suivante : Hôtel Personne Chambre Client Chambre Simple Chambre Double UPMC Licence d informatique page 1 sur 24

nom ville adresse nom prénom Hôtel 1:n 1:n Personne 0:n numéro étage 1:1 Chambre 1:1 1:1 Client numéro 1:n 1:n nb_lits Chambre Simple 1:n Chambre Double 1:n 1:n tarif réservation_s réservation_d tarif 1:n Période date Un Hôtel est identifié par son nom ainsi que par le nom de la ville dans laquelle il se trouve. On connaît également son adresse. Chaque Personne est identifiée par son nom et par son prénom. Une Personne peut être client de plusieurs hôtels. Pour chaque Client d un hôtel on connaît son numéro. Le numéro d un client est unique pour un hôtel donné. Il est possible d avoir deux clients avec le même numéro dans des hôtels différents. Un client correspond à une seule Personne. Une Chambre a un numéro, unique dans l hôtel auquel elle appartient, et on connaît également son étage. Une chambre peut être simple ou double. Pour une chambre double on connaît en plus le nombre de lits (1 ou 2). Un client peut réserver plusieurs chambres simples. La réservation d une chambre double est faite par deux clients. Pour chaque réservation (de chambre simple ou de chambre double) on connaît le tarif de la réservation. Complétez le schéma Entité-Association précédent avec les informations suivantes : Question 1 (1 point) Précisez les attributs de chaque entité ainsi que les identifiants des entités. Question 2 (6 points) Ajoutez les associations suivantes en précisant leur cardinalités et leur éventuels attributs entre les entités : A 1 : Client et Personne. A 2 : Client et Hôtel. A 3 : Chambre et Hôtel. A 4 : Chambre et Chambre Simple A 5 : Chambre et Chambre Double. A 6 : Client et Chambre Simple. A 7 : Client et Chambre Double. Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 2 sur 24

Barème: 1 point par association (A 4 et A 5 sont notées ensemble par 1pt) Question 3 (2 points) Quelles sont les modifications à apporter à ce schéma afin qu un client puisse réserver plusieurs fois la même chambre simple à des périodes différentes? Modifiez le schéma précédent en conséquence. L éntité Période et la relation ternaire entre Client, Chambre Simple et Période. Question 4 (5 points) Traduisez les entités Personne, Client, Hôtel, Chambre, Chambre Double et les associations A 1, A 2, A 3, A 5, A 7 en relationnel. Pour chaque table, soulignez les clés primaires et ajoutez une * aux attributs qui sont des clés étrangères. NB : ne pas donner les commandes de création de table et les types des attributs! Réponse : Personne(nom, prénom) Client(nomh*, villeh*, numéro, nomp*, prénomp*) Hôtel(nom, ville, adresse) Chambre(nomh*, villeh*, numéro, étage) ChambreDouble(nomh*, villeh*, numéro, nb_lits) Réservation(nomh 1 *, villeh 1 *, numero 1 *, nomh 2 *, villeh 2 *, numero 2 *, nomh*, villeh*, numéro*, tarif) Barème: 1pt par table (Hôtel et Personne sont notées ensemble par 1 pt) Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 3 sur 24

2 Requêtes (42 pts) On considère le schéma relationnel suivant : Touriste (NumTouriste, age, paysresid) Ville (NomVille, superficie, pays) Traverse (NumVoyage*, NomVille*, ordre) Voyage (NumVoyage, prix) Souscrit (NumTouriste*, NumVoyage*, datesous) La clé primaire de chaque relation est soulignée. Les attributs formant une clé étrangère sont indiqués par * et portent le même nom que les attributs des clés primaires référencées. Cette base contient des informations sur des voyages proposés à des touristes dont on connait l âge et le pays de résidence (relation Touriste). Chaque voyage est facturé à un prix fixe (relation Voyage). Chaque souscription d un touriste à un voyage a lieu à une date donnée (relation Souscrit). Un voyage peut traverser plusieurs villes dans un ordre connu (relation Traverse), la première ville traversée ayant le numéro d ordre 1 (ainsi, si v i est le nom de la ville de départ du voyage de numéro v o, le nuplet (v o, v i, 1) appartient à Traverse). On considère que chaque voyage s arrête exactement un jour par ville traversée. Exprimez les requêtes ci-dessous, sans utiliser de sous-requête dans les clauses SELECT et FROM. Question 5 (4 points) Quels sont les voyages coûtant moins de 1000 euros auxquels ont souscrit des touristes allemands? Réponse : Calcul {v.numvoyage v blanc } Quels sont les voyages coûtant moins de 1000 euros auxquels ont souscrit des touristes allemands? Réponse : SQL SELECT FROM WHERE Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 4 sur 24

Calclul. {v.numv oyage v V oyage v.prix < 1000 s Souscription(v.NumV oyage = s.numv oyage t T ouriste(s.numt ouriste = t.numt ouriste t.paysresid = Allemagne ))} SQL. Version Calcul. s e l e c t d i s t i n c t v. NumVoyage from Voyage v, S o u s c r i p t i o n s, T o u r i s t e t where v. NumVoyage= s. NumVoyage and s. NumTouriste= t. NumTouriste and t. p a y s R e s i d = Allemagne and v. p r i x <1000 ; Version Algèbre. S e l e c t d i s t i n c t NumVoyage from Voyage Natural Join S o u s c r i p t i o n Natural Join T o u r i s t e where p a y s R e s i d = Allemagne and p r i x <1000 ; Touriste (NumTouriste, age, paysresid) Voyage (NumVoyage, prix) Ville (NomVille, superficie, pays) Souscrit (NumTouriste*, NumVoyage*, datesous) Traverse (NumVoyage*, NomVille*, ordre) Question 6 (4 points) Quels voyages démarrent de Paris et passent à Bordeaux puis à Strasbourg? NB : un voyage peut aussi passer par d autres villes. Réponse : Calcul {p.numvoyage p blanc } Quels voyages démarrent de Paris et passent à Bordeaux puis à Strasbourg? Réponse : SQL SELECT Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 5 sur 24

FROM WHERE Calcul. SQL. {p.numv oyage p T raverse p.nomv ille = P aris s, b T raverse(p.numv oyage = s.numv oyage p.numv oyage = b.numv oyage b.nomv ille = Bordeaux s.nomv ille = Strasbourg p.ordre < b.ordre b.ordre < s.ordre t T raverse(p.numv oyage = t.numv oyage p.ordre > t.ordre))} on peut remplacer le dernier par p.ordre = 1. s e l e c t p. NumVoyage from T r a v e r s e p, T r a v e r s e b, T r a v e r s e s where p. NumVoyage=b. NumVoyage and p. NumVoyage= s. NumVoyage and p. NomVille= P a r i s and b. NomVille= Bordeaux and s. NomVille= S t r a s b o u r g and p. o r d r e <b. o r d r e and b. o r d r e <s. o r d r e and not e x i s t s ( s e l e c t from T r a v e r s e where NumVoyage=p. NumVoyage and o r d r e <p. o r d r e ) ; on peut remplacer le not exists par : p.ordre=1 Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 6 sur 24

Touriste (NumTouriste, age, paysresid) Voyage (NumVoyage, prix) Ville (NomVille, superficie, pays) Souscrit (NumTouriste*, NumVoyage*, datesous) Traverse (NumVoyage*, NomVille*, ordre) Question 7 (4 points) Quels voyages ne passent (départ inclus) que par des villes de plus de 50km 2? Réponse : Calcul {t.numvoyage t blanc } Quels voyages ne passent (départ inclus) que par des villes de plus de 50km 2? Réponse : SQL (SELECT FROM )... (SELECT FROM WHERE ) Calclul. {t.numv oyage t T raverse et T raverse(t.numv oyage = et.numv oyage v V ille(et.v ille = v.v ille v.superficie > 50))} Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 7 sur 24

SQL Version Algèbre (première requête utilise Traverse pour avoir les voyages qui traversent au moins une ville). ( s e l e c t NumVoyage from T r a v e r s e ) minus ( s e l e c t NumVoyage from T r a v e r s e Natural Join V i l l e where s u p e r f i c i e <=50); Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 8 sur 24

Touriste (NumTouriste, age, paysresid) Voyage (NumVoyage, prix) Ville (NomVille, superficie, pays) Souscrit (NumTouriste*, NumVoyage*, datesous) Traverse (NumVoyage*, NomVille*, ordre) Question 8 (4 points) Quels voyages passent par Bordeaux puis immédiatement par Toulouse? NB : La ville de départ n est pas forcément Bordeaux. Réponse : Calcul {t.numvoyage t blanc } Quels voyages passent par Bordeaux puis immédiatement par Toulouse? Réponse : SQL SELECT FROM WHERE Calcul. {b.numv oyage b T raverse b.nomv ille = Bordeaux t T raverse(b.numv oyage = t.numv oyage t.nomv ille = T oulouse b.ordre < t.ordre et T raverse(b.numv oyage = et.numv oyage b.ordre < et.ordre et.ordre < t.ordre))} Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 9 sur 24

SQL. s e l e c t b. NumVoyage from T r a v e r s e b, T r a v e r s e t where b. NumVoyage= t. NumVoyage and b. NomVille= Bordeaux and t. NomVille= Toulouse and b. o r d r e < t. o r d r e and not e x i s t s ( s e l e c t from T r a v e r s e where NumVoyage=b. NumVoyage and o r d r e between b. o r d r e and t. o r d r e ) ; on peut remplacer le dernier not exists par : b.ordre= t.ordre-1 Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 10 sur 24

Touriste (NumTouriste, age, paysresid) Voyage (NumVoyage, prix) Ville (NomVille, superficie, pays) Souscrit (NumTouriste*, NumVoyage*, datesous) Traverse (NumVoyage*, NomVille*, ordre) Question 9 (3 points) Quel est l âge moyen des touristes français ayant payé moins de 500 euros pour un voyage démarrant à Lyon et passant par Grenoble? Réponse : SQL SELECT (... ) as age_moyen FROM WHERE s e l e c t avg ( f r. age ) as age_moyen from T o u r i s t e f r, S o u s c r i t s, Voyage v, T r a v e r s e ly, T r a v e r s e gr where f r. NumTouriste=s. NumTouriste and s. NumVoyage=v. NumVoyage and v. NumVoyage= l y. NumVoyage and v. NumVoyage= gr. NumVoyage and l y. o r d r e =1 and gr. o r d r e > 1 and f r. p a y s R e s i d = France and v. p r i x <500; Question 10 (3 points) Quels voyages sont des circuits, c est-à-dire démarrent et terminent dans la même ville? Réponse : Calcul {dep.numvoyage dep Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 11 sur 24

blanc } {dep.numv oyage dep T raverse fin T raverse(dep.numv oyage = fin.numv oyage dep.nomv ille = fin.nomv ille int T raverse(dep.numv oyage = int.n umv oyage int.ordre < dep.ordre int.ordre > f in.ordre))} on peut remplacer le int.ordre < dep.ordre dans le not exists par dep.ordre = 1 à l extérieur du not exists. Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 12 sur 24

Touriste (NumTouriste, age, paysresid) Voyage (NumVoyage, prix) Ville (NomVille, superficie, pays) Souscrit (NumTouriste*, NumVoyage*, datesous) Traverse (NumVoyage*, NomVille*, ordre) Question 11 (4 points) Quelle est la plus grande ville dans laquelle passe un touriste Portugais? Réponse : Calcul {vt.nomville vt blanc } Calcul. {vt.nomv ille vt T raverse tp T ouriste, stp Souscription, v V ille(tp.numt ouriste = stp.numt ouriste vt.numv oyage = stp.numv oyage tp.paysresid = P ortugal vt.nomv ille = v.nomv ille w V ille( s Souscription, t T raverse, tp T ouriste(tp.numt ouriste = s.numt ouriste tp.paysresid = P ortugal s.numv oyage = t.numv oyage w.nomv ille = t.nomv ille w.superficie > v.superficie)))} Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 13 sur 24

Touriste (NumTouriste, age, paysresid) Voyage (NumVoyage, prix) Ville (NomVille, superficie, pays) Souscrit (NumTouriste*, NumVoyage*, datesous) Traverse (NumVoyage*, NomVille*, ordre) Question 12 (3 points) Quels touristes ont souscrit à deux voyages à la même date? Réponse : Calcul {t.numtouriste t blanc } Quels touristes ont souscrit à deux voyages à la même date? Réponse : SQL SELECT FROM WHERE Calcul {t.n umt ouriste t T ouriste s1, s2insouscription(t.n umt ouriste = s1.numt ouriste t.numt ouriste = s2.numt ouriste s1.numv oyage s2.n umv oyage s1.datesous = s2.datesous)} SQL. A faire. Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 14 sur 24

Touriste (NumTouriste, age, paysresid) Voyage (NumVoyage, prix) Ville (NomVille, superficie, pays) Souscrit (NumTouriste*, NumVoyage*, datesous) Traverse (NumVoyage*, NomVille*, ordre) Question 13 (3 points) Quelle sont les villes où démarrent le plus de voyages? Réponse : SQL SELECT FROM... HAVING... = ( SELECT...(...)... FROM...... ) ; s e l e c t NomVille from T r a v e r s e group by NomVille having count ( ) = ( s e l e c t max ( count ( ) ) from T r a v e r s e group by NomVille ) ; Question 14 (3 points) Quel est le rapport prix/nombre de jours pour chaque voyage? Rappel : on considère que chaque voyage s arrête exactement un jour par ville. Réponse : SQL SELECT...,... FROM... Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 15 sur 24

s e l e c t p r i x / count ( ), NumVoyage as r a p p o r t _ p r i x _ d u r e e from Voyage Natural Join T r a v e r s e group by NumVoyage, p r i x ; Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 16 sur 24

Touriste (NumTouriste, age, paysresid) Voyage (NumVoyage, prix) Ville (NomVille, superficie, pays) Souscrit (NumTouriste*, NumVoyage*, datesous) Traverse (NumVoyage*, NomVille*, ordre) Question 15 (4 points) Quels voyages présentent le meilleur rapport prix /nombre de jours? Réponse : SQL SELECT FROM... HAVING... = ( SELECT...(...)... FROM............ ) ; s e l e c t NumVoyage from Voyage Natural Join T r a v e r s e group by NumVoyage, p r i x having p r i x / count ( ) = ( s e l e c t min ( p r i x / count ( ) ) from Voyage Natural Join T r a v e r s e group by NumVoyage, p r i x ) ; Question 16 (3 points) Quels sont les voyages souscrits uniquement par des touristes plus de 70 ans? Réponse : SQL SELECT FROM WHERE 70...... ( SELECT...(...)... FROM... WHERE ) ; Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 17 sur 24

s e l e c t s. NumVoyage from S o u s c r i t s where 70< a l l ( s e l e c t t. age from T o u r i s t e t where s. NumTouriste= t. NumTouriste ) ; Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 18 sur 24

3 Création de tables et contraintes (10 pts) On considère une base décrivant les photos prises par des touristes. La base B 0 est créée par les instructions suivantes : create table Lieu ( nomlieu varchar2(20) primary key, latitude number(6, 4), longitude number(6, 4)); create table Personne ( nompers varchar2(20) primary key, age number(2), residence varchar2(20)); create table Photo ( nompers varchar2(20) references Personne, num number(4), nomlieu varchar2(20) references Lieu, primary key(nompers, num) ); insert into Personne(nomPers) values ( Alice ); insert into Personne(nomPers) values ( Bob ); insert into Personne(nomPers) values ( Chan ); insert into Lieu(nomLieu) values( Tour Eiffel ); insert into Lieu(nomLieu) values( Pont Neuf ); insert into Lieu(nomLieu) values( Louvres ); insert into Photo values ( Alice, 10, Louvres ); insert into Photo values ( Alice, 11, Louvres ); insert into Photo values ( Alice, 12, Tour Eiffel ); insert into Photo values ( Bob, 2, Tour Eiffel ); Question 17 (1 point) Les instructions suivantes sont-elles acceptées (justifiez votre réponse)? Réponse : i n s e r t i n t o P e r s o n n e v a l u e s ( Bob, 2 2, P a r i s ), Entourer : acceptée Justification : réfusée i n s e r t i n t o Photo v a l u e s ( Bob, 10, Louvres ) ; Entourer : acceptée Justification : refusée Insertion Bob : résufés car nompersonne est une clé et Bob existe déjà Insertion Photo de Bob : acceptée Question 18 (1 point) A partir de la base initiale B 0, on exécute l instruction : d e l e t e from Lieu where nomlieu= Louvres ; Combien de n-uplets reste-t-il dans Lieu? Combien de n-uplets reste-t-il dans Photo? Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 19 sur 24

Réponse : Il reste...... n-uplets dans Lieu Il reste...... n-uplets dans Photo La suppression est réfusée car par défaut la contrainte de référence est on delete restrict. Il reste toutes les données initiales soit 3 lieux et 4 photos. (5 photos si l étudiant compte l insertion précédente bien qu on ait précisé qu il faut partir de B 0 ) Question 19 (1 point) Que faudrait-il modifier dans la définition des tables pour ajouter la contrainte suivante : une personne a strictement moins de 77 ans. Réponde en indiquant seulement la ligne que vous modifiez. Réponse : Remplacer la ligne...... Par la ligne...... Remplacer la ligne Age number(2) Par Age number(2) check (age < 7) Question 20 (1 point) Que faudrait-il modifier dans la définition des tables pour ajouter la contrainte suivante : une personne réside dans un lieu existant dans la table Lieu, et le lieu de résidence est connu pour toutes les personnes. Répondre en indiquant seulement la ligne que vous modifiez. Réponse : Remplacer la ligne...... Par la ligne...... Remplacer la ligne residence varchar2(20) Par residence varchar2(20) not null references Lieu Question 21 (1 point) Que faudrait-il modifier dans la définition des tables pour ajouter la contraintes suivante : pour une position géographique définie par une latitude et une longitude, il n y a pas plus d un lieu. Répondre en indiquant seulement les modification que vous faites. Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 20 sur 24

Réponse : Remplacer la ligne...... Par la ligne...... Dans le bloc create table Lieu() ajouter une dernière ligne Unique(latitude, longittude) Question 22 (1 point) Ajouter la contrainte : une personne a 1000 photos au maximum. Réponse : c r e a t e a s s e r t i o n nbphotos check ( not e x i s t s ( s e l e c t from P h o t o s group by nompers having count ( ) > 1 0 0 0 ) ) ; Question 23 (2 points) On considère la table Concours pour représenter un concours de photos : c r e a t e t a b l e Concours ( nomc varchar2 ( 2 0 ), annee number ( 4 ), l i e u C varchar2 ( 2 0 ), primary key ( nomc, annee ) ) ; Définir la table BellePhoto indiquant la note (allant de 1 à 10) attribuée à une photo (existant dans la table Photo) lors d un concours (existant dans la table Concours). Une personne peut présenter la même photo à plusieurs concours. Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 21 sur 24

Réponse : c r e a t e t a b l e B e l l e P h o t o ( nompers varchar2 ( 2 0 ), num number ( 4 ), nomc varchar2 ( 2 0 ), annee number ( 4 ), n o t e number ( 2 ) check ( n o t e between 1 and 1 0 ), f o r e i g n key ( nompers, num ) r e f e r e n c e s Photo, f o r e i g n key ( nomc, annee ) r e f e r e n c e s Concours, primary key ( nompers, num, nomc, annee ) ) ; La clé n est pas (nompers, num) car une photo peut obtenir plusieurs notes à différents concours. Question 24 (1 point) Compléter (et modifier si nécessaire) le schéma de la base pour que si on supprime une personne, alors ses photos sont automatiquement supprimées ainsi que les notes qu elles ont obtenues lors d un concours. Réponse : Dans le bloc create table Photo : remplacer nompers varchar(20) references Parsonne par nompers varchar2(20) references Personne on delete cascade. Dans le bloc create table BellePhoto : remplacer : foreign key (nompers, num) references Photo Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 22 sur 24

par foreign key (nompers, num) references Photo on delete cascade. Question 25 (1 point) Compléter (et modifier si nécessaire) le schéma de la base pour que si on supprime un concours, alors les notes attribuées lors de ce concours demeurent mais sans référencer aucun concours. Réponse : Dans le bloc create table BellePhotoă : Remplacer foreign key (nomc, annee) references Concours, par foreign key (nomc, annee) references Concours,on delete set null, 4 PL/SQL (4 pts) Question 26 (4 points) Complétez le programme ci-dessous qui affiche pour chaque lieu les personnes qui ont pris des photos et le nombre de photos qu elles ont faites : Louvres A l i c e a f a i t 2 photo ( s ). Pont Neuf I l n y a pas de photo. Tour E i f f e l A l i c e a f a i t 1 photo ( s ). Bob a f a i t 1 photo ( s ). Réponse : t r o u v e BOOLEAN; BEGIN FOR r IN ( SELECT nomlieu FROM L i e u ORDER BY nomlieu ) LOOP dbms_output. p u t _ l i n e ( ) ; t r o u v e := ; FOR r2 IN (SELECT nompers, COUNT( ) AS p h o t o s FROM Photo p WHERE GROUP BY ) LOOP dbms_output. p u t _ l i n e ( a f a i t photo ( s ). ) ; Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 23 sur 24

t r o u v e := ; END LOOP; IF ( t r o u v e = FALSE) THEN dbms_output. p u t _ l i n e ( I l n y a pas de photo. ) ; END IF ; END LOOP; END; DECLARE t r o u v e BOOLEAN; BEGIN FOR r IN ( SELECT nomlieu FROM L i e u ORDER BY nomlieu ) LOOP dbms_output. p u t _ l i n e ( r. nomlieu ) ; t r o u v e := FALSE ; FOR r2 IN (SELECT nompers, COUNT( ) AS p h o t o s FROM Photo p WHERE p. nomlieu= r. nomlieu GROUP BY nompers ) LOOP dbms_output. p u t _ l i n e ( r2. nompers a f a i t r2. p h o t o s photo ( s ). ) ; t r o u v e := TRUE; END LOOP; IF ( t r o u v e = FALSE) THEN dbms_output. p u t _ l i n e ( I l n y a pas de photos ) ; END IF ; END LOOP; END; / Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 24 sur 24

Question Points Score 1 1 2 6 3 2 4 5 5 4 6 4 7 4 8 4 9 3 10 3 11 4 12 3 13 3 14 3 15 4 16 3 17 1 18 1 19 1 20 1 21 1 22 1 23 2 24 1 25 1 26 4 Total: 70 Examen 2I009 15 Mai 2015 UPMC Licence d informatique page 25 sur 24