UPMC. UFR 922. Examen Li345 22 juin 2006. Exercice sur SQL3 6
Transcription
UPMC. UFR 922. Examen Li345 22 juin 2006. Exercice sur SQL3 6
UPMC. UFR 922. Examen Li345 22 juin 2006. Exercice sur SQL3 6 Pts Question 1 (2points) On considère une base de données de livres dont le schéma Entité/Association est donné cidessous : Exemplaire titre emprunte 0 :N isbn 1 :1 1 :N Livre Auteur 0 :N Personne Nom 0 :N 1 :N 3: 3 0 :N LivresPréférés citations contenu 0 :N 1 :1 Chapitre titre numéro On précise les points suivants. Un livre possède un numéro unique (isbn). Une personne a trois livre préférés et emprunte un livre a la fois. Un livre est constitué de chapitres numérotés. Dans un chapitre on peut éventuellement trouver des citations extraites d’autres livres. Donner, dans l’ordre, les instructions SQL3 de création du schéma d’une telle base de données, en complétant la case réponse appropriée et en respectant exactement les consignes suivantes : • Les types représentant des entités doivent avoir le même nom que l’entité correspondante, de même pour les attributs • Les attributs représentant des associations doivent avoir le même nom que l’association • On créera le minimum de tables nécessaires à stocker toutes les informations de la base. Une table stockant les objets d’un type A s’appellera EnsA. • S’il est nécessaire de créer un type intermédiaire pour représenter une collection (varray ou table) d’objet de type A, on l’appellera LesA. UPMC. UFR 922. Examen Li345 CREATE TYPE Livre; CREATE TYPE LesLivres AS VARRAY(3) OF REF Livre; CREATE TYPE Personne AS OBJECT ( nom VARCHAR(20), age NUMBER(3), livresPreferes LesLivres, emprunte REF Livre, exemplaire Number(2) ); CREATE TYPE LesPersonnes AS TABLE OF REF Personne; CREATE TYPE LesCitations AS TABLE OF REF Livre; CREATE TYPE Chapitre AS OBJECT ( numero NUMBER(2), titre VARCHAR2(50), citations LesCitations ); CREATE TYPE LesChapitres AS TABLE OF Chapitre; CREATE TYPE Livre AS OBJECT ( isbn VARCHAR2(12), titre VARCHAR2(50), auteurs LesPersonnes, contenu LesChapitres ); CREATE TABLE EnsLivres OF Livres NESTED TABLE auteurs STORE AS tabauteurs, NESTED TABLE contenu STORE AS tabchapitre ; CREATE TABLE EnsPersonne OF Personne; Question 2 (4points) Soit le schéma objet suivant : CREATE TYPE ModeleRoue AS OBJECT ( nom VARCHAR2(10) ); CREATE TYPE ModeleMoteur AS OBJECT ( 22 juin 2006. UPMC. UFR 922. Examen Li345 22 juin 2006. nom VARCHAR2(10) ); CREATE TYPE ModeleVoiture AS OBJECT ( nom VARCHAR2(50) ); -----------------------------------------------------------------------------CREATE TABLE EnsModeleVoiture OF ModeleVoiture; CREATE TABLE EnsModeleMoteur OF ModeleMoteur; CREATE TABLE EnsModeleRoue OF ModeleRoue; -----------------------------------------------------------------------------CREATE TYPE Roue AS OBJECT ( numero NUMBER(20), modele REF ModeleRoue, marque VARCHAR2(50) ); CREATE TYPE Moteur AS OBJECT ( numero NUMBER(20), modele REF ModeleMoteur, marque VARCHAR2(50) ); CREATE TYPE LesRoues AS TABLE OF Roue; CREATE TYPE Voiture AS OBJECT ( numero NUMBER(20), modele REF ModeleVoiture, roues LesRoues, mot Moteur ); CREATE TABLE EnsVoiture OF Voiture NESTED TABLE roues STORE AS tabroue; 2.1) Insertions (2 Points) Insérer la voiture de numéro 115643. Cette voiture est une Toyota dont le moteur porte le numéro 589 et est de type « Super sans plomb » et qui possède une seule roue (les autres n’ont pas encore été montées) de numéro 56, de marque « Michelin » et de type « Grosse Roue ». La base de données est considérée comme étant initialement vide et vous veillerez à insérer tous les n-uplets nécessaires. 2.2) Requêtes (2 points) Donner le code SQL des requêtes suivantes : 1) Les numéros de voitures dont le moteur est de type “super’ et qui sont de type “Peugeot’ UPMC. UFR 922. Examen Li345 22 juin 2006. SELECT v.numero From EnsVoiture v where v.mot.modele.nom=’Super’ and v.modele.nom=’Peugeot ‘ 2) Le garagiste a fait des erreurs de saisie et il a associé le même moteur à plusieurs voitures. Trouver les couples de voitures qui possèdent le même moteur SELECT v1.numero,v2.numero FROM EnsVoiture v1,EnsVoiture v2 WHERE v1.mot.numero=v2.mot.numero 3) Les numéros des voitures qui possèdent la roue numéro 554 SELECT v.numero From EnsVoiture v where exists (select * from table(v.roues) r where r.numero=554; 4) Le nombre de voitures par modèle de moteur SELECT v.mot.modele.nom, SUM(1) FROM EnsVoiture v GROUP BY v.mot.modele.nom