Sunteți pe pagina 1din 4

UPMC. UFR 922. Examen Li345 22 juin 2006.

Exercice sur SQL3 6 Pts

Question 1 (2points)

On considre une base de donnes de livres dont le schma Entit/Association est donn ci-
dessous :

Exemplaire
titre emprunte
0 :N 1 :1
isbn
1 :N 0 :N Personne
Livre Auteur Nom
0 :N
1 :N
3: 3
0 :N
LivresPrfrs

contenu citations

0 :N
1 :1

Chapitre

titre numro

On prcise les points suivants. Un livre possde un numro unique (isbn). Une personne a
trois livre prfrs et emprunte un livre a la fois. Un livre est constitu de chapitres
numrots. Dans un chapitre on peut ventuellement trouver des citations extraites dautres
livres.

Donner, dans lordre, les instructions SQL3 de cration du schma dune telle base de
donnes, en compltant la case rponse approprie et en respectant exactement les consignes
suivantes :
Les types reprsentant des entits doivent avoir le mme nom que lentit
correspondante, de mme pour les attributs
Les attributs reprsentant des associations doivent avoir le mme nom que
lassociation
On crera le minimum de tables ncessaires stocker toutes les informations de la
base. Une table stockant les objets dun type A sappellera EnsA.
Sil est ncessaire de crer un type intermdiaire pour reprsenter une collection
(varray ou table) dobjet de type A, on lappellera LesA.
UPMC. UFR 922. Examen Li345 22 juin 2006.

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 schma objet suivant :

CREATE TYPE ModeleRoue AS OBJECT (


nom VARCHAR2(10)
);

CREATE TYPE ModeleMoteur AS OBJECT (


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)

Insrer la voiture de numro 115643. Cette voiture est une Toyota dont le moteur porte le
numro 589 et est de type Super sans plomb et qui possde une seule roue (les autres nont
pas encore t montes) de numro 56, de marque Michelin et de type Grosse Roue .
La base de donnes est considre comme tant initialement vide et vous veillerez insrer
tous les n-uplets ncessaires.

2.2) Requtes (2 points)

Donner le code SQL des requtes suivantes :

1) Les numros 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 mme moteur plusieurs
voitures. Trouver les couples de voitures qui possdent le mme moteur

SELECT v1.numero,v2.numero FROM EnsVoiture v1,EnsVoiture v2 WHERE


v1.mot.numero=v2.mot.numero

3) Les numros des voitures qui possdent la roue numro 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 modle de moteur

SELECT v.mot.modele.nom, SUM(1) FROM EnsVoiture v GROUP BY v.mot.modele.nom

S-ar putea să vă placă și