INF245 - partiel mars 2012
Transcription
INF245 - partiel mars 2012
L2 Informatique, 2011/12 GDINF245 - Gestion de données relationnelles et applications Licence Science et Technologies Devoir surveillé - mars 2012 Durée : 2 heures Le sujet comporte 2 questions indépendantes Documents non autorisés Le barème est donné à titre indicatif Instructions qui s’appliquent à tout le sujet : les requêtes en SQL devront construire des résultats sans répétition, la clause distinct ne sera utilisée que lorsque nécessaire. Ceci quelque soit la valeur des relations. Les produits de relation seront exprimés dans la clause from des requêtes. Toute sous-requête sera soigneusement spécifiée. 1 A propos de bars On s’appuie sur la base de données qui illustre le cours. On en rappelle le schéma ci-après (les attributs soulignés forment les identifiants) : Drinkers (name, addr, phone) /* <n, a, p> ∈ Drinkers ⇐⇒ la personne de nom n habite à l’adresse a ; son téléphone est p. */ Beers (name, manf) /* <n, f> ∈ Beers ⇐⇒ la bière de nom b est fabriquée par le brasseur f. */ Bars (name, addr, license, openDate) /* <n a, l, d> ∈ Bars ⇐⇒ le bar de nom n est situé à l’adresse a. Son numéro de license est l. Ce bar est ouvert depuis la date d. */ Likes (drinker, beer) /* <d, b> ∈ Likes ⇐⇒ la personne d aime la bière b. */ Sells (bar, beer, price) /* <b, e, p> ∈ Sells ⇐⇒ le bar b vend la bière e pour le prix de p. */ Frequents (drinker, bar) /* <d, b> ∈ Frequents ⇐⇒ la personne d fréquente le bar b. */ Les contraintes d’intégrité : domaine(price) = entiers > 0 Sells[bar] ⊆ Bars[name] Likes[beer] ⊆ Beers[name] Frequents[bar] ⊆ Bars[name] Sells[beer] ⊆ Beers[name] Likes[drinker] ⊆ Drinkers[name] Frequents[drinker] ⊆ Drinkers[name] Question 1 (5 points) : En considérant les relations fournies en annexe, donner le résultat retourné par chacune des requêtes ci-dessous (considérer le système Oracle vu en TP). Il peut s’agir d’une erreur, ou de n-uplets affichés sous forme de tableau. 1. select beer, price from Likes natural join Sells where bar = ’Marble Bar’ and drinker = ’Adam’; 3. select beer, price from Bars left outer join Sells on (bar = name) where price > 3 ; 2. select bar, drinker from Frequents minus select bar from Sells where price < 10 ; 4. select bar, count(beer), min(price) from Sells group by bar ; c M.-C. Fauvet, C. Parent-Vigouroux – UJF/UFRIM2 AG – mars 2012 page 1 L2 Informatique, 2011/12 GDINF245 - Gestion de données relationnelles et applications Question 2 (5 points) : Ré-écrire en SQL les requêtes suivantes en respectant à chaque fois les instructions fournies. 1. select distinct beer, price from Sells where bar in (select name from Bars where addr = ’Toowong’) La requête ne doit pas comporter l’opérateur in. 2. select bar from Frequents where drinker = ’Adam’ intersect select bar from Frequents where drinker = ’John’; La requête ne doit pas comporter l’opérateur in, ni l’opérateur intersect. 3. select distinct name, manf from Beers join Sells on (name=beer) where price in (select max(price) from Sells) La requête ne doit pas comporter la forme ...in (select...) ni la forme ...= (select...). 2 A propos de théâtre Un directeur de théâtre désire informatiser son système de ventes de places pour les spectacles qui se déroulent dans son théâtre au cours d’une même saison (de septembre à juin). A la fin d’une saison, le contenu de la base de données est archivé et vidé. Pour les besoins du sujet les données de l’application décrites ci-après ont été simplifiées. Les spectacles. Un spectacle est identifié par un numéro et on connaı̂t son nom. Un spectacle fait généralement l’objet de plusieurs représentations proposées à des moments différents. Il y a au plus une représentation par spectacle et par jour. Une représentation débute à un moment donné exprimé à la granularité de l’heure (par exemple 28/11/2007 20H). La salle. La salle est partitionnée en zones numérotées, regroupant chacune un ensemble de places. Une place est identifiée par un numéro de rang, et un numéro de place dans le rang. Une zone est associée à une catégorie tarifaire (orchestre, balcon, poulailler, etc). Toutes les places de la même zone sont dans la même catégorie. Le tarif de base associé à chaque catégorie est fixé pour l’ensemble de tous les spectacles. Les ventes. Chaque place vendue fait l’objet de l’émission d’un ticket identifié par un numéro de série et estampillé par la date au moment de la transaction (instant à la granularité de la seconde). Une vente peut concerner plusieurs places et plusieurs représentations ; elle est associée à un client identifié par son numéro. Le schéma relationnel est donné ci-dessous. Les identifiants sont formés des attributs notés en caractères soulignés : LesZones (numZ, nomC) /* <z, c> ∈ LesZones ⇐⇒ les places de la zone z sont dans la catégorie c. */ LesCatégories (nomC, prix) /* <c, p> ∈ LesCatégories ⇐⇒ p est le prix des places se situant dans une zone de catégorie c. */ LesPlaces (noPlace, noRang, numZ) /* <p, r, z> ∈ LesPlaces ⇐⇒ la place de numéro p dans le rang r est dans la zone z. */ LesSpectacles (numS, nomS) /* <s, t> ∈ LesSpectacles ⇐⇒ le spectacle de numéro s a pour titre t. */ LesReprésentations (numS, dateRep) /* <s, d> ∈ LesReprésentations ⇐⇒ d est la date d’une représentation pour le spectacle s. */ LesTickets (noSerie, numS, dateRep, noPlace, noRang, dateEmission, noClient) /* <t, s, d, p, r, e, n> ∈ LesTickets ⇐⇒ le ticket dont le numéro de série est t, correspondant à la place <p, r> pour la représentation <s, d>, a été émis à la date e ; il est associé au client n. e < d. */ c M.-C. Fauvet, C. Parent-Vigouroux – UJF/UFRIM2 AG – mars 2012 page 2 L2 Informatique, 2011/12 GDINF245 - Gestion de données relationnelles et applications domaine (nomS) = domaine (nomC) = chaı̂nes de caractères domaine (dateRep) = domaine (dateEmission) = date domaine (numZ) = domaine (noPlace) = domaine (noSérie) = domaine (noRang) = domaine (numS) = domaine (noClient) = entier > 0 domaine (prix) = réels > 0 Les autres contraintes d’intégrité : • • • • Dans la relation LesTickets : dateEmission < dateRep • LesZones[nomC] = LesCatégories[nomC] LesPlaces[numZ] = LesZones[numZ] • LesReprésentations[numS] = LesSpectacles[numS] LesTickets[noPlace, noRang] ⊂ LesPlaces[noPlace, noRang] LesTickets[numS, dateRep] ⊂ LesReprésentations[numS, dateRep] Question 3 (10 points) : Exprimer en SQL les requêtes ci-dessous. A chaque fois, respecter les instructions données. Pour comparer des valeurs de type date, on utilisera les opérateurs de comparaison habituels (<, >, =, <>, ≤, ≥). On dispose de plus des fonctions to date et to char fournies par Oracle : format: {’DD/MM/YYYY’, ’DD-Month-YYYY’, ‘DD-Month-YYYY HH24:MI’, ’HH24:MI:SS’, etc. } to date: une chaı̂ne de caractères, un format −→ une date /* to date (c, f) est la date déduite de la forme externe c, donnée sous forme de chaı̂ne de caractères, selon le format f. */ to char: une date, un format −→ une chaı̂ne de caractères /* to char (d, f) est la forme externe de la date d selon le format f. */ On rappelle que la fonction nvl spécifiée ci-dessous doit être utilisée pour fixer l’interprétation de la valeur absente : nvl: un type, un type −→ un type /* nvl (x, y) = si x is null alors y sinon x. */ 1. Donner le prix des places de la catégorie ”poulailler”. 2. Donner les numéros des clients qui ont acheté au moins un ticket pour une représentation du spectacle dont le nom est ’Le lac des cygnes’. 3. Pour chaque zone de la catégorie ’poulailler’, donner son numéro, le nombre de places qu’elle comporte et son prix. 4. Pour chaque spectacle, donner son numéro, son nom, la date de sa première représentation dans le temps. 5. Donner les numéros des clients qui n’ont pas acheté de tickets pour la représentation du 21/1/2012 du spectacle de nom ’Le lac des cygnes’. 6. Donner les numéros et noms des spectacles qui ont exactement une représentation. Instruction : la requête ne doit comporter ni clause group by, ni fonctions d’agrégation (count, sum, etc). 7. Pour chaque représentation, donner le numéro de son spectacle, sa date, et par zone de la salle, le nombre et le cumul des prix des tickets vendus pour cette représentation. Le résultat comporte un ensemble de nuplets <s, d, z, n, p> tels que s est un numéro de spectacle, d une date de représentation de s, z est une zone du théâtre, et n est le nombre de tickets vendus dans la zone z pour la représentation d du spectacle s, et p est le cumul des prix de ces tickets. Cas particuliers : (1) Si aucun ticket n’a été vendu pour la représentation d du spectacle s alors z est sans valeur, n=0 et p=0. (2) Si pour la représentation d du spectacle s, dans la zone z aucune place ne correspond à un ticket vendu, alors n=0 et p=0. c M.-C. Fauvet, C. Parent-Vigouroux – UJF/UFRIM2 AG – mars 2012 page 3 L2 Informatique, 2011/12 GDINF245 - Gestion de données relationnelles et applications Annexe : valeur des relations de la base de données Bars Bars Addr License The Rocks 123456 Coogee 966500 Rose Bay 966410 The Rocks 123888 Sydney 122123 Kingsford 987654 Randwick 938500 Beers Name Manf 80/Caledonian Bigfoot Barley Wine Sierra Nevada Burragorang Bock George IV Inn Crown Lager Carlton Fosters Lager Carlton Invalid Stout Carlton Melbourne Bitter Carlton New Toohey’s Old Toohey’s Old Admiral Lord Nelson Pale Ale Sierra Nevada Premium Lager Cascade Red Toohey’s Sheaf Stout Toohey’s Sparkling Ale Cooper’s Stout Cooper’s Three Sheets Lord Nelson Victoria Bitter Carlton Likes Drinker Beer Adam Crown Lager Adam Fosters Adam Old Adam New Gernot Premium Lager Gernot Sparkling Ale John 80/John Bigfoot Barley Wine John Pale Ale John Three Sheets Justin Sparkling Ale Justin Victoria Bitter Name Australia Hotel Coogee Bay Hotel Rose Bay Hotel Lord Nelson Marble Bar Regent Hotel Royal Hotel openDate 12/1/1940 31/8/1980 31/8/1920 11/11/1920 1/4/2001 29/2/2000 26/6/1986 Drinkers Addr Phone Randwick 9385-4444 Newtown 9415-3378 Clovelly 9665-1234 Mosman 9845-4321 Rose Bay 9371-2126 Redfern 9371-1244 Frequents Drinker Bar Adam Coogee Bay Hotel Gernot Lord Nelson John Coogee Bay Hotel Marie Rose Bay Hotel John Lord Nelson John Australia Hotel Justin Regent Hotel Justin Marble Bar Sells Bar Beer Australia Hotel Burragorang Bock Coogee Bay Hotel New Coogee Bay Hotel Old Coogee Bay Hotel Sparkling Ale Coogee Bay Hotel Victoria Bitter Lord Nelson Three Sheets Lord Nelson Old Admiral Marble Bar New Marble Bar Old Marble Bar Victoria Bitter Regent Hotel New Regent Hotel Victoria Bitter Royal Hotel New Royal Hotel Old Royal Hotel Victoria Bitter Name Adam Gernot John Justin Marie Adrian c M.-C. Fauvet, C. Parent-Vigouroux – UJF/UFRIM2 AG – mars 2012 Price 3.50 2.30 2.50 2.80 2.30 3.75 3.75 2.80 2.80 2.80 2.20 2.20 2.30 2.30 2.30 page 4
Documents pareils
INF245 - partiel mars 2012 (solutions)
nombre et le cumul des prix des tickets vendus pour cette représentation. Le résultat comporte
un ensemble de nuplets tels que s est un numéro de spectacle, d une date de
représ...