Cours BDA2
Cours BDA2
Thierry Hamon
INFO2 – BDA
1/187
de UML à SQL 2/3
Introduction
Plan
De UML à SQL 2/3, Objet-Relationnel, Orienté-Objet
Introduction
De UML à SQL2
(du conceptuel au relationnel étendu – objet-relationnel)
De UML à SQL3
(du conceptuel à l’orienté objet)
Conclusion
2/187
de UML à SQL 2/3
Introduction
3/187
de UML à SQL 2/3
Introduction
Formalisme UML :
4/187
de UML à SQL 2/3
Introduction
5/187
de UML à SQL 2/3
Introduction
Modèle Entité-Association
Rappel
6/187
de UML à SQL 2/3
Introduction
7/187
de UML à SQL 2/3
Mécanismes d’abstraction
Types faibles
8/187
de UML à SQL 2/3
Mécanismes d’abstraction
Classification
9/187
de UML à SQL 2/3
Mécanismes d’abstraction
Héritage
Spécialisation - Généralisation
Un type d’ entité A est une spécialisation d’un autre type d’entité
B si
chaque entité de A est une entité de B
Une seule entité (au plus) de B est associé à une entité de A
10/187
de UML à SQL 2/3
Mécanismes d’abstraction
Agrégation
11/187
de UML à SQL 2/3
Mécanismes d’abstraction
Entité/Association → UML
Entité Objet
Type d’entité Classe
Relation Objet
Type d’association Classe
Attribut/Propriété Propriété
Rôle / Label Rôle
Méthode
12/187
de UML à SQL 2/3
Traduction EA vers SQL
De EA à SQL
Objectifs :
Implantation d’un schéma conceptuel (SCD) dans un BD
relationnelle
Exploitation du SCD par le SGBD et les modules de
programmation
→ Transformation dans un schéma relationnel : Schéma Logique
de Données (SLD)
13/187
de UML à SQL 2/3
Traduction EA vers SQL
De EA à SQL
Exemple de schéma conceptuel EA (SCD)
14/187
de UML à SQL 2/3
Traduction EA vers SQL
De EA à SQL
Exemple de schéma logique (schéma relationnel) SLD
R1 ENT 2 ( B1 , B2 , B3 )
R2 ENT 1 ( A1 , A2 , B1 ∗ )
R3 ENT 3 ( C1 , C2 )
R4 ENT 4 ( D1 )
R5 ASSOC 6 ( B1 ∗ , C1 ∗ , D1∗ , X1 )
15/187
de UML à SQL 2/3
Traduction EA vers SQL
Règles de passage
du modèle Entité-Association au modèle Relationnel
16/187
de UML à SQL 2/3
Traduction UML vers SQL
De UML à SQL
Traduction des associations binaires
Traduction des associations binaires récursives
17/187
de UML à SQL 2/3
Traduction UML vers SQL
18/187
de UML à SQL 2/3
Traduction UML vers SQL
19/187
de UML à SQL 2/3
Traduction UML vers SQL
REM ∗∗∗ Un s t a g e e s t e f f e c t u é p a r au p l u s un é 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)
);
20/187
de UML à SQL 2/3
Traduction UML vers SQL
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)
);
21/187
de UML à SQL 2/3
Traduction UML vers SQL
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)
);
22/187
de UML à SQL 2/3
Traduction UML vers SQL
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 )
);
23/187
de UML à SQL 2/3
Traduction UML vers SQL
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)
);
24/187
de UML à SQL 2/3
Traduction UML vers SQL
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 )
);
25/187
de UML à SQL 2/3
Traduction UML vers SQL
26/187
de UML à SQL 2/3
Traduction UML vers SQL
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 ’ ) )
);
27/187
de UML à SQL 2/3
Traduction UML vers SQL
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 )
);
28/187
de UML à SQL 2/3
Traduction UML vers SQL
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 )
);
29/187
de UML à SQL 2/3
Traduction UML vers SQL
30/187
de UML à SQL 2/3
Traduction UML vers SQL
31/187
de UML à SQL 2/3
Traduction UML vers SQL
32/187
de UML à SQL 2/3
Traduction UML vers SQL
33/187
de UML à SQL 2/3
Traduction UML vers SQL
34/187
de UML à SQL 2/3
Traduction UML vers SQL
Exemple (1)
Gestion du personnel dans une université
35/187
de UML à SQL 2/3
Traduction UML vers SQL
Exemple (2)
Gestion du personnel dans une université
36/187
de UML à SQL 2/3
Traduction UML vers SQL
37/187
de UML à SQL 2/3
Traduction UML vers SQL
ENSEIGNANT( Numéro ∗ ,
Echelon ,
I n d i c e , S p é c i a l i t é )
38/187
de UML à SQL 2/3
Traduction UML vers SQL
Décomposition descendante
39/187
de UML à SQL 2/3
Traduction UML vers SQL
Décomposition descendante
Exemple
Contrainte de partition :
Aucun personnel ne peut être à la fois enseignant et BIATOS
Il n’existe pas non plus un personnel n’étant ni enseignant ni
biatos.
Descendante
ENSEIGNANT( Numéro ,
Nom, Pré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 ,
S p é c i a l i t é )
40/187
de UML à SQL 2/3
Traduction UML vers SQL
Décomposition ascendante
41/187
de UML à SQL 2/3
Traduction UML vers SQL
ENSEIGNANT ( Numéro ∗ ,
E c h e l o n , I n d i c e , S p é c i a l i t é ,
DateDébutStage , D a t e F i n S t a g e )
42/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
43/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
ENSEIGNANT( Numéro ∗ ,
Echelon ,
I n d i c e , S p é c i a l i t é )
REM ∗∗∗ Un p e r s o n n e l à l ’ U n i v e r s i t é
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 ’ ) )
);
44/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
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
);
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
);
45/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
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 à SQL 2/3
Transformation des associations d’héritage en SQL 2
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)
);
46/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
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)
);
47/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
→ Contrainte de partition
Contrainte de totalité
Contrainte d’exclusion
Sans Contrainte
Contraintes d’héritage :
(Contrainte A) Il n’existe pas de personnel à la fois enseignant
et BIATOS
(Contrainte B) Il n’existe pas de personnel ni enseignant ni
BIATOS
48/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
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 é j à BIATOS ! ! ! ’ ) ;
exception
when n o d a t a f o u n d t h e n n u l l ;
end ;
/
49/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
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 é j à e n s e i g n a n t ! ! ! ’ ) ;
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 à SQL 2/3
Transformation des associations d’héritage en SQL 2
Implémentation de la contrainte B :
procédures cataloguées (Insertion, Suppression)
déclencheurs (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 ENSIGNANT
(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 ;
/
51/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
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 ;
/
52/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
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 ENSIGNANT
(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 ;
/
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 ;
/
53/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
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 ;
/
54/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
select ’ I n s e r t i o n d e s d o n n é e s ’ from d u a l ;
PAUSE
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
55/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
Contraintes d’héritage :
(Contrainte B) Il n’existe pas de personnel ni enseignant ni
BIATOS
(Contrainte C) Il peut exister un personnel à la fois enseignant
et BIATOS
Implémentation :
Contrainte B : voir ci-dessus
Contrainte C : équivaut à ne pas programmer la contrainte A
précédente
⇒ Pas de mise en œuvre les déclencheurs des tables
ENSEIGNANT et BIATOS : TRIG_ENSEIGNANT, TRIG_BIATOS
56/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
Contraintes d’héritage :
(Contrainte A) Il n’existe pas de personnel à la fois enseignant
et BIATOS
(Contrainte D) Il peut exister un personnel ni enseignant ni
BIATOS
Implémentation :
Contrainte A: voir ci-dessus
Contrainte D : équivaut à ne pas programmer la contrainte B
précédente
⇒pas de mise en œuvre les quatre procédures (ajout et
suppression) et le déclencheur TRIG_ENSBIATOS
57/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
→ Sans Contrainte
58/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
59/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
→ Contrainte de partition
Contrainte de totalité
Contrainte d’exclusion
Sans Contrainte
Contraintes d’héritage :
(Contrainte A) Il n’existe pas de personnel à la fois enseignant
et BIATOS
(Contrainte B) Il n’existe pas de personnel ni enseignant ni
BIATOS
60/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
Contrainte A :
Vérifier que les colonnes ECHELON, INDICE, SPECIALITE,
DATEEMBAUCHE et SERVICE ne soient pas toutes initialisées
Contrainte B :
Vérifier que les colonnes ECHELON, INDICE, SPECIALITE,
DATEEMBAUCHE et SERVICE ne soient pas toutes nulles
61/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
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 )
);
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 )
);
62/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
→ Contrainte de totalité
Contraintes d’héritage :
(Contrainte B) Il n’existe pas de personnel ni enseignant ni
BIATOS
(Contrainte C) Il peut exister un personnel à la fois enseignant
et BIATOS
63/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
→ Contrainte de totalité
Contrainte B : voir ci-dessus
Contrainte C : Suppression ou désactiver la contrainte A
précédente (DROP CONSTRAINT ou
DISABLE CONSTRAINT)
64/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
→ Contrainte de totalité
REM La c o n t r a i n t e C r e v i e n t à f a i r e l a
REM D é 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 ;
65/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
→ Contrainte d’exclusion
Contrainte d’héritage :
Contrainte A → Réactivation de la contrainte A en supprimant
au préalable les tuples ne répondant pas à cette contrainte
Non-contrainte B → Désactivation de la contrainte B
66/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
→ Contrainte d’exclusion
REM ∗∗∗∗∗ R é 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 ;
67/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
→ Sans Contrainte
68/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
Conclusion / Bilan
69/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
70/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
Héritage de types
71/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
Héritage de types
72/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
73/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
s e l e c t ∗ from p e r s o n n e l ;
NUMERO NOM PRENOM DATENAISSA S
−−−−−−−−−− −−−−−−−−−− −−−−−−−−−− −−−−−−−−−− −
1 B F 17−09−2004 M
74/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
s e l e c t ∗ from e n s e i g n a n t ;
75/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 2
Ci-dessous :
Création des tables objet en fonctions des types
précédemment définis
Définition 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 é
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
76/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
ATTENTION :
Définition des contraintes, aussi dans la table enseignant
Héritage d’un type
77/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
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 17−09−2004 M 2 780 BD
8 B D 17−10−2004 M 2 780 BD
78/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
REM ∗∗∗ Un p e r s o n n e l à l ’ U n i v e r s i t é
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 ’ ) )
);
79/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
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 )
);
80/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
81/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
82/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
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
);
83/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
84/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
Contrainte d’inclusion
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)
);
85/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
Contrainte d’inclusion
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 ’ ) )
);
86/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
Contrainte d’inclusion
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 ) ;
87/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
Contrainte d’inclusion
Contrainte d’inclusion : Le logiciel doit être installé sur un serveur
du département qui a acheté le programme.
88/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
Contrainte d’inclusion
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)
);
89/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
Contrainte d’inclusion
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)
);
90/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
Contrainte d’inclusion
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)
);
91/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
Contrainte d’inclusion
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) ) ;
92/187
de UML à SQL 2/3
Transformation des associations d’héritage en SQL 3
Contrainte d’Inclusion
Déclencheur
Un logiciel L acheté par le département D est installé sur un serveur S, destiné entre
autres, à ce département
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 ê t r e i n s t a l l é s u r
un s e r v e u r du dé p a r t e m e n t a c h e t e u r ’ ) ;
end ;
/
93/187
de UML à SQL 2/3
Programmation Objet – SQL 3
Objet-relationnel – Objet
Passage UML → Objet / Objet relationnel
94/187
de UML à SQL 2/3
Programmation Objet – SQL 3
Schéma relationnel :
COURS ( NUM COURS, NOMC, NBHEURES, ANNEE )
95/187
de UML à SQL 2/3
Programmation Objet – SQL 3
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,
DER PROM DATE,
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)
);
96/187
de UML à SQL 2/3
Programmation Objet – SQL 3
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 ) ;
97/187
de UML à SQL 2/3
Programmation Objet – SQL 3
Schéma relationnel-objet
COURS ( NUM COURS, NOMC, NBHEURES, ANNEE )
PROFESSEURS (
NUM PROF, NOMP, SPECIALITE , DATE ENTREE ,
DER PROM, SALAIRE BASE , SALAIRE ACTUEL ,
EnsembleDe (COURS)
)
98/187
de UML à SQL 2/3
Programmation Objet – SQL 3
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 ...)
/
99/187
de UML à SQL 2/3
Types
Types Objet
Type de données
Principaux type de données Oracle :
100/187
de UML à SQL 2/3
Types
Types Objet
Persistance
Sous Oracle, 3 catégories d’objets :
Objets colonne (column objects) : stockés en tant que
colonne structurée dans une table relationnelle ;
Objets ligne (row objects) : stockés en tant que ligne d’une
table objet.
possèdent un identificateur unique appelé OID (Object
Identifier )
peuvent être indexés et partitionnés
Objets non persistants : non stockés
ni dans une colonne d’une table relationnelle
ni dans une ligne d’une table objet
Ces objets n’existent que durant l’exécution d’un programme
PL/SQL
101/187
de UML à SQL 2/3
Types
Types Objet
102/187
de UML à SQL 2/3
Types
Types Objet
Création d’un type
Création
CREATE [OR REPLACE TYPE ] schéma . nomType
[ AS OBJECT | UNDER schéma . nomSurType ]
(
REM ∗∗∗ d é 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 ∗∗∗ 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 é r i t a g e
[ [ NOT] FINAL ]
/
103/187
de UML à SQL 2/3
Types
104/187
de UML à SQL 2/3
Types
105/187
de UML à SQL 2/3
Types
106/187
de UML à SQL 2/3
Types
107/187
de UML à SQL 2/3
Types
Types Objet
Suppression d’un type
Directives :
FORCE : suppression du type même s’il y a des objets de ce
type dans une base
Oracle marque les colonnes dépendant de ce type, UNUSED, et
elles deviennent inaccessibles (non recommandé)
VALIDATE : Vérification si les instances du type à supprimer
peuvent être substitués par un sur-type.
Exemple :
DROP TYPE P e r s o n n e l t FORCE
108/187
de UML à SQL 2/3
Types
Types Objet
Création d’un type
Spécification de l’objet
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 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 )
);
/
109/187
de UML à SQL 2/3
Types
Types Objet
Création d’un type
110/187
de UML à SQL 2/3
Types
Types Objet
Création d’un type
111/187
de UML à SQL 2/3
Types
Types Objet
Extraction de la description d’un type
112/187
de UML à SQL 2/3
Types
Types Objet
Extraction de la description d’un type
Description :
des collections : USER_COLL_TYPES
des index sur les typesé: USER_INDEXTYPES
des types d’une manière générale : USER_TYPES
des attributs des types : USER_TYPE_ATTRS
des méthodes des types : USER_TYPE_METHODS
des versions des types : USER_TYPE_VERSIONS
113/187
de UML à SQL 2/3
Types
Passage à l’objet
Tables relationnelles
−− T a b l e : MAGASINS2 SQL2 −− T a b l e : CLIENTS2 SQL2
c r e a t e t a b l e MAGASINS2 c r e a t e t a b l e CLIENTS2
( NUMMAG INTEGER , ( NUMCLI INTEGER ,
NOMMAG CHAR( 3 0 ) , NOMCLI CHAR( 2 0 ) ,
TELMAG CHAR( 1 5 ) , TELCLI CHAR( 1 5 ) ,
ADRNUMMAG VARCHAR2( 1 0 ) , ADRNUMCLI VARCHAR2( 1 0 ) ,
ADRRUEMAG VARCHAR2( 5 0 ) , ADRRUECLI VARCHAR2( 5 0 ) ,
ADRCPMAG VARCHAR2( 1 0 ) , ADRCPCLI VARCHAR2( 1 0 ) ,
ADRVILLEMAG VARCHAR2( 5 0 ) , ADRVILLECLI VARCHAR2( 5 0 ) ,
ADRPAYSMAG VARCHAR2( 5 0 ) , ADRPAYSCLI VARCHAR2( 5 0 ) ,
c o n s t r a i n t PK MAGASINS2 c o n s t r a i n t PK CLIENTS2
p r i m a r y key (NUMMAG) ) ; p r i m a r y key (NUMCLI ) ) ;
114/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Création d’un type – TAD
Première extension du modèle relationnel : Types Abstraits de
Données (TAD)
TAD (contexte BD) :
Nouveau type d’attribut défini par l’utilisateur
Enrichissement de la collection existante de types disponibles
par défaut (number, date, char, varchar ...)
Structure de données partagée
Utilisation du type dans une ou plusieurs tables
Participation à la composition d’un ou plusieurs autres types
Remarques :
Un TAD inclut des méthodes qui sont des procédures ou des
fonctions
Elles permettent de manipuler les objets du type abstrait
115/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Création d’un type – exemple de TAD
116/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Création d’une table – Exemples
117/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Création d’un type
Remarques :
Un type ne peut pas contenir de contraintes (NOT NULL,
CHECK, UNIQUE, DEFAULT, PRIMARY KEY, FOREIGN KEY, etc.).
Les contraintes doivent être déclarées au niveau de la table
objet
118/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Création/description d’une table Exemples
SQL> d e s c c l i e n t s 2
Nom NULL ? Type
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−− −−−−−−−−−−−−−−−
NUMCLI NOT NULL NUMBER( 3 8 )
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 )
SQL> d e s c c l i e n t s 3
Nom NULL ? Type
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−− −−−−−−−−−−−−−−−
NUMCLI NOT NULL NUMBER( 3 8 )
NOMCLI CHAR( 3 0 )
TELCLI CHAR( 1 5 )
ADRCLI ADRESSE TYPE
119/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Object identifier (OID)
OID basés sur la clé primaire : Utilisation de l’option 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 ;
120/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Instanciation - exemples
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 é ’ ,
’ 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 ’ )
121/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Instanciation - exemples
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 ’ )
122/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Instanciation
Table objet-relationnelle :
Table dépendante d’un type
Enregistrements (lignes) dans cette table considérés comme
des objets car ils possèdent 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 ’ )
123/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Instanciation
REF (C)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
0000280209 E9E229206EDF47DF9996946C4BBD571C4EB9AF259F2F42BC813
0 0 00 2 8 0 2 0 9 5 5 0 14 1 E8898C4859AF0F3D48FA3041944EB9AF259F2F42BC813
0000280209 C2C96804847047F6856499690AAC9E254EB9AF259F2F42BC813E
124/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Mises à jour
Modifications/Suppressions de lignes ou d’objets
Mise à jour d’une colonne standard
update c l i e n t s 3
s e t NOMCLI = ’CBON ’ where NUMCLI=2;
Suppression d’objet
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 ’ ;
125/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Interrogations
126/187
de UML à 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 as l o c
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
127/187
de UML à SQL 2/3
Tables Objet
Tables Objet
Interrogations
avec contraintes
SQL> c o l c . ADRCLI . ADRPAYS f o r m a t A10
SQL> c o l c . ADRCLI . ADRVILLE f o r m a t A10
SQL> s e l e c t n u m c l i , n o m c l i , c . ADRCLI . ADRPAYS,
2 c . ADRCLI . ADRVILLE from c l i e n t s 3 c
3 WHERE u p p e r ( c . ADRCLI . ADRVILLE ) l i k e ’P% ’ ;
128/187
de UML à SQL 2/3
Tables imbriquées
Tables imbriquées
(NESTED TABLE )
129/187
de UML à SQL 2/3
Tables imbriquées
130/187
de UML à SQL 2/3
Tables imbriquées
131/187
de UML à SQL 2/3
Tables imbriquées
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 )
132/187
de UML à SQL 2/3
Tables imbriquées
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 ( )
133/187
de UML à SQL 2/3
Tables imbriquées
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
134/187
de UML à SQL 2/3
Tables imbriquées
135/187
de UML à SQL 2/3
Tables imbriquées
136/187
de UML à SQL 2/3
Tables imbriquées
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 ’ ) )
137/187
de UML à SQL 2/3
Tables imbriquées
138/187
de UML à SQL 2/3
Tables imbriquées
Remarques :
Commande INSERT INTO THE (SELECT ...) : stockage
d’un enregistrement dans la table imbriquée désignée par THE
SELECT après le THE : Retourne un seul objet, ce qui permet
de sélectionner la table imbriquée associée
139/187
de UML à SQL 2/3
Tables imbriquées
140/187
de UML à SQL 2/3
Tables imbriquées
SQL> i n s e r t i n t o t h 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 h 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 à l a l i g n e 1 :
ORA−22908: r é f é r e n c e à une v a l e u r de t a b l e NULL
Explications :
1 Le département D3 est bien un objet de la table Département
2 mais il ne possède pas de table imbriquée
3 car celle-ci n’a pas été créée lors de l’insertion.
Il faut détruire l’objet D3 puis le recréer !
141/187
de UML à SQL 2/3
Tables imbriquées
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 ’ ) )
142/187
de UML à SQL 2/3
Tables imbriquées
Description :
Requête qui retourne les employés de chaque département
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 imbriquée :
where n t . ag e < 25
Alias de la table imbriquée : nt
143/187
de UML à SQL 2/3
Tables imbriquées
144/187
de UML à SQL 2/3
Tables imbriquées
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 ’ ) )
145/187
de UML à SQL 2/3
Tables imbriquées
146/187
de UML à SQL 2/3
Tables imbriquées
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 ’ ) )
147/187
de UML à SQL 2/3
Tables imbriquées
148/187
de UML à SQL 2/3
Tables imbriquées
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 ’ ) )
149/187
de UML à SQL 2/3
Tables imbriquées
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 ’ ) )
150/187
de UML à SQL 2/3
Tables imbriquées
151/187
de UML à SQL 2/3
Tables imbriquées
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 ’ ) )
152/187
de UML à SQL 2/3
Tables imbriquées
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 ’ ) )
153/187
de UML à SQL 2/3
Tables imbriquées
154/187
de UML à SQL 2/3
Tables imbriquées
s e l e c t n t . n i n s e e , n t . nom
from t h 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
155/187
de UML à SQL 2/3
Tables imbriquées
156/187
de UML à SQL 2/3
Tables imbriquées
s e l e c t n t . n i n s e e , n t . nom
from t h 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
157/187
de UML à SQL 2/3
Tables imbriquées
158/187
de UML à SQL 2/3
Tables imbriquées
159/187
de UML à SQL 2/3
Tables imbriquées
160/187
de UML à SQL 2/3
Tables imbriquées
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 h 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 h 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
161/187
de UML à SQL 2/3
Tables imbriquées
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 ) )
/
create 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
/
create 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 ) )
/
create 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
/
162/187
de UML à SQL 2/3
Tables imbriquées
163/187
de UML à SQL 2/3
Tables imbriquées
s e l e c t ∗ from c o u r s ;
164/187
de UML à SQL 2/3
Tables imbriquées
p r o f s t y p e ( p r o f t y p e ( ’ Clémence ’ , ’BD ’ ) ,
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 ) ) ) ;
165/187
de UML à SQL 2/3
Tables imbriquées
s e l e c t ∗ from c o u r s ;
166/187
de UML à SQL 2/3
Tables imbriquées
p r o f s t y p e ( p r o f t y p e ( ’ Clé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 ) ) ) ;
167/187
de UML à SQL 2/3
Tables imbriquées
168/187
de UML à SQL 2/3
Tables imbriquées
s e l e c t ∗ from c o u r s ;
169/187
de UML à SQL 2/3
Tables imbriquées
s e l e c t ∗ from c o u r s ;
170/187
de UML à SQL 2/3
Tables imbriquées
i n s e r t i n t o t h 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 h 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 ;
171/187
de UML à SQL 2/3
Tables imbriquées
s e l e c t ∗ from c o u r s ;
172/187
de UML à SQL 2/3
Tables imbriquées
u p d a t e t h 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% ’ ;
173/187
de UML à SQL 2/3
Tables imbriquées
174/187
de UML à SQL 2/3
Tables imbriquées
Explications :
Modification à l’aide de la commande UPDATE d’un ou
plusieurs attributs dans une des deux tables imbriquées de la
table cours
Modification d’un professeurs et une formation dans le cadre
d’une matière donnée : 2 requêtes UPDATE distinctes
(car les 2 tables imbriquées sont concernées)
Nécessite de recourir à un alias pour identifier l’objet dans la
table imbriquée
175/187
de UML à SQL 2/3
Tables imbriquées
s e t n e s t e d f r m . h o r a i r e = 150
where n e s t e d f r m . f i l i e r e = ’ M a s t e r 1 ’ ;
u p d a t e t h 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 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 ’ ;
176/187
de UML à SQL 2/3
Tables imbriquées
177/187
de UML à SQL 2/3
Tables imbriquées
178/187
de UML à SQL 2/3
Tables imbriquées
179/187
de UML à SQL 2/3
Tables imbriquées
180/187
de UML à SQL 2/3
Tableaux pré-dimensionnés
181/187
de UML à SQL 2/3
Tableaux pré-dimensionnés
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 ) ) ;
182/187
de UML à SQL 2/3
Tableaux pré-dimensionnés
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 ’ , ’ Adam ’ ,
A A d r e s s e t y p e ( 7 7 , ’ Rue de l a l i b e r t é ’ , ’ P a r i s ’ , ’ 75015 ’ ) ,
t e l s t y p e ( t e l t y p e ( ’ 01 53 80 07 99 ’ ) ,
t e l t y p e ( ’ 06 14 56 07 06 ’ ) ,
t e l t y p e ( ’ 01 49 40 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 é ’ , ’ 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 ) ) ;
183/187
de UML à SQL 2/3
Tableaux pré-dimensionnés
184/187
de UML à SQL 2/3
Tableaux pré-dimensionnés
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
u p d at e p r o f e s s e u r s
set telephones = new tels
where nump = ’ P1 ’ ;
END;
/
185/187
de UML à SQL 2/3
Tableaux pré-dimensionnés
Remarque :
Insérer un seul numéro de téléphone pour le professeur P1 et
le placer au 2ème rang dans le tableau telephones
Rédaction ci-dessous de l’instruction d’affectation :
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 ) ;
186/187
de UML à SQL 2/3
Tableaux pré-dimensionnés
Conclusion
Comparaison entre NESTED TABLE et VARRAY
187/187