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