Vous êtes sur la page 1sur 188

1/187

Bases de Donnees Avancees


UML et SQL 2/3
Thierry Hamon
Bureau H202
Institut Galil
ee - Universit
e Paris 13
&
LIMSI-CNRS
hamon@limsi.fr
http://perso.limsi.fr/hamon/Teaching/BDA-20132014/

INFO2 BDA

2/187

de UML `
a SQL 2/3
Introduction

Plan
De UML `
a SQL 2/3, Objet-Relationnel, Oriente-Objet

Introduction
De UML `a SQL2
(du conceptuel au relationnel etendu objet-relationnel)
De UML `a SQL3
(du conceptuel `a loriente objet)
Conclusion

3/187

de UML `
a SQL 2/3
Introduction

Conception, Developpement, Utilisation, Administration

Etape conceptuelle : Conception et Modelisation de bases de


donnees

Etape logique : Implantation dune base de donnees

Etape physique :

Logiciels (SGBD, Interfaces, ...) & Materiels

4/187

de UML `
a SQL 2/3
Introduction

Modelisation de Bases de Donnees


Phase danalyse : definition dun schema conceptuel
Schema Conceptuel de Donnees (SCD) : selon le formalisme
utilise,
ensemble dEntites et dAssociations
ou
ensemble de Classes
Formalisme EA, ER

Formalisme UML :

5/187

de UML `
a SQL 2/3
Introduction

Modelisation de Bases de Donnees

Differents formalismes de modelisation de schemas conceptuels de


BD :
Formalisme EA, ER, EER
Mod`ele Entite-Association (Entity-Relationship Model)
Mod`ele Entite-Association Etendu (Extended
Entity-Relationship Model

Formalisme UML (Unified Modelling Language)

6/187

de UML `
a SQL 2/3
Introduction

Mod`ele Entite-Association
Rappel

Entite : tout concept concret ou abstrait individualisable


Classe ou type dentites : regroupement dentites de meme
nature (niveau generique)
Association : relation liant plusieurs entites
Classe ou type dassociations) : regroupement dassociations
presentant les memes caracteristiques

7/187

de UML `
a SQL 2/3
Introduction

Mod`ele entite-association etendu


Mod`ele entite-association : jeu de concept reduit mais
suffisant pour la modelisation de probl`emes simples (ou peu
complexes)
Mod`ele Entite-association etendu : Modelisation plus precise
et plus expressive de probl`emes complexes et de grande taille
Introduction de mecanismes dabstraction
de classification
dheritage
dagregation

8/187

de UML `
a SQL 2/3
M
ecanismes dabstraction

Types faibles

Type dentites ou dassociations faibles :


existence dune instance subordonnee `a lexistence dun autre
type dentite ou dassociation

9/187

de UML `
a SQL 2/3
M
ecanismes dabstraction

Classification

Regroupement dentites dans des classes en fonction de


proprietes communes
Possibilite de classer un objet dans plusieurs classes
Exemple :
Livre electronique : fichier electronique, et livre
Autocar : vehicule de transport en commun, vehicule `a
moteur `a explosion

10/187

de UML `
a SQL 2/3
M
ecanismes dabstraction

Heritage
Specialisation - Generalisation

Un type d entite A est une specialisation dun autre type dentite


B si
chaque entite de A est une entite de B
Une seule entite (au plus) de B est associe `a une entite de A

11/187

de UML `
a SQL 2/3
M
ecanismes dabstraction

Agregation

Description de types dentites complexes


Un type dassociations entre types dentites est considere comme
un nouveau type dentites

12/187

de UML `
a SQL 2/3
M
ecanismes dabstraction

Modelisation de Bases de Donnees


Les deux formalismes E/R et UML sont tr`es proches /

equivalents 
Entit
e/Association
Entit
e
Type dentit
e
Relation
Type dassociation
Attribut/Propri
et
e
R
ole / Label

Domaine
Cl
e
Contrainte
Cardinalit
e
0,1 1,1 0,n 1,n a,b a,a
Diagramme E/A

UML
Objet
Classe
Objet
Classe
Propri
et
e
R
ole
M
ethode

Contrainte de domaine
Contrainte de cl
e
Contrainte
Multiplicit
e/Cardinalit
e
0..1 1 0..* 1..* a..b a
Diagramme de Classe UML

13/187

de UML `
a SQL 2/3
Traduction EA vers SQL

De EA `a SQL

Objectifs :
Implantation dun schema conceptuel (SCD) dans un BD
relationnelle
Exploitation du SCD par le SGBD et les modules de
programmation
Transformation dans un schema relationnel : Schema Logique
de Donnees (SLD)

14/187

de UML `
a SQL 2/3
Traduction EA vers SQL

De EA `a SQL
Exemple de schema conceptuel EA (SCD)

15/187

de UML `
a SQL 2/3
Traduction EA vers SQL

De EA `a SQL
Exemple de schema logique (schema relationnel) SLD

R1
R2
R3
R4
R5

ENT 2
ENT 1
ENT 3
ENT 4
ASSOC

(
(
(
(
6

B1 , B2 , B3 )
A1 , A2 , B1 )
C1 , C2 )
D1 )
( B1 , C1 , D1 , X1 )

16/187

de UML `
a SQL 2/3
Traduction EA vers SQL

R`egles de passage
du mod`ele Entite-Association au mod`ele Relationnel

Tout type dentite E est traduit en une relation R


La cle primaire de R est lidentifiant de E
Les attributs de R sont ceux de E.

Tout type dassociation est traduit :


en une cle etrang`ere dans une relation existante si la
cardinalite est du type 1,1 ou 0,1
en une nouvelle relation si aucune cardinalite nest du type 1,1
ou 0,1 (elles sont toutes du type 0,n ou 1,n)

Plusieurs algorithmes sont possibles selon linterpretation de la


cardinalite minimale egale `a 0.

17/187

de UML `
a SQL 2/3
Traduction UML vers SQL

De UML `a SQL
Traduction des associations binaires
Traduction des associations binaires recursives
Traduction des associations n-aires (n > 2)
Traduction des associations dheritage
Traduction des contraintes dheritage
Traduction des associations dagregation
Traduction des contraintes dintegrite fonctionnelles
(contraintes : Partition, Exclusion, Totalite, Simultaneite,
Inclusion)

18/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Integrite des donnees (1)


Les SGBD prennent en compte lintegrite des donnees definies via
la declaration de contraintes (constraints)
la programmation de
fonctions (functions)
de procedures (procedures) cataloguees
de paquetages (packages)
de declencheurs (triggers)

Le principe etant dassurer la coherence de la base apr`es chaque


mise `a jour par les commandes insert, update ou delete

19/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Integrite des donnees (2)


Notation utilisee concernant les noms des contraintes :
la contrainte cle primaire dune table se nomme pk table
la contrainte cle etrang`ere dune table se nomme
fk table1 colonne table2
la contrainte de validite dune colonne se nomme
ck table colonne
la contrainte de type non nulle sur une colonne se nomme
nn table colonne
la contrainte de type unique sur une colonne se nomme
unique table colonne

20/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations binaires (1)


Association du type 1-1

REM Un s t a g e e s t e f f e c t u e p a r au p l u s un e t u d i a n t
c r e a t e t a b l e STAGE
( NUMEROS number ( 7 ) ,
NOMENTREPRISE v a r c h a r ( 4 0 ) ,
TELENT v a r c h a r ( 1 5 ) ,
ADRENT v a r c h a r ( 5 0 ) ,
c o n s t r a i n t PK STAGE primary key (NUMEROS)
);

21/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations binaires (2)


Association du type 1-1
REM Un
e t u d i a n t e f f e c t u e o b l i g a t o i r e m e n t un s t a g e u n i q u e
c r e a t e t a b l e ETUDIANT
( NUMEROE number ( 7 ) ,
NOM v a r c h a r ( 1 0 ) ,
PRENOM v a r c h a r ( 1 0 ) ,
DATENAISSANCE date ,
SEXE c h a r ( 1 ) ,
NUMEROS number ( 7 ) ,
c o n s t r a i n t PK ETUDIANT p r i m a r y key (NUMEROE) ,
c o n s t r a i n t FK ETUDIANT NUMEROS STAGE f o r e i g n key (NUMEROS)
r e f e r e n c e s STAGE(NUMEROS) ,
c o n s t r a i n t CK ETUDIANT SEXE c h e c k ( SEXE i n ( M , F ) ) ,

c o n s t r a i n t NN ETUDIANT NUMEROS c h e c k (NUMEROS i s no t n u l l ) ,


c o n s t r a i n t UNIQUE ETUDIANT NUMEROS u n i q u e (NUMEROS)
);

22/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations binaires (1)


Association du type 1-N

REM Une p e r s o n n e p e u t p o s s e d e r p l u s i e u r s v o i t u r e s
c r e a t e t a b l e PERSONNE
(
NUMEROP number ( 7 ) ,
NOM v a r c h a r ( 1 0 ) ,
PRENOM v a r c h a r ( 1 0 ) ,
DATENAISSANCE date ,
SEXE char ( 1 ) ,
c o n s t r a i n t PK PERSONNE primary key (NUMEROP)
);

23/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations binaires (2)


Association du type 1-N

REM Une v o i t u r e e s t o b l i g a t o i r e m e n t p o s s
ed
e e p a r une p e r s o n n e
c r e a t e t a b l e VOITURE
(
NUMIMMAT v a r c h a r ( 1 5 ) ,
MARQUE v a r c h a r ( 2 0 ) ,
TYPE v a r c h a r ( 3 0 ) ,
NUMEROP number ( 7 ) ,
c o n s t r a i n t PK VOITURE p r i m a r y key (NUMIMMAT) ,
c o n s t r a i n t FK VOITURE NUMEROP PERSONNE f o r e i g n key (NUMEROP)
r e f e r e n c e s PERSONNE(NUMEROP) ,

c o n s t r a i n t NN VOITURE NUMEROP c h e c k (NUMEROP i s no t n u l l )


);

24/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations binaires (1)


Association du type N-N

REM Une p e r s o n n e p e u t c r
eer

plusieurs

entreprises

c r e a t e t a b l e PERSONNE
(
NUMEROP number ( 7 ) ,
NOMP v a r c h a r ( 1 0 ) ,
PRENOM v a r c h a r ( 1 0 ) ,
DATENAISSANCE date ,
SEXE c h a r ( 1 ) ,
c o n s t r a i n t PK PERSONNE p r i m a r y key (NUMEROP)
);

25/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations binaires (2)


Association du type N-N

REM Une e n t r e p r i s e d o i t e t r e c r e e e
REM
p a r une ou p l u s i e u r s p e r s o n n e s
c r e a t e t a b l e ENTREPRISE
(
NSIRET v a r c h a r ( 2 0 ) ,
NOME v a r c h a r ( 2 0 ) ,
STATUTJUR v a r c h a r ( 1 0 ) ,
c o n s t r a i n t PK ENTREPRISE primary key ( NSIRET )
);

26/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations binaires (3)


Association du type N-N

c r e a t e t a b l e CREER
(
NUMEROP number ( 7 ) ,
NSIRET v a r c h a r ( 2 0 ) ,
DATECREATION date ,
c o n s t r a i n t PK CREER primary key (NUMEROP, NSIRET ) ,
c o n s t r a i n t FK CREER NUMEROP PERSONNE
f o r e i g n key (NUMEROP)
r e f e r e n c e s PERSONNE(NUMEROP) ,
c o n s t r a i n t FK CREER NSIRET ENTREPRISE
f o r e i g n key ( NSIRET )
r e f e r e n c e s ENTREPRISE ( NSIRET )
);

La cardinalite minimale de lassociation creer pourra etre testee par


lintermediaire dune procedure PL/SQL

27/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations binaires (1)


Association du type Reflexif/Recursif, UML EA

c r e a t e t a b l e PERSONNES
(
NUMERO number ( 7 ) , NOM v a r c h a r ( 1 5 ) , PRENOM v a r c h a r ( 1 5 ) ,
DATENAISSANCE date , SEXE c h a r ( 1 ) , PERE number ( 7 ) ,
MERE number ( 7 ) ,
c o n s t r a i n t PK PERSONNES p r i m a r y key (NUMERO) ,
c o n s t r a i n t FK PERSONNES PERE PERSONNES f o r e i g n key (PERE)
r e f e r e n c e s PERSONNES ,
c o n s t r a i n t FK PERSONNES MERE PERSONNES f o r e i g n key (MERE)
r e f e r e n c e s PERSONNES ,
c o n s t r a i n t CK SEXE PERSONNES c h e c k ( SEXE i n ( M , F ) )
);

28/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations binaires (2)


Association du type Reflexif/Recursif, UML EA

c r e a t e t a b l e PRODUITS
(
NUMERO number ( 3 ) , NOM v a r c h a r ( 1 5 ) , QSTOCK number ( 5 ) ,
c o n s t r a i n t PK PRODUITS p r i m a r y key (NUMERO) ,
c o n s t r a i n t CK QSTOCK PRODUITS c h e c k (QSTOCK >= 0 )
);

29/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations binaires (3)


Association du type Reflexif/Recursif, UML EA

c r e a t e t a b l e NOMENCLATURE
(
COMPOSER number ( 3 ) , COMPOSANT number ( 3 ) , QFABR number ( 5 ) ,
c o n s t r a i n t PK NOMENCLATURE p r i m a r y key (COMPOSER, COMPOSANT) ,
c o n s t r a i n t FK NOMENCL COMPOSER PRODUITS f o r e i g n key (COMPOSER)
r e f e r e n c e s PRODUITS ,
c o n s t r a i n t FK NOMENCL COMPOSANT PRODUITS f o r e i g n key (COMPOSANT)
r e f e r e n c e s PRODUITS ,
c o n s t r a i n t CK QFABR NOMENCLATURE c h e c k (QFABR >= 0 )
);

30/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Traduction des associations dheritage


Traduction des contraintes dheritage

Gestion du personnel dans une universite

31/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Associations dheritage dans UML (1)

Recensement des differents cas dheritage en fonction des


instances
Modelisation des differents heritages, dans le formalisme
UML, `a laide des contraintes
partition
exclusion
totalite

32/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Associations dheritage dans UML (2)


Expression des cas dheritage `a laide de
couverture
disjonction
dinstances dans une population donnee
Quatre type de contraintes sont recenses :
partition
totalite
exclusion
absence de contrainte

de UML `
a SQL 2/3
Traduction UML vers SQL

Contraintes dheritages PARTITION et TOTALITE


Disjonction & Couverture Partition
Non-Disjonction & Couverture Totalite

33/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Contraintes dheritages EXCLUSION et ABSENCE DE


CONTRAINTE
Disjonction & Non-Couverture Exclusion
Non-Disjonction & Non-Couverture Absence de contrainte

34/187

35/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Exemple (1)
Gestion du personnel dans une universite

Couverture + Disjonction Partition


Personnel (P) est egal `a lUnion de Enseignant (EC) et de
BIATOS (B) et lIntersection de EC et de B est Vide
Couverture + Non-Disjonction Totalite
Personnel (P) est egal `a lUnion de Enseignant (EC) et de
BIATOS (B) et lIntersection de EC et de B nest pas Vide

36/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Exemple (2)
Gestion du personnel dans une universite

Non-Couverture + Disjonction Exclusion


LUnion de Enseignant (EC) et de BIATOS (B) est incluse
dans P et lIntersection de EC et de B est Vide
Non-Couverture + Non-Disjonction Absence de contraintes
LUnion de Enseignant (EC) et de BIATOS (B) est incluse
dans P et lIntersection de EC et de B nest pas Vide

37/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Transformation des associations dheritage

Traduction dune association dheritage en fonction des contraintes


de lassociation dheritage
3 familles de decomposition :
Decomposition par distinction
Decomposition descendante (push-down)
Decomposition ascendante (push-up)

38/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Decomposition par distinction


Transformation de chaque sous-classe en une relation
Migration de la cle primaire de la sur-classe dans la ou les
relations issues des sous-classes
La cle primaire de la sur-classe devient `a la fois cle primaire et
cle etrang`ere
Distinction
PERSONNEL( Num
e ro , Nom, Pr
e nom ,
DateNaissance , Sexe )
ENSEIGNANT( Num
e ro ,
Echelon ,
Indice , Sp
ecialit
e)
BIATOS ( Num
e ro , DateEmbauche ,
Service )

39/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Decomposition descendante

Deux cas possibles selon la contrainte dheritage :


Contrainte de totalite ou de partition sur lassociation :
Possibilite de ne pas traduire la relation issue de la sur-classe
Migration de tous les attributs dans la ou les relations
issues de la ou des sous-classes
Sinon : Migration de tous les attributs dans la ou les relations
issues de la ou des sous-classes
Duplication des donnees

40/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Decomposition descendante
Exemple

Contrainte de partition :
Aucun personnel ne peut etre `a la fois enseignant et BIATOS
Il nexiste pas non plus un personnel netant ni enseignant ni
biatos.
Descendante
ENSEIGNANT( Num
e ro ,
Nom, Pr
e nom , D a t e N a i s s a n c e ,
Sexe , E c h e l o n , I n d i c e ,
Sp
ecialit
e)
BIATOS ( Num
e ro , Nom, Pr
e nom ,
D a t e N a i s s a n c e , Sexe ,
DateEmbauche , S e r v i c e )

41/187

de UML `
a SQL 2/3
Traduction UML vers SQL

Decomposition ascendante

Suppression de la ou les relations issues de la ou des


sous-classes
Migration des attributs dans la relation issue de la sur-classe
Exemple : (absence de contrainte)
Ascendante
PERSONNEL( Num
e ro , Nom, Pr
e nom ,
D a t e N a i s s a n c e , Sexe ,
Echelon , I n d i c e ,
Sp
ecialit
e ,
DateEmbauche , S e r v i c e )

de UML `
a SQL 2/3
Traduction UML vers SQL

Transformation des associations dheritage multiple


Memes r`egles ; plusieurs possibilites
Exemple : (decomposition ascendante)
Contrainte dexclusion sur enseignant et BIATOS
PERSONNEL( Num
e ro , Nom, Pr
e nom ,
DateNaissance , Sexe )
ENSEIGNANT ( Num
e ro ,
Echelon , I n d i c e , S p
ecialit
e ,
DateD
e butStage , D a t e F i n S t a g e )
BIATOS ( Num
e ro , DateEmbauche ,
Service ,
DateD
e butStage , D a t e F i n S t a g e )

42/187

43/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Transformation des associations dheritage en SQL 2


Exemple

Gestion du personnel dans une universite

44/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Transformation des associations dheritage


Decomposition par distinction

Distinction
PERSONNEL( Num
e ro , Nom, Pr
e nom ,
DateNaissance , Sexe )
ENSEIGNANT( Num
e ro ,
Echelon ,
Indice , Sp
ecialit
e)
BIATOS ( Num
e ro , DateEmbauche ,
Service )

REM Un p e r s o n n e l `
a l Universit
e
c r e a t e t a b l e PERSONNEL
( NUMERO number ( 7 ) ,
NOM v a r c h a r ( 1 0 ) ,
PRENOM v a r c h a r ( 1 0 ) ,
DATENAISSANCE d a t e ,
SEXE c h a r ( 1 ) ,
c o n s t r a i n t PK PERSONNEL p r i m a r y k e y (NUMERO) ,
c o n s t r a i n t CK SEXE PERSONNEL c h e c k ( SEXE i n ( M , F ) )
);

45/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Transformation des associations dheritage


Decomposition par distinction
REM P e r s o n n e l e n s e i g n a n t
c r e a t e t a b l e ENSEIGNANT
( NUMERO number ( 7 ) , ECHELON number ( 2 ) ,
INDICE number ( 5 ) , SPECIALITE v a r c h a r ( 2 0 ) ,
c o n s t r a i n t PK ENSEIGNANT p r i m a r y key (NUMERO) ,
c o n s t r a i n t FK ENS PERS f o r e i g n key (NUMERO)
r e f e r e n c e s PERSONNEL
);
REM P e r s o n n e l BIATOS ( I n g , Adm, Tech , Ouv , S e r v )
c r e a t e t a b l e BIATOS
( NUMERO number ( 7 ) , DATEEMBAUCHE date ,
SERVICE v a r c h a r ( 2 0 ) ,
c o n s t r a i n t PK BIATOS p r i m a r y key (NUMERO) ,
c o n s t r a i n t FK BIATOS PERS f o r e i g n key (NUMERO)
r e f e r e n c e s PERSONNEL
);

46/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Transformation des associations dheritage


Decomposition descendante

Descendante
ENSEIGNANT( Num
e ro ,
Nom, Pr
e nom , D a t e N a i s s a n c e ,
Sexe , E c h e l o n , I n d i c e ,
Sp
ecialit
e)
BIATOS ( Num
e ro , Nom, Pr
e nom ,
D a t e N a i s s a n c e , Sexe ,
DateEmbauche , S e r v i c e )

REM P e r s o n n e l e n s e i g n a n t
c r e a t e t a b l e ENSEIGNANT
( NUMERO number ( 7 ) , NOM v a r c h a r ( 1 0 ) ,
PRENOM v a r c h a r ( 1 0 ) , DATENAISSANCE date ,
SEXE c h a r ( 1 ) , ECHELON number ( 2 ) ,
INDICE number ( 5 ) , SPECIALITE v a r c h a r ( 2 0 ) ,
c o n s t r a i n t CK SEXE ENSEIGNANT c h e c k
( SEXE i n ( M , F ) )
c o n s t r a i n t PK ENSEIGNANT p r i m a r y key (NUMERO)
);

46/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Transformation des associations dheritage


Decomposition descendante

Descendante
ENSEIGNANT( Num
e ro ,
Nom, Pr
e nom , D a t e N a i s s a n c e ,
Sexe , E c h e l o n , I n d i c e ,
Sp
ecialit
e)
BIATOS ( Num
e ro , Nom, Pr
e nom ,
D a t e N a i s s a n c e , Sexe ,
DateEmbauche , S e r v i c e )

REM P e r s o n n e l BIATOS
c r e a t e t a b l e BIATOS
( NUMERO number ( 7 ) , NOM v a r c h a r ( 1 0 ) , PRENOM v a r c h a r ( 1 0 ) ,
DATENAISSANCE date , SEXE c h a r ( 1 ) , DATEEMBAUCHE date ,
SERVICE v a r c h a r ( 2 0 ) ,
c o n s t r a i n t CK SEXE BIATOS c h e c k ( SEXE i n ( M , F ) )
c o n s t r a i n t PK BIATOS p r i m a r y key (NUMERO)
);

47/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Transformation des associations dheritage


Decomposition ascendante

Ascendante
PERSONNEL( Num
e ro , Nom, Pr
e nom ,
D a t e N a i s s a n c e , Sexe ,
Echelon , I n d i c e ,
Sp
ecialit
e ,
DateEmbauche , S e r v i c e )
REM P e r s o n n e l
c r e a t e t a b l e PERSONNEL
( NUMERO number ( 7 ) , NOM v a r c h a r ( 1 0 ) , PRENOM v a r c h a r ( 1 0 ) ,
DATENAISSANCE date , SEXE c h a r ( 1 ) , ECHELON number ( 2 ) ,
INDICE number ( 5 ) , SPECIALITE v a r c h a r ( 2 0 ) ,
DATEEMBAUCHE date , SERVICE v a r c h a r ( 2 0 ) ,
c o n s t r a i n t CK SEXE PERSONNEL c h e c k ( SEXE i n ( M , F ) )
c o n s t r a i n t PK PERSONNEL p r i m a r y key (NUMERO)
);

48/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition par distinction

Contrainte de partition
Contrainte de totalite
Contrainte dexclusion
Contraintes dheritage :

Sans Contrainte

(Contrainte A) Il nexiste pas de personnel `a la fois enseignant


et BIATOS
(Contrainte B) Il nexiste pas de personnel ni enseignant ni
BIATOS

49/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition par distinction

Implementation de la contrainte A : 2 declencheurs


REM D
e c l e n c h e u r s u r ENSEIGNANT
c r e a t e o r r e p l a c e t r i g g e r TRIG ENSEIGNANT
b e f o r e i n s e r t o r u p d a t e o f NUMERO on ENSEIGNANT
f o r e a c h row
declare
num number ;
begin
s e l e c t NUMERO INTO num
from BIATOS where NUMERO = : new .NUMERO;
r a i s e a p p l i c a t i o n e r r o r ( 20001 , Le p e r s o n n e l | |
t o c h a r ( num ) | | e s t d
ej`
a BIATOS ! ! ! ) ;
exception
when n o d a t a f o u n d t h e n n u l l ;
end ;
/

50/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition par distinction
REM D
e c l e n c h e u r s u r BIATOS
c r e a t e o r r e p l a c e t r i g g e r TRIG BIATOS
b e f o r e i n s e r t o r u p d a t e o f NUMERO on BIATOS
f o r e a c h row
declare
num number ;
begin
s e l e c t NUMERO INTO num
from ENSEIGNANT where NUMERO = : new .NUMERO;
r a i s e a p p l i c a t i o n e r r o r ( 20001 , Le p e r s o n n e l
t o c h a r ( num ) | | e s t d
ej`
a enseignant ! ! ! );
exception
when n o d a t a f o u n d t h e n n u l l ;
end ;
/

||

51/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition par distinction

Implementation de la contrainte B :
procedures cataloguees (Insertion, Suppression)
declencheurs (Modification)
REM A j o u t d un E n s e i g n a n t
c r e a t e o r r e p l a c e p r o c e d u r e AJOUT ENSEIGNANT
(NUM number , NOM v a r c h a r , PREN v a r c h a r , DNAIS d a t e ,
SEXE v a r c h a r , ECHEL number , IND number , SPEC v a r c h a r ) i s
begin
i n s e r t i n t o PERSONNEL v a l u e s (NUM, NOM, PREN , DNAIS , SEXE ) ;
i n s e r t i n t o ENSEIGNANT v a l u e s
(NUM, ECHEL , IND , SPEC ) ;
end ;
/

52/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition par distinction

REM A j o u t d un BIATOS
c r e a t e o r r e p l a c e p r o c e d u r e AJOUT BIATOS
(NUM number , NOM v a r c h a r , PREN v a r c h a r , DNAIS d a t e ,
SEXE v a r c h a r , DEMB d a t e , SERV v a r c h a r ) i s
begin
i n s e r t i n t o PERSONNEL v a l u e s (NUM, NOM, PREN , DNAIS , SEXE ) ;
i n s e r t i n t o BIATOS v a l u e s (NUM, DEMB, SERV ) ;
end ;
/

53/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition par distinction
REM S u p p r e s s i o n d un E n s e i g n a n t
c r e a t e o r r e p l a c e p r o c e d u r e SUPPR ENSEIGNANT
(NUM number ) i s
begin
d e l e t e from ENSEIGNANT w h e r e NUMERO = num ;
d e l e t e from PERSONNEL w h e r e NUMERO = num ;
end ;
/
REM S u p p r e s s i o n d un BIATOS
c r e a t e o r r e p l a c e p r o c e d u r e SUPPR BIATOS
(NUM number ) i s
begin
d e l e t e from BIATOS where NUMERO = num ;
d e l e t e from PERSONNEL where NUMERO = num ;
end ;
/

54/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition par distinction
REM D
eclencheur pour l a r
e p e r c u s s i o n de l a m o d i f i c a t i o n
du num
e ro du PERSONNEL v e r s ENSEIGNANT e t BIATOS
c r e a t e o r r e p l a c e t r i g g e r TRIG ENSBIATOS
b e f o r e u p d a t e o f NUMERO on PERSONNEL
f o r e a c h row
begin
begin
u p d a t e ENSEIGNANT
s e t NUMERO = : new .NUMERO
where NUMERO = : o l d .NUMERO;
exception
when n o d a t a f o u n d t h e n n u l l ;
end ;
u p d a te BIATOS
s e t NUMERO = : new .NUMERO
where NUMERO = : o l d .NUMERO;
exception
when n o d a t a f o u n d t h e n n u l l ;
end ;
/

55/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Utilisation
REM I n s e r t i o n s d e s d o n n
e e s s o u s SQLPLUS
REM Lancement d e s p r o c
edures
select
PAUSE

Insertion des donn


e e s from d u a l ;

e x e c u t e AJOUT ENSEIGNANT ( 1 ,
17091958
e x e c u t e AJOUT ENSEIGNANT ( 2 ,
22111969

TRAIFOR
, M , 6 ,
TRAIFOR
, F , 6 ,

, C l
ement ,
7 8 0 , BD ) ;
, Cl
ementine ,
7 8 0 , IA ) ;

e x e c u t e AJOUT BIATOS ( 3 , FAITOUT , A l e x ,


16101960 , M , 01012002 , C o m m e r c i a l ) ;
PAUSE
s e l e c t from PERSONNEL ;
s e l e c t from ENSEIGNANT ;
s e l e c t from BIATOS ;
PAUSE

56/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition par distinction

Contrainte de totalite
Contraintes dheritage :
(Contrainte B) Il nexiste pas de personnel ni enseignant ni
BIATOS
(Contrainte C) Il peut exister un personnel `a la fois enseignant
et BIATOS
Implementation :
Contrainte B : voir ci-dessus
Contrainte C : equivaut `a ne pas programmer la contrainte A
precedente
Pas de mise en uvre les declencheurs des tables
ENSEIGNANT et BIATOS : TRIG_ENSEIGNANT, TRIG_BIATOS

57/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition par distinction

Contrainte dexclusion
Contraintes dheritage :
(Contrainte A) Il nexiste pas de personnel `a la fois enseignant
et BIATOS
(Contrainte D) Il peut exister un personnel ni enseignant ni
BIATOS
Implementation :
Contrainte A: voir ci-dessus
Contrainte D : equivaut `a ne pas programmer la contrainte B
precedente
pas de mise en uvre les quatre procedures (ajout et
suppression) et le declencheur TRIG_ENSBIATOS

58/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition par distinction

Sans Contrainte
Aucune contrainte nest `a programmer !

59/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition descendante

Descendante
ENSEIGNANT( Num
e ro ,
Nom, Pr
e nom , D a t e N a i s s a n c e ,
Sexe , E c h e l o n , I n d i c e ,
Sp
ecialit
e)
BIATOS ( Num
e ro , Nom, Pr
e nom ,
D a t e N a i s s a n c e , Sexe ,
DateEmbauche , S e r v i c e )

Contrainte de partition ? aucun personnel ne peut etre `a la


fois enseignant et iatos et il nexiste pas non plus un personnel
netant ni enseignant ni iatos
Contrainte de totalite ?
Contrainte dexclusion ? il faudrait la table personnel pour
les personnels non enseignant et non BIATOS
Sans contrainte !

60/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition ascendante

Contrainte de partition
Contrainte de totalite
Contrainte dexclusion
Sans Contrainte
Contraintes dheritage :
(Contrainte A) Il nexiste pas de personnel `a la fois enseignant
et BIATOS
(Contrainte B) Il nexiste pas de personnel ni enseignant ni
BIATOS

61/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition ascendante

Implementation des contraintes A et B :


au niveau de la table personnel
`a laide des contraintes de type CHECK
Contrainte A :
Verifier que les colonnes ECHELON, INDICE, SPECIALITE,
DATEEMBAUCHE et SERVICE ne soient pas toutes initialisees
Contrainte B :
Verifier que les colonnes ECHELON, INDICE, SPECIALITE,
DATEEMBAUCHE et SERVICE ne soient pas toutes nulles

62/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition ascendante
REM CONTRAINTE A
a l t e r t a b l e PERSONNEL
add c o n s t r a i n t CK CONTRAINTE A
check (
(ECHELON i s n u l l and INDICE i s n u l l and
SPECIALITE i s n u l l )
o r (DATEEMBAUCHE i s n u l l and SERVICE i s n u l l )
);
REM CONTRAINTE B
a l t e r t a b l e PERSONNEL
add c o n s t r a i n t CK CONTRAINTE B
check (
(ECHELON i s no t n u l l o r INDICE i s no t n u l l o r
SPECIALITE i s no t n u l l )
or
(DATEEMBAUCHE i s no t n u l l o r SERVICE i s no t n u l l )
);

63/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition ascendante

Contrainte de totalite
Contraintes dheritage :
(Contrainte B) Il nexiste pas de personnel ni enseignant ni
BIATOS
(Contrainte C) Il peut exister un personnel `a la fois enseignant
et BIATOS

64/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition ascendante

Contrainte de totalite
Contrainte B : voir ci-dessus
Contrainte C : Suppression ou desactiver la contrainte A
precedente (DROP CONSTRAINT ou
DISABLE CONSTRAINT)
DROP CONSTRAINT : en cas de reactivation de la
contrainte, il est necessaire de la recreer
(ADD CONSTRAINT)
DISABLE CONSTRAINT : en cas de reactivation de la
contrainte, il faut simplement la reactiver avec la requete
ENABLE CONSTRAINT

65/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition ascendante

Contrainte de totalite
REM La c o n t r a i n t e C r e v i e n t `
a faire la
REM D
e s a c t i v a t i o n de l a CONTRAINTE A
a l t e r t a b l e PERSONNEL
d i s a b l e c o n s t r a i n t CK CONTRAINTE A ;

66/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition ascendante

Contrainte dexclusion
Contrainte dheritage :
Contrainte A Reactivation de la contrainte A en supprimant
au prealable les tuples ne repondant pas `a cette contrainte
Non-contrainte B Desactivation de la contrainte B

67/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition ascendante

Contrainte dexclusion
REM R
e a c t i v a t i o n de l a CONTRAINTE A
a l t e r t a b l e PERSONNEL
e n a b l e c o n s t r a i n t CK CONTRAINTE A ;

REM D
e s a c t i v a t i o n de l a CONTRAINTE B
a l t e r t a b l e PERSONNEL
d i s a b l e c o n s t r a i n t CK CONTRAINTE B ;

68/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Traduction des contraintes dheritage


Decomposition ascendante

Sans Contrainte
Aucune contrainte de type CHECK nest `a programmer !

69/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Conclusion / Bilan

Aucune des solutions ne constitue la panacee.


Il faut mesurer les performances des requetes.
Voir aussi le type de requetes

70/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Transformation des associations dheritage en SQL 3


Heritage de types
Existe depuis la version 9.1 dOracle (novembre 2001)
Uniquement heritage de type
Pas dheritage multiple
Un type peut heriter dun seul autre type (sur-type)
Un sur-type peut permettre de definir plusieurs sous-types
Chaque sous-type est specialise par rapport au sur-type qui est
dit plus general
Mecanisme dheritage automatiquement repercute au niveau
des tables objet `a par du moment o`
u les types definissant les
tables sont issus eux-memes dune hierarchie dheritage

Heritage de tables ?

71/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Heritage de types
Definition dun personnel `a lUniversite

Cr
e a t i o n du t y p e de l a s u r c l a s s e
c r e a t e t y p e PERSONNEL TYPE AS OBJECT
(
NUMERO number ( 7 ) ,
NOM v a r c h a r ( 1 0 ) ,
PRENOM v a r c h a r ( 1 0 ) ,
DATENAISSANCE date ,
SEXE c h a r ( 1 )
)
NOT FINAL / p e u t i n c l u r e d e s s o u s c l a s s e s /
/

72/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Heritage de types

Definition dun enseignant


C r
e a t i o n du t y p e de l a s o u s c l a s s e
c r e a t e t y p e ENSEIGNANT TYPE UNDER PERSONNEL TYPE
(
ECHELON number ( 2 ) ,
INDICE number ( 5 ) ,
SPECIALITE v a r c h a r ( 2 0 )
)
FINAL
/

73/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Creation des tables objet et contraintes


Ci-dessous :
Creation de tables objet en fonctions des types precedemment
definis
Aucune directive ne precise lheritage : il est induit par la
hierarchie de type existante
P e r s o n n e l de l u n i v e r s i t
e
c r e a t e t a b l e PERSONNEL OF PERSONNEL TYPE
(
c o n s t r a i n t PK PERSONNEL p r i m a r y key (NUMERO) ,
c o n s t r a i n t CK SEXE PERSONNEL c h e c k ( SEXE i n ( M , F ) )
);
P e r s o n n e l e n s e i g n a n t
c r e a t e t a b l e ENSEIGNANT OF ENSEIGNANT TYPE ;

IMPORTANT : les contraintes ne sont definies que dans la table


personnel

74/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Creation des tables objet et contraintes


Illustration

NB : Les contraintes ne sont definies que dans la table personnel


On herite dun type
Insertion des donnees dans la table personnel :
i n s e r t i n t o p e r s o n n e l v a l u e s ( 1 , B , F , 17092004 , M ) ;
i n s e r t i n t o p e r s o n n e l v a l u e s ( 1 , B , F , 17092004 , M ) ;

ERREUR `
a la ligne 1 :
ORA00001: v i o l a t i o n de c o n t r a i n t e u n i q u e (FB . PK PERSONNEL)
s e l e c t from p e r s o n n e l ;
NUMERO
NOM
PRENOM
DATENAISSA S

1 B
F
17092004 M

75/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Creation des tables objet et contraintes


Illustration

NB : Les contraintes ne sont definies que dans la table personnel


On herite dun type
Insertion des donnees dans la table enseignant :

i n s e r t i n t o e n s e i g n a n t v a l u e s ( 7 , B , F , 17092004 , M , 2 , 7 8 0 , BD ) ; 1 l i g n e c r
i n s e r t i n t o e n s e i g n a n t v a l u e s ( 7 , B , F , 17092004 , M , 2 , 7 8 0 , BD ) ;
1 ligne c
i n s e r t i n t o e n s e i g n a n t v a l u e s ( 8 , B , D , 17102004 , M , 2 , 7 8 0 , BD ) ;
1 ligne c
s e l e c t from e n s e i g n a n t ;
NUMERO NOM
PRENO DATENAISSA S
ECHELON
INDICE SPECIALITE

7 B
F
17092004 M
2
780 BD
7 B
F
17092004 M
2
780 BD
8 B
D
17102004 M
2
780 BD

76/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 2

Creation des tables objet et contraintes (2)


Ci-dessous :
Creation des tables objet en fonctions des types
precedemment definis
Definition des contraintes au niveau des tables
P e r s o n n e l de l u n i v e r s i t
e
c r e a t e t a b l e PERSONNEL OF PERSONNEL TYPE
(
c o n s t r a i n t PK PERSONNEL p r i m a r y key (NUMERO) ,
c o n s t r a i n t CK SEXE PERSONNEL c h e c k ( SEXE i n ( M , F ) )
);
P e r s o n n e l e n s e i g n a n t

77/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Transformation des associations dheritage en SQL 3

c r e a t e t a b l e ENSEIGNANT OF ENSEIGNANT TYPE


(
c o n s t r a i n t PK ENSEIGNANT p r i m a r y key (NUMERO) ,
c o n s t r a i n t CK SEXE ENSEIGNANT c h e c k ( SEXE i n ( M , F ) )
);

ATTENTION :
Definition des contraintes, aussi dans la table enseignant
Heritage dun type

78/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Creation des tables objet et contraintes (2)


illustrations

Les contraintes doivent etre definies aussi dans la table


enseignant : heritage dun type
SQL> i n s e r t
SQL> i n s e r t
insert into
ERREUR `
a

i n t o e n s e i g n a n t v a l u e s ( 7 , B ,
i n t o e n s e i g n a n t v a l u e s ( 7 , B ,
e n s e i g n a n t v a l u e s ( 7 , B , F ,
l a l i g n e 1 : ORA00001: v i o l a t i o n

F , 17092004 , M , 2 , 7 8 0 , BD ) ; 1 l i g
F , 17092004 , M , 2 , 7 8 0 , BD ) ;
17092004 , M , 2 , 7 8 0 , BD )
de c o n t r a i n t e u n i q u e (FB . PK ENSEIGNANT )

SQL> i n s e r t i n t o e n s e i g n a n t v a l u e s ( 8 , B ,
SQL> i n s e r t i n t o e n s e i g n a n t v a l u e s ( 9 , B ,
i n s e r t i n t o e n s e i g n a n t v a l u e s ( 9 , B , D ,
ERREUR `
a l a l i g n e 1 : ORA02290: v i o l a t i o n
de v
erification

D , 17102004 , M , 2 , 7 8 0 , BD ) ; 1 l i g
D , 17102004 , K , 2 , 7 8 0 , BD ) ;
17102004 , K , 2 , 7 8 0 , BD )
de c o n t r a i n t e s (FB . CK SEXE ENSEIGNANT )

SQL> s e l e c t from e n s e i g n a n t ;
NUMERO NOM
PRENO DATENAISSA S
ECHELON
INDICE SPECIALITE

7 B
F
17092004 M
2
780 BD
8 B
D
17102004 M
2
780 BD

79/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Transformation des associations dheritage en SQL 3


` venir
Heritage de tables : A

REM Un p e r s o n n e l `
a l Universit
e
c r e a t e t a b l e PERSONNEL
(
NUMERO number ( 7 ) , NOM v a r c h a r ( 1 0 ) ,
PRENOM v a r c h a r ( 1 0 ) , DATENAISSANCE d a t e ,
SEXE c h a r ( 1 ) ,
c o n s t r a i n t PK PERSONNEL p r i m a r y k e y (NUMERO) ,
c o n s t r a i n t CK SEXE PERSONNEL c h e c k ( SEXE i n ( M , F ) )
);

80/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Transformation des associations dheritage en SQL 3


` venir
Heritage de tables : A

REM P e r s o n n e l e n s e i g n a n t
c r e a t e t a b l e ENSEIGNANT u n d e r PERSONNEL
(
ECHELON number ( 2 ) ,
INDICE number ( 5 ) ,
SPECIALITE v a r c h a r ( 2 0 )
);
REM P e r s o n n e l b i a t o s
c r e a t e t a b l e BIATOS u n d e r PERSONNEL
(
DATEEMBAUCHE date ,
SERVICE v a r c h a r ( 2 0 )
);

81/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Traduction des associations dagregation

82/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Traduction des associations dagregation


REM Un co p r o p r i
e t a i r e peut poss
e d e r p l u s i e u r s immeubles
c r e a t e t a b l e COPROPRIETAIRE
(
NUMCO number ( 7 ) ,
NOMCO v a r c h a r ( 1 0 ) ,
TELCO v a r c h a r ( 1 5 ) ,
ADRCO v a r c h a r ( 5 0 ) ,
c o n s t r a i n t PK COPROPRIETAIRE p r i m a r y key (NUMCO)
);
REM Un immeuble d o i t
e t r e poss
ed
e p a r un ou
REM
plusieurs copropri
etaires
c r e a t e t a b l e IMMEUBLE
(
NUMIMM number ( 7 ) ,
ADRIMM v a r c h a r ( 5 0 ) ,
c o n s t r a i n t PK IMMEUBLE p r i m a r y key (NUMIMM)
);

83/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Traduction des associations dagregation


c r e a t e t a b l e DEPENSE
(
NUMCO number ( 7 ) ,
NUMIMM number ( 7 ) ,
DATEDEP date ,
MTTDEP number ( 1 0 , 2 ) ,
LIBDEP v a r c h a r ( 5 0 ) ,
c o n s t r a i n t PK DEPENSE p r i m a r y key (NUMCO,NUMIMM) ,
c o n s t r a i n t FK DEPENSE NUMCO COPROPR f o r e i g n key (NUMCO)
r e f e r e n c e s COPROPRIETAIRE (NUMCO) on d e l e t e c a s c a d e ,
c o n s t r a i n t FK DEPENSE NUMIMM IMMEUBLE f o r e i g n key (NUMIMM)
r e f e r e n c e s IMMEUBLE(NUMIMM ) on d e l e t e c a s c a d e
);

La cardinalite minimale de lassociation depenser pourra etre


testee par lintermediaire dune procedure PL/SQL

84/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Traduction des contraintes dintegrite fonctionnelles


Contraintes : Partition, Exclusion, Totalite, Simultaneite, Inclusion
...
Toutes les contraintes peuvent etre definies ou programmees via :
la declaration de contraintes (constraints)
la programmation de
fonctions (functions)
procedures (procedures)
paquetages (packages)
declencheurs (triggers)

en PL/SQL ou avec un langage h


ote tel que le C, C++, Java

85/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Contrainte dinclusion

c r e a t e t a b l e STAGE
(
NUMEROS number ( 7 ) ,
NOMENTREPRISE v a r c h a r ( 4 0 ) ,
TELENT v a r c h a r ( 1 5 ) ,
ADRENT v a r c h a r ( 5 0 ) ,
c o n s t r a i n t PK STAGE p r i m a r y key (NUMEROS)
);

86/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Contrainte dinclusion
Une table par classe

c r e a t e t a b l e ETUDIANT
(
NUMEROE number ( 7 ) ,
NOM v a r c h a r ( 1 0 ) ,
PRENOM v a r c h a r ( 1 0 ) ,
DATENAISSANCE date ,
SEXE c h a r ( 1 ) ,
NUMEROS number ( 7 ) ,
c o n s t r a i n t PK ETUDIANT p r i m a r y key (NUMEROE) ,
c o n s t r a i n t FK ETUDIANT NUMEROS STAGE f o r e i g n key (NUMEROS)
r e f e r e n c e s STAGE(NUMEROS) ,
c o n s t r a i n t CK ETUDIANT SEXE c h e c k ( SEXE i n ( M , F ) )
);

87/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Contrainte dinclusion
c r e a t e t a b l e VOEUX
(
NUMEROE number ( 7 ) ,
NUMEROS number ( 7 ) ,
c o n s t r a i n t PK VOEUX p r i m a r y key (NUMEROE,NUMEROS) ,
c o n s t r a i n t FK VOEUX NUMEROE ETUDIANT f o r e i g n key (NUMEROE)
r e f e r e n c e s ETUDIANT (NUMEROE) ,
c o n s t r a i n t FK VOEUX NUMEROS STAGE f o r e i g n key (NUMEROS)
r e f e r e n c e s STAGE(NUMEROS)
);
a l t e r t a b l e ETUDIANT add
c o n s t r a i n t FK EFFECTUER INCLUSION VOEUX
f o r e i g n key (NUMEROE,NUMEROS)
r e f e r e n c e s V O E U X (NUMEROE,NUMEROS ) ;

88/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Contrainte dinclusion
Contrainte dinclusion : Le logiciel doit etre installe sur un serveur
du departement qui a achete le programme.

Un logiciel L achete par le departement D est installe sur un


serveur S, destine entre autres, `a ce departement

89/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Contrainte dinclusion
Une table par Classe

c r e a t e t a b l e DEPARTEMENT
(
NUMDEP number ( 7 ) ,
NOMDEP v a r c h a r ( 1 0 ) ,
SPECIALITE v a r c h a r ( 2 0 ) ,
c o n s t r a i n t PK DEPARTEMENT p r i m a r y key (NUMDEP)
);
c r e a t e t a b l e LOGICIEL
(
NUMLOG number ( 7 ) ,
NOMLOG v a r c h a r ( 1 0 ) ,
VERSIONLOG v a r c h a r ( 1 0 ) ,
c o n s t r a i n t PK LOGICIEL p r i m a r y key (NUMLOG)
);

90/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Contrainte dinclusion
Une table par Classe

c r e a t e t a b l e SERVEUR
(
NUMSERV number ( 7 ) ,
NOMSERV v a r c h a r ( 1 0 ) ,
TYPESERV v a r c h a r ( 1 0 ) ,
c o n s t r a i n t PK SERVEUR p r i m a r y key (NUMSERV)
);

91/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Contrainte dinclusion
Une table par Association ou par Classe-Association
c r e a t e t a b l e ACHETER (
NUMDEP number ( 7 ) , NUMLOG number ( 7 ) , DATEACHAT date ,
c o n s t r a i n t PK ACHETER p r i m a r y key (NUMDEP,NUMLOG) ,
c o n s t r a i n t FK ACHETER NUMDEP DEPARTEMENT
f o r e i g n key (NUMDEP) r e f e r e n c e s DEPARTEMENT(NUMDEP) ,
c o n s t r a i n t FK ACHETER NUMLOG LOGICIEL
f o r e i g n key (NUMLOG) r e f e r e n c e s LOGICIEL (NUMLOG)
);
c r e a t e t a b l e UTILISER (
NUMDEP number ( 7 ) , NUMSERV number ( 7 ) ,
c o n s t r a i n t PK UTILISER p r i m a r y key (NUMDEP,NUMSERV) ,
c o n s t r a i n t FK UTILISER NUMDEP DEPARTEMENT
f o r e i g n key (NUMDEP) r e f e r e n c e s DEPARTEMENT(NUMDEP) ,
c o n s t r a i n t FK UTILISER NUMSERV SERVEUR
f o r e i g n key (NUMSERV) r e f e r e n c e s SERVEUR(NUMSERV)
);

92/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Contrainte dinclusion
Une table par Association ou par Classe-Association

c r e a t e t a b l e INSTALLER (
NUMLOG number ( 7 ) , NUMSERV number ( 7 ) ,
c o n s t r a i n t PK INSTALLER p r i m a r y key (NUMLOG, NUMSERV) ,
c o n s t r a i n t FK INSTALLER NUMLOG LOGICIEL
f o r e i g n key (NUMLOG) r e f e r e n c e s LOGICIEL (NUMLOG) ,
c o n s t r a i n t FK INSTALLER NUMSERV SERVEUR
f o r e i g n key (NUMSERV) r e f e r e n c e s ERVEUR(NUMSERV) ) ;

93/187

de UML `
a SQL 2/3
Transformation des associations dh
eritage en SQL 3

Contrainte dInclusion
Declencheur
Un logiciel L achet
e par le d
epartement D est install
e sur un serveur S, destin
e entre
autres, `
a ce d
epartement
create or r e p l a c e t r i g g e r t r i g c o n t r a i n t e i n c l u s i o n
b e f o r e i n s e r t on INSTALLER
f o r e a c h row
declare
LOGIC number ( 7 ) ;
SERV number ( 7 ) ;
begin
s e l e c t ACHETER .NUMLOG, UTILISER . NUMSERV i n t o LOGIC , SERV
from ACHETER, UTILISER
where ACHETER .NUMDEP = UTILISER .NUMDEP and
ACHETER .NUMLOG = : new .NUMLOG and
UTILISER . NUMSERV = : new . NUMSERV ;
exception
when n o d a t a f o u n d t h e n
r a i s e a p p l i c a t i o n e r r o r ( 20100 ,
Le l o g i c i e l d o i t
etre i n s t a l l
e sur
un s e r v e u r du d
epartement acheteur ) ;
end ;
/

94/187

de UML `
a SQL 2/3
Programmation Objet SQL 3

Programmation Objet SQL 3

Objet-relationnel Objet
Passage UML Objet / Objet relationnel

95/187

de UML `
a SQL 2/3
Programmation Objet SQL 3

Schema relationnel / SQL2

Schema relationnel :
COURS ( NUM COURS, NOMC, NBHEURES, ANNEE )
PROFESSEURS ( NUM PROF, NOMP, SPECIALITE , DATE ENTREE ,
DER PROM, SALAIRE BASE , SALAIRE ACTUEL
)
CHARGE( NUM PROF , NUM COURS )

96/187

de UML `
a SQL 2/3
Programmation Objet SQL 3

Schema relationnel / SQL2


SQL2 :
c r e a t e t a b l e COURS
NUMBER( 2 )
NOT NULL ,
( NUM COURS
NOMC
VARCHAR( 2 0 ) NOT NULL ,
NBHEURES
NUMBER( 2 ) ,
ANNE
NUMBER( 1 ) ,
c o n s t r a i n t PK COURS p r i m a r y key (NUM COURS)
);
c r e a t e t a b l e PROFESSEURS
( NUM PROF
NUMBER( 4 )
NOT NULL ,
NOMP
VARCHAR2( 2 5 ) NOT NULL ,
SPECIALITE
VARCHAR2( 2 0 ) ,
DATE ENTREE
DATE,
DATE,
DER PROM
SALAIRE BASE
NUMBER,
SALAIRE ACTUEL
NUMBER,
c o n s t r a i n t PK PROFESSEURS p r i m a r y key (NUM PROF)
);
c r e a t e t a b l e CHARGE
( NUM PROF
NUMBER( 4 ) NOT NULL ,
NUM COURS
NUMBER( 4 ) NOT NULL ,
c o n s t r a i n t PK CHARGE p r i m a r y key (NUM COURS,
NUM PROF)
);

97/187

de UML `
a SQL 2/3
Programmation Objet SQL 3

Schema relationnel / SQL2

a l t e r t a b l e CHARGE
add c o n s t r a i n t FK CHARGE COURS
f o r e i g n key (NUM COURS)
r e f e r e n c e s COURS (NUM COURS ) ;
a l t e r t a b l e CHARGE
add c o n s t r a i n t FK CHARGE PROFESSEUR
f o r e i g n key (NUM PROF)
r e f e r e n c e s PROFESSEURS (NUM PROF ) ;

98/187

de UML `
a SQL 2/3
Programmation Objet SQL 3

Schema relationnel-objet / SQL3

Schema relationnel-objet
COURS ( NUM COURS, NOMC, NBHEURES, ANNEE )
PROFESSEURS (
NUM PROF, NOMP, SPECIALITE , DATE ENTREE ,
DER PROM, SALAIRE BASE , SALAIRE ACTUEL ,
EnsembleDe (COURS)
)

99/187

de UML `
a SQL 2/3
Programmation Objet SQL 3

Schema relationnel-objet / SQL3


SQL3 :
c r e a t e type c o u r s t y p e as o b j e c t
( n u m c o u r s number ( 2 ) , nomc v a r c h a r 2 ( 2 0 ) ,
n b h e u r e s number ( 2 ) , a n n e e number ( 1 ) )
/
create
/

type l e s c o u r s t y p e as t a b l e of c o u r s t y p e

create
type p r o f e s s e u r t y p e as o b j e c t
( n u m p r o f number ( 4 ) , nom v a r c h a r 2 ( 2 5 ) ,
s p e c i a l i t e varchar2 (20) , cours l e s c o u r s t y p e
/
create table professeur of professeur type
( p r i m a r y key ( n u m p r o f ) )
n e s t e d t a b l e c o u r s s t o r e a s tabemp
/

...)

100/187

de UML `
a SQL 2/3
Types

Types Objet
Type de donnees

Principaux type de donnees Oracle :

101/187

de UML `
a SQL 2/3
Types

Types Objet
Persistance

Sous Oracle, 3 categories dobjets :


Objets colonne (column objects) : stockes en tant que
colonne structuree dans une table relationnelle ;
Objets ligne (row objects) : stockes en tant que ligne dune
table objet.
poss`edent un identificateur unique appele OID (Object
Identifier )
peuvent etre indexes et partitionnes

Objets non persistants : non stockes


ni dans une colonne dune table relationnelle
ni dans une ligne dune table objet

Ces objets nexistent que durant lexecution dun programme


PL/SQL

102/187

de UML `
a SQL 2/3
Types

Types Objet

Definition de chaque objet `a partir dun type decrivant


une structure de donnees se positionnant dans une hierarchie
dheritage
des methodes

Utilisation dun type :


Construire dautres types
Definir une ou plusieurs tables objet
Definir une colonne dune table relationnelle
Construire des vues objet

103/187

de UML `
a SQL 2/3
Types

Types Objet
Creation dun type

Creation
CREATE [OR REPLACE TYPE ] sch
e ma . nomType
[ AS OBJECT | UNDER sch
e ma . nomSurType ]
(
REM d
e f i n i t i o n de l a s t r u c t u r e
colonne1 type1 , colonne2 type2 , . . . ,

REM d
e f i n i t i o n du comportement
m
e thode1 ( p a r a m `
e t r e s 1 ) , m
e thode2 ( p a r a m `
etres2 )
)
[ [ NOT] INSTANCIABLE ]
REM p o s i t i o n n e m e n t d a n s l e g r a p h e d h
eritage
[ [ NOT] FINAL ]
/

...

104/187

de UML `
a SQL 2/3
Types

Creation dun type


Directive FINAL

Directives FINAL et NOT FINAL : positionnement dun type


dans le graphe dheritage
Directive NOT final : `a appliquer aux types generiques
Par defaut, tout type est FINAL
Un type FINAL ne peut servir `a definir des sous-types

105/187

de UML `
a SQL 2/3
Types

Creation dun type


Directive FINAL Exemples

CREATE TYPE a d r e s s e t AS OBJECT (


n r u e NUMBER( 3 ) , r u e VARCHAR( 4 0 ) , v i l l e VARCHAR( 3 0 )
/
CREATE TYPE P e r s o n n e l t AS OBJECT(
nom VARCHAR ( 1 0 ) , prenom VARCHAR( 1 0 ) , a d r e s s e a d r e s s e t ) )
NOT FINAL
/
CREATE TYPE E n s e i g n a n t t UNDER P e r s o n n e l t (
E c h e l o n NUMBER, i n d i c e NUMBER)
FINAL

106/187

de UML `
a SQL 2/3
Types

Creation dun type


Directive INSTANTIABLE

Directives INSTANTIABLE et NOT INSTANTIABLE : capacite


dinstancitation dun type
Tous les types crees sont par defaut INSTANTIABLE
NOT INSTANCIABLE : similaire `a la notion de classe abstraite
Chaque type poss`ede
un constructeur permettant de creer des objets (persistants ou
non) `a laide de la commande NEW ou au sein dun commande
INSERT
un constructeur (par defaut) et plusieurs dans le cas de
surcharge

Un type NOT INSTANCIABLE ne peut pas etre FINAL


Un sous-type NOT INSTANCIABLE peut heriter dun type
INSTANCIABLE

107/187

de UML `
a SQL 2/3
Types

Creation dun type


Directive INSTANTIABLE -- Exemples

CREATE TYPE P e r s o n n e l t AS OBJECT(


nom VARCHAR ( 1 0 ) , prenom VARCHAR( 1 0 ) , a d r e s s e a d r e s s e t ) )
NOT INSTANTIABLE NOT FINAL
/
CREATE TYPE E n s e i g n a n t t UNDER P e r s o n n e l t (
E c h e l o n NUMBER, i n d i c e NUMBER)
INSTANTIABLE FINAL
/

108/187

de UML `
a SQL 2/3
Types

Types Objet
Suppression dun type
DROP TYPE nomType [ FORCE | VALIDATE ] ;

Directives :
FORCE : suppression du type meme sil y a des objets de ce
type dans une base
Oracle marque les colonnes dependant de ce type, UNUSED, et
elles deviennent inaccessibles (non recommande)
VALIDATE : Verification si les instances du type `a supprimer
peuvent etre substitues par un sur-type.
Exemple :
DROP TYPE P e r s o n n e l t FORCE

109/187

de UML `
a SQL 2/3
Types

Types Objet
Creation dun type

Specification de lobjet
CREATE TYPE B a n k A c c o u n t AS OBJECT (
a c c t n u m b e r INTEGER ( 5 ) ,
balance
REAL ,
status
VARCHAR2( 1 0 ) ,
MEMBER PROCEDURE open
( amount IN REAL ) ,
MEMBER PROCEDURE v e r i f y a c c t
( num IN INTEGER ) ,
MEMBER PROCEDURE c l o s e
( num IN INTEGER , amount OUT REAL )
);
CREATE TYPE BODY B a n k A c c o u n t AS
...
END;

110/187

de UML `
a SQL 2/3
Types

Types Objet
Creation dun type

Definition des methodes associees `a lobjet


CREATE TYPE BODY B a n k A c c o u n t AS
MEMBER PROCEDURE open ( amount IN REAL ) I S
BEGIN open a c c o u n t w i t h i n i t i a l d e p o s i t
I F NOT amount > 0 THEN
RAISE APPLICATION ERROR ( 20104 , bad amount ) ;
END I F ;
SELECT a c c t s e q u e n c e . NEXTVAL INTO a c c t n u m b e r FROM d u a l ;
s t a t u s := open ;
b a l a n c e := amount ;
END open ;

111/187

de UML `
a SQL 2/3
Types

Types Objet
Creation dun type
MEMBER PROCEDURE v e r i f y a c c t ( num IN INTEGER) I S
BEGIN c h e c k f o r wrong a c c o u n t number o r c l o s e d a c c o u n t
I F ( num <> a c c t n u m b e r ) THEN
RAISE APPLICATION ERROR ( 20105 , wrong number ) ;
ELSIF ( s t a t u s = c l o s e d ) THEN
RAISE APPLICATION ERROR ( 20106 , a c c o u n t c l o s e d ) ;
END I F ;
END v e r i f y a c c t ;
MEMBER PROCEDURE c l o s e ( num IN INTEGER , amount OUT REAL ) I S
BEGIN c l o s e a c c o u n t and r e t u r n b a l a n c e
v e r i f y a c c t ( num ) ;
s t a t u s := c l o s e d ;
amount := b a l a n c e ;
END c l o s e ;
END;

112/187

de UML `
a SQL 2/3
Types

Types Objet
Extraction de la description dun type

Definition de nouvelles vues du DD pour prendre en compte les


types
Exemple :
create

type emp type as o b j e c t ( n i n s e e varchar2 ( 1 3 ) ,


a ge number , nom v a r c h a r 2 ( 3 0 ) )

Description de la structure du 1er niveau dun type :


SQL> DESC e m p t y p e

113/187

de UML `
a SQL 2/3
Types

Types Objet
Extraction de la description dun type

Exemples de vues : (USER_..., DBA_..., ALL_...)


Description :
des collections : USER_COLL_TYPES
des index sur les types : USER_INDEXTYPES
des types dune mani`ere generale : USER_TYPES
des attributs des types : USER_TYPE_ATTRS
des methodes des types : USER_TYPE_METHODS
des versions des types : USER_TYPE_VERSIONS

114/187

de UML `
a SQL 2/3
Types

Passage `a lobjet
Tables relationnelles

T a b l e : MAGASINS2 SQL2
c r e a t e t a b l e MAGASINS2
(
NUMMAG
INTEGER
,
NOMMAG
CHAR( 3 0 )
,
TELMAG
CHAR( 1 5 )
,
ADRNUMMAG
VARCHAR2( 1 0 ) ,
ADRRUEMAG
VARCHAR2( 5 0 ) ,
ADRCPMAG
VARCHAR2( 1 0 ) ,
ADRVILLEMAG
VARCHAR2( 5 0 ) ,
ADRPAYSMAG
VARCHAR2( 5 0 ) ,
c o n s t r a i n t PK MAGASINS2
p r i m a r y key (NUMMAG) ) ;
i n s e r t i n t o MAGASINS2 v a l u e s ( 1 ,

NUMMAG NOMMAG
1
FB
2
FB
3
FB
4
FB

TELMAG
0145454545
0155555555
0155555555
71226002

NUMCLI
1
2
3

TELCLI
0645454545
0607080910
98980307

NOMCLI
TRAIFOR
CLEMENT
SOUCY

T a b l e : CLIENTS2 SQL2
c r e a t e t a b l e CLIENTS2
(
NUMCLI
INTEGER
,
NOMCLI
CHAR( 2 0 )
,
TELCLI
CHAR( 1 5 )
,
ADRNUMCLI
VARCHAR2( 1 0 ) ,
ADRRUECLI
VARCHAR2( 5 0 ) ,
ADRCPCLI
VARCHAR2( 1 0 ) ,
ADRVILLECLI
VARCHAR2( 5 0 ) ,
ADRPAYSCLI
VARCHAR2( 5 0 ) ,
c o n s t r a i n t PK CLIENTS2
p r i m a r y key (NUMCLI ) ) ;
FB , 0145454545 , 13 , Avenue de l a p a i x ,
75015 , P a r i s , F r a n c e ) ;

ADRNU
13
20
10
10
ADRNU
13
17
77

ADRRUEMAG
ADRCP ADRVILLEMA
Avenue de l a p a i x
75015
Paris
Avenue de l a l i b e r t
e 06100 N i c e
Avenue d e s Amis
6050
Bruxelles
Avenue du s o l e i l
1001 T u n i s
ADRRUECLI
Avenue de l a p a i x
Avenue de l a p a i x
Route de l a c o r n i c h e

ADRCP ADRVILLECL
75015
Paris
75015
Paris
4001
Sousse

ADRPAYSMAG
France
France
Belgique
Tunisie
ADRPAYSCLI
France
France
Tunisie

115/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Creation dun type TAD

Premi`ere extension du mod`ele relationnel : Types Abstraits de


Donnees (TAD)
TAD (contexte BD) :
Nouveau type dattribut defini par lutilisateur
Enrichissement de la collection existante de types disponibles
par defaut (number, date, char, varchar ...)
Structure de donnees partagee
Utilisation du type dans une ou plusieurs tables
Participation `a la composition dun ou plusieurs autres types

Remarques :
Un TAD inclut des methodes qui sont des procedures ou des
fonctions
Elles permettent de manipuler les objets du type abstrait

116/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Creation dun type exemple de TAD

create
t y p e ADRESSE TYPE a s o b j e c t
( ADRNUM
VARCHAR2( 1 0 ) ,
ADRRUE
VARCHAR2( 5 0 ) ,
ADRCP
VARCHAR2( 1 0 ) ,
ADRVILLE
VARCHAR2( 5 0 ) ,
ADRPAYS
VARCHAR2( 5 0 ) )
/
c r e a t e t y p e MAG TYPE a s o b j e c t
(
NUMMAG
INTEGER ,
NOMMAG
CHAR( 3 0 ) ,
TELMAG
CHAR( 1 5 ) ,
ADRMAG
ADRESSE TYPE )
/

c r e a t e t y p e CLI TYPE a s o b j e c t
(
NUMCLI
INTEGER ,
NOMCLI
CHAR( 3 0 ) ,
TELCLI
CHAR( 1 5 ) ,
ADRCLI
ADRESSE TYPE )
/

117/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Creation dune table Exemples

c r e a t e t a b l e MAGASINS3 OF MAG TYPE


( c o n s t r a i n t PK MAGASINS3 p r i m a r y key (NUMMAG) ) ;
c r e a t e t a b l e CLIENTS3 OF CLI TYPE
( c o n s t r a i n t PK CLIENTS3 p r i m a r y key (NUMCLI) ) ;

118/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Creation dun type

Remarques :
Un type ne peut pas contenir de contraintes (NOT NULL,
CHECK, UNIQUE, DEFAULT, PRIMARY KEY, FOREIGN KEY, etc.).
Les contraintes doivent etre declarees au niveau de la table
objet
Acc`es `a la description des types `a partir du Dictionnaire de
Donnees :
SQL > s e l e c t t a b l e n a m e , o b j e c t i d t y p e , t a b l e t y p e o w n e r ,
t a b l e t y p e from u s e r o b j e c t t a b l e s ;

119/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Creation/description dune table Exemples
SQL> d e s c c l i e n t s 2
Nom
NULL ?

NUMCLI
NOT NULL
NOMCLI
TELCLI
ADRNUMCLI
ADRRUECLI
ADRCPCLI
ADRVILLECLI
ADRPAYSCLI

Type

NUMBER( 3 8 )
CHAR( 2 0 )
CHAR( 1 5 )
VARCHAR2( 1 0 )
VARCHAR2( 5 0 )
VARCHAR2( 1 0 )
VARCHAR2( 5 0 )
VARCHAR2( 5 0 )

SQL> d e s c c l i e n t s 3
Nom
NULL ?

NUMCLI
NOT NULL
NOMCLI
TELCLI
ADRCLI

Type

NUMBER( 3 8 )
CHAR( 3 0 )
CHAR( 1 5 )
ADRESSE TYPE

120/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Object identifier (OID)

OID bases sur la cle primaire : Utilisation de loption primary


key
Exemple :
c r e a t e t a b l e CLIENTS3 OF CLI TYPE
( c o n s t r a i n t PK CLIENTS3 p r i m a r y key (NUMCLI) )
o b j e c t i d e n t i f i e r i s p r i m a r y key ;

Index sur OID :

c r e a t e t a b l e CLIENTS3 OF CLI TYPE


( c o n s t r a i n t PK CLIENTS3 p r i m a r y key (NUMCLI) )
o b j e c t i d e n t i f i e r i s s y s t e m g e n e r a t e d OIDINDEX n d x c l i e n t s 3 ;
c r e a t e t a b l e CLIENTS3 OF CLI TYPE
( c o n s t r a i n t PK CLIENTS3 p r i m a r y key (NUMCLI) )
o b j e c t i d e n t i f i e r i s system generated
OIDINDEX n d x c l i e n t s 3 ( s t o r a g e ( i n i t i a l 100K n e x t 50 k
m i n e x t e n t s 1 maxextents 50)
);

121/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Instanciation - exemples

Insertion dune

ligne

i n s e r t i n t o MAGASINS3 v a l u e s
ADRESSE TYPE ( 13
i n s e r t i n t o MAGASINS3 v a l u e s
ADRESSE TYPE ( 20
i n s e r t i n t o MAGASINS3 v a l u e s
ADRESSE TYPE ( 10
i n s e r t i n t o MAGASINS3 v a l u e s
ADRESSE TYPE ( 10

(ou plut
ot dun objet) :

(MAG TYPE( 1 , FB , 0145454545 ,


, Avenue de l a p a i x , 75015 , P a r i s , F r a n c e ) ) ) ;
(MAG TYPE( 2 , FB , 0155555555 ,
, Avenue de l a l i b e r t
e , 06100 , N i c e , F r a n c e ) ) ) ;
(MAG TYPE( 3 , FB , 0155555555 ,
, Avenue d e s Amis , 6050 , B r u x e l l e s , B e l g i q u e ) ) ) ;
(MAG TYPE( 4 , FB , 71226002 ,
, Avenue du s o l e i l , 1001 , T u n i s , T u n i s i e ) ) ) ;

SQL> s e l e c t from m a g a s i n s 3 ;
NUMMAG
NOMMAG
TELMAG
ADRMAG(ADRNUM, ADRRUE, ADRCP, ADRVILLE , ADRPAYS)
1
FB
0145454545
ADRESSE TYPE ( 13 , Avenue de l a p a i x ,
75015 , P a r i s , F r a n c e )
2
FB
0155555555
ADRESSE TYPE ( 20 , Avenue de l a l i b e r t
e ,
06100 , N i c e , F r a n c e )
3
FB
0155555555
ADRESSE TYPE ( 10 , Avenue d e s Amis ,
6050 , B r u x e l l e s , B e l g i q u e )
4
FB
71226002
ADRESSE TYPE ( 10 , Avenue du s o l e i l ,
1001 , T u n i s , T u n i s i e )

122/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Instanciation - exemples

i n s e r t i n t o CLIENTS3 v a l u e s
ADRESSE TYPE (
i n s e r t i n t o CLIENTS3 v a l u e s
ADRESSE TYPE (
i n s e r t i n t o CLIENTS3 v a l u e s
ADRESSE TYPE (

( CLI
13 ,
( CLI
17 ,
( CLI
77 ,

TYPE ( 1 , TRAIFOR , 0645454545


Avenue de l a p a i x , 75015 ,
TYPE ( 2 , CLEMENT , 0607080910
Avenue de l a p a i x , 75015 ,
TYPE ( 3 , SOUCY , 98980307 ,
Route de l a c o r n i c h e , 4001

,
P a r i s , France ) ) ) ;
,
P a r i s , France ) ) ) ;
, Sousse , Tunisie ) ) ) ;

SQL> S e l e c t from c l i e n t s 3 ;
NUMCLI NOMCLI
TELCLI
ADRCLI (ADRNUM, ADRRUE, ADRCP, ADRVILLE , ADRPAYS)
1
TRAIFOR 0645454545
ADRESSE TYPE ( 13 , Avenue de l a p a i x , 75015 ,
P a r i s , France )
2
CLEMENT 0607080910
ADRESSE TYPE ( 17 , Avenue de l a p a i x , 75015 ,
P a r i s , France )
3
SOUCY
98980307
ADRESSE TYPE ( 77 , Route de l a c o r n i c h e , 4001 ,
Sousse , Tunisie )

123/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Instanciation

Table objet-relationnelle :
Table dependante dun type
Enregistrements (lignes) dans cette table consideres comme
des objets car ils poss`edent tous un OID (Object Identifier)
unique
SQL> SELECT FROM c l i e n t s 3 ;
NUMCLI NOMCLI
TELCLI
ADRCLI (ADRNUM, ADRRUE, ADRCP, ADRVILLE , ADRPAYS)
1
TRAIFOR
0645454545
ADRESSE TYPE ( 13 , Avenue de l a p a i x , 75015 ,
P a r i s , France )
2
CLEMENT
0607080910
ADRESSE TYPE ( 17 , Avenue de l a p a i x , 75015 ,
P a r i s , France )
3
SOUCY
98980307
ADRESSE TYPE ( 77 , Route de l a c o r n i c h e , 4001 ,
Sousse , Tunisie )

124/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Instanciation

Renvoi des OID des objets de la table :


SQL> SELECT REF ( c ) FROM c l i e n t s 3 c ;

REF (C)

0000280209 E9E229206EDF47DF9996946C4BBD571C4EB9AF259F2F42BC813
0 0 0 0 2 8 0 2 0 9 5 5 0 14 1 E8898C4859AF0F3D48FA3041944EB9AF259F2F42BC813
0000280209 C2C96804847047F6856499690AAC9E254EB9AF259F2F42BC813E

125/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Mises `
a jour

Modifications/Suppressions de

lignes ou dobjets

Mise `a jour dune colonne standard


update c l i e n t s 3
s e t NOMCLI = CBON where NUMCLI=2;

Modification dune colonne appartenant `a un type imbrique


update c l i e n t s 3 c
s e t c . ADRCLI . ADRVILLE = MAVILLE where c . NUMCLI=2;

Suppression dobjet
d e l e t e from c l i e n t s 3
where n u m c l i = 3 ;
d e l e t e from c l i e n t s 3 c
where u p p e r ( c . ADRCLI . ADRPAYS) = FRANCE ;

126/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Interrogations

Utilisation de colonnes standards


s e l e c t n u m c l i , n o m c l i from c l i e n t s 3 ;
NUMCLI NOMCLI

1 TRAIFOR
2 CLEMENT
3 SOUCY

Utilisation dune colonne appartenant `a un type imbrique


s e l e c t n u m c l i , n o m c l i , c . ADRCLI . ADRPAYS
from c l i e n t s 3 c ;
NUMCLI NOMCLI
ADRCLI . ADRPAYS

1 TRAIFOR
France
2 CLEMENT
France
3 SOUCY
Tunisie

127/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Interrogations

avec formatage
c o l nom f o r m a t A10
c o l l o c f o r m a t A15
s e l e c t n u m c l i a s c l i , n o m c l i a s nom ,
c . ADRCLI . ADRVILLE | | | | c . ADRCLI . ADRPAYS
from c l i e n t s 3 c ;
CLI NOM
LOC

1 TRAIFOR
P a r i s France
2 CLEMENT
P a r i s France
3 SOUCY
Sousse Tunisie

as l o c

128/187

de UML `
a SQL 2/3
Tables Objet

Tables Objet
Interrogations

avec contraintes
SQL>
SQL>
SQL>
2
3

c o l c . ADRCLI . ADRPAYS f o r m a t A10


c o l c . ADRCLI . ADRVILLE f o r m a t A10
s e l e c t n u m c l i , n o m c l i , c . ADRCLI . ADRPAYS,
c . ADRCLI . ADRVILLE from c l i e n t s 3 c
WHERE u p p e r ( c . ADRCLI . ADRVILLE ) l i k e P% ;

NUMCLI

1
2

NOMCLI

TRAIFOR
CLEMENT

ADRCLI . ADRPAYS

France
France

ADRCLI . ADRVILLE

Paris
Paris

129/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees
(NESTED TABLE )

Table imbriquee (NESTED TABLE) : collection non ordonnee et non


limitee delements de meme type
Exemple : table Departement
NumDep

Budget
NInsee

1 table contenant une colonne (table) :


Association du type 1-N

??? 1 ou plusieurs tables : Association du type N-N

Employ
es
Nom

Age

130/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Creation
create

type emp type as o b j e c t


( n i n s e e v a r c h a r 2 ( 1 3 ) , a g e number , nom v a r c h a r 2 ( 3 0 ) )

/
create
/
create

type emps type as t a b l e o f emp type


type departement type as o b j e c t
( numdep v a r c h a r 2 ( 1 1 ) , b u d g e t number ,
employes emps type )

/
create table departement of departement type
( p r i m a r y key ( numdep ) )
n e s t e d t a b l e e m p l o y e s s t o r e a s tabemp
/

clause NESTED TABLE : definition dune table imbriquee


clause STORE AS : nommage de la structure interne qui stocke
les enregistrements de cette table imbriquee

131/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Exemple

create
/
create
/
create

type emp type as o b j e c t ( n i n s e e varchar2 ( 1 3 ) ,


a ge number , nom v a r c h a r 2 ( 3 0 ) )
type emps type as t a b l e o f emp type
t y p e d e p a r t e m e n t t y p e a s o b j e c t ( numdep v a r c h a r 2 ( 1 1 ) ,
b u d g e t number , e m p l o y e s e m p s t y p e )

/
create table departement of departement type
( p r i m a r y key ( numdep ) )
n e s t e d t a b l e e m p l o y e s s t o r e a s tabemp
/

132/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Exemple

SQL> d e s c d e p a r t e m e n t
Nom
NULL ?
Type

NUMDEP
NOT NULL VARCHAR2( 1 1 )
BUDGET
NUMBER
EMPLOYES
EMPS TYPE
SQL> d e s c e m p s t y p e
e m p s t y p e TABLE OF EMP TYPE
Nom
NULL ?
Type

NINSEE
VARCHAR2( 1 3 )
AGE
NUMBER
NOM
VARCHAR2( 3 0 )

133/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Insertion

Insertion des donnees dans une table imbriquee


i n s e r t i n t o d e p a r t e m e n t v a l u e s ( D1 , 1 0 0 0 0 0 , e m p s t y p e ( ) ) ;
i n s e r t i n t o d e p a r t e m e n t v a l u e s ( D2 , 2 0 0 0 0 0 , e m p s t y p e ( ) ) ;

SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
100000 EMPS TYPE ( )
D2
200000 EMPS TYPE ( )

134/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Insertion

Attention : dans lexemple suivant, la table vide est non


initialisee
i n s e r t i n t o d e p a r t e m e n t ( numdep , b u d g e t )
v a l u e s ( D3 , 3 0 0 0 0 0 ) ;
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
100000 EMPS TYPE ( )
D2
200000 EMPS TYPE ( )
D3
300000

135/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Insertion

Insertion des donnees dans une table imbriquee


i n s e r t i n t o d e p a r t e m e n t v a l u e s ( D4 ,
e m p s t y p e ( e m p t y p e ( N5
e m p t y p e ( N6
e m p t y p e ( N7
e m p t y p e ( N8

,
,
,
,

400000 ,
25 , B i b i
26 , C i c i
27 , D i d i
28 , F i f i

),
),
),
)));

136/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Insertion
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
100000 EMPS TYPE ( )
D2
200000 EMPS TYPE ( )
D3
300000
D4
400000 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i
EMP TYPE( N6 , 2 6 , C i c i
EMP TYPE( N7 , 2 7 , D i d i
EMP TYPE( N8 , 2 8 , F i f i

),
),
),
))

Remarque : Commande INSERT avec les constructeurs des types


de la NESTED TABLE
stocke un objet dans la table
initialise la table imbriquee associee avec des enregistrements

137/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Insertion

Insertion des donnees dans une table imbriquee


i n s e r t i n t o d e p a r t e m e n t v a l u e s ( D5 , 4 0 0 0 0 0 ,
e m p s t y p e ( e m p t y p e ( N5 , 2 5 , B i b i ) ,
e m p t y p e ( N8 , 2 8 , F i f i ) ) ) ;
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
100000 EMPS TYPE ( )
D2
200000 EMPS TYPE ( )
D3
300000
D4
400000 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )
D5
400000 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

138/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Insertion avec loperateur TABLE

Insertion avec loperateur TABLE dans une table imbriquee


(D1 et D2 etaient initialises `a vides)
i n s e r t i n t o TABLE ( s e l e c t d . e m p l o y e s from d e p a r t e m e n t d
where d . numdep = D1 )
v a l u e s ( N1 , 2 1 , CLEMENT ) ;
i n s e r t i n t o TABLE ( s e l e c t d . e m p l o y e s from d e p a r t e m e n t d
where d . numdep = D2 )
v a l u e s ( N2 , 2 2 , CLEMENTINE ) ;

NB : loperateur THE est obsol`ete et a ete remplace par loperateur


TABLE

139/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Insertion avec loperateur TABLE
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
100000 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
200000 EMPS TYPE(EMP TYPE( N2 , 2 2 , CLEMENTINE ) )
D3
300000
D4
400000 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

Remarques :
Commande INSERT INTO TABLE (SELECT ...) : stockage
dun enregistrement dans la table imbriquee designee par
TABLE
SELECT apr`es le TABLE : Retourne un seul objet, ce qui
permet de selectionner la table imbriquee associee

140/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Insertion avec loperateur TABLE

Insertion avec loperateur TABLE dans une table imbriquee


(D3 netait pas initialise `a vide)
Insertion dun employe dans le departement D3
alors que celui-ci na pas ete initialise
i n s e r t i n t o TABLE ( s e l e c t d . e m p l o y e s from d e p a r t e m e n t d
where d . numdep = D3 )
v a l u e s ( N3 , 2 3 , NE MARCHE PAS ) ;

141/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Insertion avec loperateur TABLE
SQL> i n s e r t i n t o t a b l e ( s e l e c t d . e m p l o y e s from d e p a r t e m e n t d
2 where d . numdep = D3 ) v a l u e s ( N3 , 2 3 , NEMARCHEPAS ) ;
i n s e r t i n t o t a b l e ( s e l e c t d . e m p l o y e s from d e p a r t e m e n t d
where d . numdep = D3 )

ERREUR `
a la ligne 1 :
ORA22908: r
ef
erence `
a une v a l e u r de t a b l e NULL

Explications :
1

Le departement D3 est bien un objet de la table Departement

mais il ne poss`ede pas de table imbriquee

car celle-ci na pas ete creee lors de linsertion.

Il faut detruire lobjet D3 puis le recreer !

142/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Modification

Mise `a jour de la table principale


update departement d
set d . budget = d . budget 1.5
where d . b u d g e t <= 200000 ;
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150000 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
300000 EMPS TYPE(EMP TYPE( N2 , 2 2 , CLEMENTINE ) )
D3
300000
D4
400000 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )
D5
400000 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

143/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Modification (suite)

Mise `a jour de la table principale selon un predicat dans la


table imbriquee
u p d a t e d e p a r t e m e n t d s e t d . b u d g e t = d . b u d g e t + 777
where
e x i s t s ( s e l e c t from
t a b l e ( s e l e c t d t . e m p l o y e s from d e p a r t e m e n t d t
where d t . numdep =
d . numdep ) n t
where n t . ag e < 25 ) ;

Description :
Requete qui retourne les employes de chaque departement
s e l e c t d t . e m p l o y e s from d e p a r t e m e n t d t
where d t . numdep = d . numdep

Condition sur un attribut de la table imbriquee :


where n t . ag e < 25

Alias de la table imbriquee : nt

144/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Modification (suite)

Mise `a jour de la table principale selon un predicat dans la


table imbriquee

145/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Modification (suite)

SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150777 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
300777 EMPS TYPE(EMP TYPE( N2 , 2 2 , CLEMENTINE ) )
D3
300000
D4
400000 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )
D5
400000 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

146/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Modification

Mise `a jour de la table principale selon un predicat dans la


table imbriquee
u p d a t e d e p a r t e m e n t d s e t d . b u d g e t = d . b u d g e t + 999
where
exists
( s e l e c t from t a b l e
( s e l e c t d t . e m p l o y e s from d e p a r t e m e n t d t
where d t . numdep = d . numdep ) n t
where n t . ag e > 25 ) ;

147/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Modification

SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150777 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
300777 EMPS TYPE(EMP TYPE( N2 , 2 2 , CLEMENTINE ) )
D3
300000
D4
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )
D5
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

Remarque : les memes employes sont dans deux departements

148/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Modification

Mise `a jour dans la table imbriquee


update
t a b l e ( s e l e c t d . e m p l o y e s from d e p a r t e m e n t d
where d . numdep = D2 ) n t
s e t n t . ag e = 44
where n t . n i n s e e = N2 ;

149/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Modification
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150777 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
300777 EMPS TYPE(EMP TYPE( N2 , 4 4 , CLEMENTINE ) )
D3
300000
D4
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )
D5
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

Remarque : Il est impossible de modifier plusieurs enregistrements


de differentes tables imbriquees avec une seule commande
UPDATE !

150/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Suppression

Suppression dans la table principale


d e l e t e from d e p a r t e m e n t
where numdep = D3 ;
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150777 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
300777 EMPS TYPE(EMP TYPE( N2 , 4 4 , CLEMENTINE ) )
D4
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )
D5
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

151/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Suppression

Suppression `a partir dune valeur de la table imbriquee


Elimination des departements qui emploient une personne
dont le nom est fifi
d e l e t e from d e p a r t e m e n t d
where e x i s t s ( s e l e c t from
t a b l e ( s e l e c t d t . e m p l o y e s from d e p a r t e m e n t d t
where d t . numdep = d . numdep ) n t
where u p p e r ( n t . nom ) l i k e %F I F I% ) ;

152/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Suppression

SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150777 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
300777 EMPS TYPE(EMP TYPE( N2 , 4 4 , CLEMENTINE ) )

153/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Suppression

Suppression dune table imbriquee


Elimination des departements qui emploient une personne
dont le nom est fifi
d e l e t e t a b l e ( s e l e c t dt . employes
from d e p a r t e m e n t d t where d t . numdep = D1 ) n t
where n t . nom = CLEMENT ;
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150777
D2
300777 EMPS TYPE(EMP TYPE( N2 , 4 4 , CLEMENTINE ) )

154/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Interrogation

Quels sont les numeros et les noms des employes du


departement D4 ?
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150777 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
300777 EMPS TYPE(EMP TYPE( N2 , 4 4 , CLEMENTINE ) )
D4
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )
D5
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

155/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Interrogation

s e l e c t n t . n i n s e e , n t . nom
from t a b l e ( s e l e c t d t . e m p l o y e s from d e p a r t e m e n t d t
where d t . numdep = D4 ) n t ;
NINSEE
NOM

N5
Bibi
N6
Cici
N7
Didi
N8
Fifi

156/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Interrogation

Quels sont les numeros et les noms des employes du


departement D4 qui ont moins de 26 ans ?
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150777 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
300777 EMPS TYPE(EMP TYPE( N2 , 4 4 , CLEMENTINE ) )
D4
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )
D5
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

157/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Interrogation

s e l e c t n t . n i n s e e , n t . nom
from t a b l e ( s e l e c t d t . e m p l o y e s from d e p a r t e m e n t d t
where d t . numdep = D4 ) n t where n t . ag e < 2 6 ;
NINSEE
NOM

N5
Bibi

158/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Interrogation

Requete : Quel est le nombre demployes du departement


D4 ?
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150777 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
300777 EMPS TYPE(EMP TYPE( N2 , 4 4 , CLEMENTINE ) )
D4
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )
D5
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

159/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Interrogation

s e l e c t COUNT( ) Nombre d e m p l o y
es
from t a b l e ( s e l e c t d t . e m p l o y e s from d e p a r t e m e n t d t
where d t . numdep = D4 ) n t ;
Nombre d e m p l o y
es

160/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Interrogation

Quels sont les numeros et les noms des employes des


departements D1 et D2 ?
SQL> s e l e c t from d e p a r t e m e n t ;
NUMDEP
BUDGET EMPLOYES( NINSEE , AGE , NOM)

D1
150777 EMPS TYPE(EMP TYPE( N1 , 2 1 , CLEMENT ) )
D2
300777 EMPS TYPE(EMP TYPE( N2 , 4 4 , CLEMENTINE ) )
D4
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N6 , 2 6 , C i c i ) ,
EMP TYPE( N7 , 2 7 , D i d i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )
D5
400999 EMPS TYPE(EMP TYPE( N5 , 2 5 , B i b i ) ,
EMP TYPE( N8 , 2 8 , F i f i ) )

161/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Tables imbriquees (NESTED TABLE)


Interrogation

s e l e c t s e l e c t n t . n i n s e e , n t . nom from t a b l e
( s e l e c t d t . e m p l o y e s from d e p a r t e m e n t d t
where d t . numdep = D1 ) n t
union
s e l e c t n t . n i n s e e , n t . nom from t a b l e
( s e l e c t d t . e m p l o y e s from d e p a r t e m e n t d t
where d t . numdep = D2 ) n t ;
NINSEE
NOM

N1
CLEMENT
N2
CLEMENTINE

162/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Creation

Regroupement des tables imbriquees Professeurs et Formations


dans la table Cours
NumC

create
/
create
/
create
/
create
/

Titre

Professeurs
Nom
Sp
ecialit
e

Formations
Fili`
ere
Horaire

type p r o f t y p e as o b j e c t
( nom v a r c h a r 2 ( 3 0 ) , s p e c i a l i t e v a r c h a r 2 ( 3 0 ) )
type p r o f s t y p e as t a b l e of p r o f t y p e
type f o r m a t i o n t y p e as o b j e c t
( f i l i e r e v a r c h a r 2 ( 3 0 ) , h o r a i r e number ( 5 ) )
type f o r m a t i o n s t y p e as t a b l e of f o r m a t i o n t y p e

163/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Creation
create
/
create
/
create
/
create
/
create

type p r o f t y p e as o b j e c t
( nom v a r c h a r 2 ( 3 0 ) , s p e c i a l i t e v a r c h a r 2 ( 3 0 ) )
type p r o f s t y p e as t a b l e of p r o f t y p e
type f o r m a t i o n t y p e as o b j e c t
( f i l i e r e v a r c h a r 2 ( 3 0 ) , h o r a i r e number ( 5 ) )
type f o r m a t i o n s t y p e as t a b l e of f o r m a t i o n t y p e
type c o u r s t y p e as o b j e c t
( numc v a r c h a r 2 ( 5 ) , t i t r e v a r c h a r 2 ( 1 5 ) ,
professeurs profs type , formations formations type )

/
create table cours of cours type
( c o n s t r a i n t p k c o u r s p r i m a r y key ( numc ) )
n e st e d t a b l e p r o f e s s e u r s s t o r e as t a b p r o f s ,
n e st e d t a b l e f o r m a t i o n s s t o r e as t a b f o r m a t i o n s ;

164/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Insertion

Insertion dun objet dans la table Cours, sans le lier `a des


professeurs ou `a des formations
i n s e r t i n t o c o u r s v a l u e s ( BD , B a s e s de Donn
e es ,
profs type () , formations type ());
s e l e c t from c o u r s ;
NUMC TITRE
PROFESSEURS(NOM, SPECIALITE ) FORMATIONS( FILIERE , HORAIRE )

BD
B a s e s de Donn
e es PROFS TYPE ( )
FORMATIONS TYPE ( )

165/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Insertion

Insertion, avec VALUES, dans 2 tables imbriquees :


i n s e r t i n t o c o u r s v a l u e s ( DW , Data WareHouse ,
e mence , BD ) ,
p r o f s t y p e ( p r o f t y p e ( Cl
p r o f t y p e ( Adam , BD ) ) ,
f o r m a t i o n s t y p e ( f o r m a t i o n t y p e ( Master1 , 100) ,
f o r m a t i o n t y p e ( DESS EID , 2 0 0 ) ,
f o r m a t i o n t y p e ( DEA AIOC , 2 0 0 ) ) ) ;

166/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Insertion

s e l e c t from c o u r s ;

NUMC TITRE
PROFESSEURS(NOM, SPECIALITE )
FORMATIONS( FILIERE , HORAI

BD
B a s e s de Donn
e es PROFS TYPE ( )
FORMATIONS TYPE ( )
FORMATIONS TYPE(
DW
Data WareHouse
PROFS TYPE (
PROF TYPE( Cl
e mence , BD ) ,
FORMATION TYPE( M a s t e r
PROF TYPE( Adam , BD ) )
FORMATION TYPE( M a s t e r
FORMATION TYPE( M a s t e r

167/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Insertion

Insertion, avec VALUES, dans 2 tables imbriquees


i n s e r t i n t o c o u r s v a l u e s ( BDA ,
B a s e s de Donn
e es A v a n c
ees ,
p r o f s t y p e ( p r o f t y p e ( Cl
e mence , BD ) ,
p r o f t y p e ( T r a i f o r , BD ) ,
p r o f t y p e ( Le Bon , BD ) ) ,
formations type (
f o r m a t i o n t y p e ( M a s t e r 2P , 2 0 0 ) ,
f o r m a t i o n t y p e ( M a s t e r 2R , 2 0 0 ) ) ) ;

168/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Insertion

Cours
NumC

Titre

BD
DW

Bases de donn
ees
DataWareHouse

BDA

Bases de donn
ees avanc
es

Professeurs
Nom
Sp
ecialit
e
Cl
emence
Adam

BD
BD

Cl
emence
Traifor
Le Bon

BD
BD
BD

Formations
Fili`
ere
Horaire
Master 1
Master 2P
Master 2R
Master 2P
Master 2R

100
200
200

Laffichage SQL+ est tr`es mauvais ...


s e l e c t from c o u r s ;
NUMC
BD
DW

TITRE
B a s e s de Donn
e es
Data WareHouse

PROFESSEURS(NOM, SPECIALITE ) FORMATIONS( FILIERE , HORAIRE )


PROFS TYPE ( )
FORMATIONS TYPE ( )
PROFS TYPE (PROF TYPE( Cl
e mence , BD ) , PROF TYPE( Adam , BD ) )
FORMATIONS TYPE(FORMATION TYPE( M
FORMATION TYPE( M a s t e r 2P , 2 0 0 ) , FORMATION TYPE( M a s t e r 2R , 2 0 0 ) )
BDA
B a s e s de Donn
e es A v a n c
e e s PROFS TYPE (PROF TYPE( Cl
e mence , BD ) , PROF TYPE( T r a i f
PROF TYPE( Le Bon , BD ) )
FORMATIONS TYPE(FORMATION TYPE( M
FORMATION TYPE( M a s t e r 2R , 2 0 0 ) )

169/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Insertion

Insertion, avec TABLE et VALUES, dans 2 tables imbriquees


Enregistrement des donnees : les professeurs Traifor et Parisi
enseignent les BD
i n s e r t i n t o t a b l e ( s e l e c t c . p r o f e s s e u r s from
where numc = BD ) v a l u e s (
i n s e r t i n t o t a b l e ( s e l e c t c . p r o f e s s e u r s from
where numc = BD ) v a l u e s (

cours c
T r a i f o r , SI ) ;
cours c
P a r i s i , DM ) ;

s e l e c t from c o u r s ;
NumC

Titre

BD

Bases de donn
ees

DW

DataWareHouse

BDA

Bases de donn
ees avanc
es

Professeurs
Nom
Sp
ecialit
e
Traifor
SI
Parisi
DM
Cl
emence
BD
Adam
BD
Cl
emence
Traifor
Le Bon

BD
BD
BD

Formations
Fili`
ere
Horaire

Master 1
Master 2P
Master 2R
Master 2P
Master 2R

100
200
200

170/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Insertion

Insertion, avec TABLE et VALUES, dans 2 tables imbriquees


Le cours BD :
appartient au cursus INFO1
requiert un volume horaire de 70 heures
i n s e r t i n t o t a b l e ( s e l e c t c . f o r m a t i o n s from c o u r s c
where numc = BD ) v a l u e s ( INFO1 , 7 0 ) ;
s e l e c t from c o u r s ;
NumC

Titre

BD

Bases de donn
ees

DW

DataWareHouse

BDA

Bases de donn
ees avanc
es

Professeurs
Nom
Sp
ecialit
e
Traifor
SI
Parisi
DM
Cl
emence
BD
Adam
BD
Cl
emence
Traifor
Le Bon

BD
BD
BD

Formations
Fili`
ere
Horaire
INFO1
70
Master 1
Master 2P
Master 2R
Master 2P
Master 2R

100
200
200

171/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Insertion

Insertion , avec TABLE et SELECT, dans 2 tables imbriquees


Le cours BD doit etre enseigne desormais dans toutes les fili`eres
concernees par la mati`ere DW `a condition que celle-ci aient un
volume de moins de 150 heures
i n s e r t i n t o t a b l e ( s e l e c t c . f o r m a t i o n s from c o u r s c
where c . numc = BD )
select nestedf . f i l i e r e , nestedf . horaire
from t a b l e ( s e l e c t c . f o r m a t i o n s from c o u r s c
where c . numc = DW ) n e s t e d f
where n e s t e d f . h o r a i r e < 1 5 0 ;

172/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Insertion

s e l e c t from c o u r s ;

NumC

Titre

BD

Bases de donn
ees

DW

DataWareHouse

BDA

Bases de donn
ees avanc
es

Professeurs
Nom
Sp
ecialit
e
Traifor
SI
Parisi
DM
Cl
emence
BD
Adam
BD
Cl
emence
Traifor
Le Bon

BD
BD
BD

Formations
Fili`
ere
Horaire
INFO1
70
Master 1
Master 1
100
Master 2P
200
Master 2R
200
Master 2P
Master 2R

173/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Modification Exemple

Dans la mati`ere Data WareHouse, le professeur Adam est remplace


par le professeur Saitout et que les horaires pour le Master 2P
augmentent de 30%
u p d a t e t a b l e ( s e l e c t c . p r o f e s s e u r s from c o u r s c
where c . t i t r e = Data WareHouse ) n e s t e d p r f
s e t n e s t e d p r f . nom = S a i t o u where n e s t e d p r f . nom = Adam ;
u p d a t e t a b l e ( s e l e c t c . f o r m a t i o n s from c o u r s c
where c . t i t r e = Data WareHouse ) n e s t e d f r m
set nestedfrm . horaire = horaire 1.3
where n e s t e d f r m . f i l i e r e l i k e M a s t e r 2P% ;

174/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Modification

NumC

Titre

BD

Bases de donn
ees

DW

DataWareHouse

BDA

Bases de donn
ees avanc
es

Professeurs
Nom
Sp
ecialit
e
Traifor
SI
Parisi
DM
Cl
emence
BD
Saitou
BD
Cl
emence
Traifor
Le Bon

BD
BD
BD

Formations
Fili`
ere
Horaire
INFO1
70
Master 1
Master 1
100
Master 2P
290
Master 2R
200
Master 2P
Master 2R

175/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Modification Exemple

Explications :
Modification `a laide de la commande UPDATE dun ou
plusieurs attributs dans une des deux tables imbriquees de la
table cours
Modification dun professeurs et une formation dans le cadre
dune mati`ere donnee : 2 requetes UPDATE distinctes
(car les 2 tables imbriquees sont concernees)
Necessite de recourir `a un alias pour identifier lobjet dans la
table imbriquee

176/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Modification

Pour la mati`ere DW, remplacement de la fili`ere Master1 par la


fili`ere MASTER 2 et enregistrement dun volume horaire de 150
heures
u p d a t e t a b l e ( s e l e c t c . f o r m a t i o n s from c o u r s c
where c . t i t r e = Data WareHouse ) n e s t e d f r m
s e t nestedfrm . h o r a i r e = 150 ,
n e s t e d f r m . f i l i e r e = MASTER 2
where n e s t e d f r m . f i l i e r e = M a s t e r 1 ;

177/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Modification

NumC

Titre

BD

Bases de donn
ees

DW

DataWareHouse

BDA

Bases de donn
ees avanc
es

Professeurs
Nom
Sp
ecialit
e
Traifor
SI
Parisi
DM
Cl
emence
BD
Saitou
BD
Cl
emence
Traifor
Le Bon

BD
BD
BD

Formations
Fili`
ere
Horaire
INFO1
70
Master 1
MASTER 2
150
Master 2P
290
Master 2R
200
Master 2P
Master 2R

178/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Suppression

Suppression dans 2 tables imbriquees


Le professeur Parisi nenseigne plus la mati`ere BD. Enregistrement
de cette information
delete table ( select c . professeurs
from c o u r s c where c . numc = BD ) n t
where n t . nom = P a r i s i ;

NumC

Titre

BD

Bases de donn
ees

Professeurs
Nom
Sp
ecialit
e
Traifor
SI

DW

DataWareHouse

Cl
emence
Saitou

BD
BD

BDA

Bases de donn
ees avanc
es

Cl
emence
Traifor
Le Bon

BD
BD
BD

Formations
Fili`
ere
Horaire
INFO1
70
Master 1
MASTER 2
100
Master 2P
290
Master 2R
200
Master 2P
Master 2R

179/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs Tables imbriquees


Suppression

Suppression dans 2 tables imbriquees


La fili`ere Master1 ninclut plus la mati`ere BD dans son cursus.
Enregistrement de cette information
delete table ( select c . formations
from c o u r s c where c . numc = BD ) n t
where n t . f i l i e r e = M a s t e r 1 ;

NumC

Titre

BD

Bases de donn
ees

Professeurs
Nom
Sp
ecialit
e
Traifor
SI

DW

DataWareHouse

Cl
emence
Saitou

BD
BD

BDA

Bases de donn
ees avanc
es

Cl
emence
Traifor
Le Bon

BD
BD
BD

Formations
Fili`
ere
Horaire
INFO1
70
MASTER 2
Master 2P
Master 2R
Master 2P
Master 2R

100
290
200

180/187

de UML `
a SQL 2/3
Tables imbriqu
ees

Plusieurs niveaux dimbrication

NumC

Titre

Professeurs
Nom
Sp
ecialit
e

Fili`
ere

Formations
Horaire

BD

Bases de donn
ees

Traifor

SI

INFO1

70

DW

DataWareHouse

Cl
emence
Saitou

BD
BD

100
290
200

BDA

Bases de donn
ees avanc
es

Cl
emence
Traifor
Le Bon

BD
BD
BD

MASTER 2
Master 2P
Master 2R
Master 2P
Master 2R

Dates
Jour

Oracle 8 ne permet pas dimplanter plusieurs niveaux dimbrication


dans une table objet-relationnelle
?? dans oracle 9i et/ou 10g ??

181/187

de UML `
a SQL 2/3
Tableaux pr
e-dimensionn
es

Tableaux pre-dimensionnes (VARRAY)


VARRAY (Varrying ARRAY ) : collection ordonnee et limitee
delements de meme type
Si le nombre delements maximum contenus dans une table
imbriquees est connu a priori
possibilite dutiliser un tableau de type VARRAY `a la place
dune table imbriquee
Exemple : stockage de 3 numeros de telephone maximum par
professeur
Professeurs :
NumP

NomP
AdrNum

Adresse
AdrRue
AdrVille

AdrCP

T
el
ephones
NumTel

182/187

de UML `
a SQL 2/3
Tableaux pr
e-dimensionn
es

Tableaux de taille pre-dimensionnee (VARRAY)


Exemple

Stockage de 3 numeros de telephone maximum par professeur


Creation
create

/
create
/
create
/

type AAdresse type as o b j e c t


( AdrNum v a r c h a r 2 ( 1 0 ) , AdrNom v a r c h a r 2 ( 3 0 ) ,
A d r V i l l e v a r c h a r 2 ( 2 0 ) , AdrCP v a r c h a r 2 ( 5 ) )
t y p e t e l t y p e a s o b j e c t ( NumTel v a r c h a r 2 ( 2 0 ) )

type t e l s t y p e as v a r r a y (3) of t e l t y p e

create
type p r o f e s s e u r t y p e as o b j e c t
( nump v a r c h a r 2 ( 5 ) , nomp v a r c h a r 2 ( 2 0 ) ,
Adresse AAdresse type , Telephones t e l s t y p e )
/
create table professeurs of professeur type
( c o n s t r a i n t p k p r o f e s s e u r s p r i m a r y key ( nump ) ) ;

183/187

de UML `
a SQL 2/3
Tableaux pr
e-dimensionn
es

Tableaux de taille pre-dimensionnee (VARRAY)


Insertion : INSERT avec VALUES
Stockage de 3 objets de type Professeur avec respectivement
aucun, trois et deux numeros de telephone (enregistrements
du VARRAY)
i n s e r t i n t o p r o f e s s e u r s v a l u e s ( P1 , Cl
e mence ,
A A d r e s s e t y p e ( 7 , Avenue de l a P a i x , P a r i s , 75009 ) ,
tels type ());
i n s e r t i n t o p r o f e s s e u r s v a l u e s ( P2 ,
A A d r e s s e t y p e ( 7 7 , Rue de l a
t e l s t y p e ( t e l t y p e ( 01 53 80
t e l t y p e ( 06 14 56
t e l t y p e ( 01 49 40

Adam ,
libert
e , P a r i s , 75015 ) ,
07 99 ) ,
07 06 ) ,
07 40 ) ) ) ;

i n s e r t i n t o p r o f e s s e u r s v a l u e s ( P3 , S a i t o u ,
A A d r e s s e t y p e ( 1 , Rue de l a l i b e r t
e , P a r i s , 75015 ) ,
t e l s t y p e ( t e l t y p e ( 01 53 80 53 80 ) ,
t e l t y p e ( 06 14 56 14 77 ) , NULL ) ) ;

184/187

de UML `
a SQL 2/3
Tableaux pr
e-dimensionn
es

Tableaux de taille pre-dimensionnee (VARRAY)

NumP

NomP

Adresse
AdrRue
Avenue de la paix

AdrVille
Paris

AdrCP
75009

P1

Cl
emence

AdrNum
77

P2

Adam

Rue de la libert
e

Paris

75015

P3

Saitou

Rue de la libert
e

Paris

75015

T
el
ephones
NumTel
NULL
NULL
NULL
01 53 80 07 99
06 14 56 07 06
01 49 40 07 40
01 53 80 53 80
06 14 56 14 77
NULL

185/187

de UML `
a SQL 2/3
Tableaux pr
e-dimensionn
es

Tableaux de taille pre-dimensionnee (VARRAY)


Insertion : INSERT dans un VARRAY avec PL/SQL
Avec les tableaux VARRAY, loperateur TABLE nest pas
operationnel (Version 8 doracle `a verifier sur les V9 et V10g)
Pour manipuler les tableaux, il est necessaire dutiliser un
programme PL/SQL
DECLARE
n e w t e l s t e l s t y p e := t e l s t y p e ( t e l t y p e ( 01 55 55 55 55 ) ,
t e l t y p e ( 06 06 98 98 98 ) ,
t e l t y p e ( 01 40 40 40 40 ) ) ;
BEGIN
update p r o f e s s e u r s
set telephones = new tels
where nump = P1 ;
END;
/

186/187

de UML `
a SQL 2/3
Tableaux pr
e-dimensionn
es

Tableaux de taille pre-dimensionnee (VARRAY)


NumP

NomP

Adresse
AdrRue
Avenue de la paix

AdrVille
Paris

AdrCP
75009

P1

Cl
emence

AdrNum
77

P2

Adam

Rue de la libert
e

Paris

75015

P3

Saitou

Rue de la libert
e

Paris

75015

T
el
ephones
NumTel
01 55 55 55 55
06 06 98 98 98
01 40 40 40 40
01 53 80 07 99
06 14 56 07 06
01 49 40 07 40
01 53 80 53 80
06 14 56 14 77
NULL

Remarque :
Inserer un seul numero de telephone pour le professeur P1 et
le placer au 2`eme rang dans le tableau telephones
Redaction ci-dessous de linstruction daffectation :
n e w t e l s t e l s t y p e := t e l s t y p e (NULL ,
t e l t y p e ( 06 06 98 98 98 ) , NULL ) ;

187/187

de UML `
a SQL 2/3
Tableaux pr
e-dimensionn
es

Conclusion
Comparaison entre NESTED TABLE et VARRAY

A verifier selon les versions dOracle


Possibilite de definir un index dans un NESTED TABLE
Le nombre delements nest pas limite dans une table
imbriquee
Pas de possibilite de definir dindex dans un VARRAY
Le nombre delements est limite dans une tableau
pre-dimensionne
Possibilite dacceder directement aux enregistrements stockes
dans les deux structures de donnees
fonctions : EXISTS, FIRST, LAST, etc.
Performances ? : NestedTable > Varray