Académique Documents
Professionnel Documents
Culture Documents
Thierry Hamon
Bureau H202
Institut Galilée - Université Paris 13
&
LIMSI-CNRS
hamon@limsi.fr
https://perso.limsi.fr/hamon/Teaching/P13/BDA-INFO2-2018-2019/
INFO2 – BDA
1/193
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/193
Conception, Développement, Utilisation, Administration
3/193
Modélisation de Bases de Données
Phase d’analyse : définition d’un schéma conceptuel
Schéma Conceptuel de Données (SCD) : selon le formalisme
utilisé,
ensemble d’Entités et d’Associations
ou
ensemble de Classes
Formalisme EA, ER
Formalisme UML :
4/193
Modélisation de Bases de Données
5/193
Modèle Entité-Association
Rappel
6/193
Modèle entité-association étendu
7/193
Types faibles
8/193
Classification
9/193
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/193
Agrégation
11/193
Modélisation de Bases de Données
Les deux formalismes E/R et UML sont très proches /
équivalents
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/193
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/193
De EA à SQL
Exemple de schéma conceptuel EA (SCD)
14/193
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/193
Règles de passage
du modèle Entité-Association au modèle Relationnel
16/193
De UML à SQL
Traduction des associations binaires
Traduction des associations binaires récursives
17/193
Intégrité des données (1)
18/193
Intégrité des données (2)
Notation utilisée concernant les noms des contraintes :
la contrainte clé primaire d’une table se nomme pk table
la contrainte clé étrangère d’une table se nomme
fk table1 colonne table2
la contrainte de validité d’une 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
19/193
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 é 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 p r i m a r y key (NUMEROS)
);
20/193
Traduction des associations binaires (2)
Association du type 1-1
REM ∗∗∗ Un é 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)
);
21/193
Traduction des associations binaires (1)
Association du type 1-N
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 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)
);
22/193
Traduction des associations binaires (2)
Association du type 1-N
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/193
Traduction des associations binaires (1)
Association du type N-N
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/193
Traduction des associations binaires (2)
Association du type N-N
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/193
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 p r i m a r y 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 cardinalité minimale de l’association créer pourra être testée par
l’intermédiaire d’une procédure PL/SQL
26/193
Traduction des associations binaires (1)
Association du type Réflexif/Récursif, 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 ’ ) )
);
27/193
Traduction des associations binaires (2)
Association du type Réflexif/Récursif, 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 )
);
28/193
Traduction des associations binaires (3)
Association du type Réflexif/Récursif, 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 )
);
29/193
Traduction des associations d’héritage
Traduction des contraintes d’héritage
30/193
Associations d’héritage dans UML (1)
31/193
Associations d’héritage dans UML (2)
Expression des cas d’héritage à l’aide de
couverture
disjonction
d’instances dans une population donnée
32/193
Contraintes d’héritages PARTITION et TOTALITE
Disjonction & Couverture → Partition
Non-Disjonction & Couverture → Totalité
33/193
Contraintes d’héritages EXCLUSION et ABSENCE DE
CONTRAINTE
Disjonction & Non-Couverture → Exclusion
Non-Disjonction & Non-Couverture → Absence de contrainte
34/193
Exemple (1)
Gestion du personnel dans une université
35/193
Exemple (2)
Gestion du personnel dans une université
36/193
Transformation des associations d’héritage
37/193
Décomposition par distinction
Transformation de chaque sous-classe en une relation
Migration de la clé primaire de la sur-classe dans la ou les
relations issues des sous-classes
La clé primaire de la sur-classe devient à la fois clé primaire et
clé étrangère
Distinction
PERSONNEL( Numéro , Nom, Prénom ,
DateNaissance , Sexe )
ENSEIGNANT( Numéro ∗ ,
Echelon ,
I n d i c e , S p é c i a l i t é )
38/193
Décomposition descendante
39/193
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/193
Décomposition ascendante
41/193
Transformation des associations d’héritage multiple
Mêmes règles ; plusieurs possibilités
Exemple : (décomposition ascendante)
Contrainte d’exclusion sur enseignant et BIATOS
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/193
Transformation des associations d’héritage en SQL 2
Exemple
43/193
Transformation des associations d’héritage
Décomposition par distinction
Distinction
PERSONNEL( Numéro , Nom, Prénom ,
DateNaissance , Sexe )
ENSEIGNANT( Numéro ∗ ,
Echelon ,
I n d i c e , S p é c i a l 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/193
Transformation des associations d’héritage
Décomposition 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
);
45/193
Transformation des associations d’héritage
Décomposition descendante
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 é )
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/193
Transformation des associations d’héritage
Décomposition descendante
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 é )
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/193
Transformation des associations d’héritage
Décomposition ascendante
Ascendante
PERSONNEL( Numéro , Nom, Prénom ,
D a t e N a i s s a n c e , Sexe ,
Echelon , I n d i c e ,
S p é c i a l i t é ,
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)
);
47/193
Traduction des contraintes d’héritage
Décomposition par distinction
→ 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/193
Traduction des contraintes d’héritage
Décomposition par distinction
Implémentation de la contrainte A : 2 déclencheurs
REM ∗∗∗ D é 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 é 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/193
Traduction des contraintes d’héritage
Décomposition par distinction
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/193
Traduction des contraintes d’héritage
Décomposition par distinction
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 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 ;
/
51/193
Traduction des contraintes d’héritage
Décomposition par distinction
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/193
Traduction des contraintes d’héritage
Décomposition 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 w h e r e NUMERO = num ;
d e l e t e from PERSONNEL w h e r e NUMERO = num ;
end ;
/
53/193
Traduction des contraintes d’héritage
Décomposition par distinction
REM ∗∗∗ D é c l e n c h e u r p o u r l a r é 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
REM ∗∗∗ du numé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 ate o f NUMERO on PERSONNEL
f o r e a c h row
begin
begin
u p d a te 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 t e 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/193
Traduction des contraintes d’héritage
Utilisation
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/193
Traduction des contraintes d’héritage
Décomposition par distinction
→ 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
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/193
Traduction des contraintes d’héritage
Décomposition par distinction
→ Contrainte d’exclusion
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/193
Traduction des contraintes d’héritage
Décomposition par distinction
→ Sans Contrainte
58/193
Traduction des contraintes d’héritage
Décomposition descendante
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 é )
59/193
Traduction des contraintes d’héritage
Décomposition ascendante
→ 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/193
Traduction des contraintes d’héritage
Décomposition ascendante
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/193
Traduction des contraintes d’héritage
Décomposition 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 )
);
62/193
Traduction des contraintes d’héritage
Décomposition ascendante
→ 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/193
Traduction des contraintes d’héritage
Décomposition ascendante
→ 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/193
Traduction des contraintes d’héritage
Décomposition ascendante
→ 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/193
Traduction des contraintes d’héritage
Décomposition ascendante
→ 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/193
Traduction des contraintes d’héritage
Décomposition ascendante
→ 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/193
Traduction des contraintes d’héritage
Décomposition ascendante
→ Sans Contrainte
68/193
Récursivité
Sous Oracle,
possibilité de représentation et de manipulation
de données ayant une structure de données récursive (arbre)
par une représentation tabulaire et avec la commande SQL :
69/193
Exemples de parcours de
structure de données de type récursif
Structures de données récursives de type Arbres
Exemples :
Arbre Généalogique
Nomenclature d’un produit (Composé, Composant)
Oracle offre la commande CONNECT BY
SELECT . . . FROM . . . WHERE . . .
CONNECT BY PRIOR c o l o n n e o p é r a t e u r c o l o n n e
CONNECT BY c o l o n n e o p é r a t e u r PRIOR c o l o n n e
START WITH
LEVEL
70/193
Structures hiérarchiques, arborescentes
Arbre Généalogique
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 ’ ) ) );
71/193
Exemple de requête récursive
72/193
Conclusion / Bilan
73/193
Transformation des associations d’héritage en SQL 3
Héritage de types
Existe depuis la version 9.1 d’Oracle (novembre 2001)
Uniquement héritage de type
Pas d’héritage multiple
74/193
Héritage de types
75/193
Héritage de types
76/193
Création des tables objet et contraintes
Création de tables objet en fonctions des types précédemment
définis
Aucune directive ne précise l’héritage : il est induit par la
hiérarchie de type existante
−−− ∗∗∗ 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
c r e a t e t a b l e ENSEIGNANT OF ENSEIGNANT TYPE ;
77/193
Création des tables objet et contraintes
Illustration
NB : Les contraintes ne sont définies que dans la table personnel
→ On hérite d’un type
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
78/193
Création des tables objet et contraintes
Illustration
s e l e c t ∗ from e n s e i g n a n t ;
79/193
Création des tables objet et contraintes (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
80/193
Transformation des associations d’héritage en SQL 3
ATTENTION :
Définition des contraintes, aussi dans la table enseignant
Héritage d’un type
81/193
Création des tables objet et contraintes (2)
illustrations
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
82/193
Transformation des associations d’héritage en SQL 3
Héritage de tables : À venir
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 ’ ) )
);
83/193
Transformation des associations d’héritage en SQL 3
Héritage de tables : À venir
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 )
);
84/193
Traduction des associations d’agrégation
85/193
Traduction des associations d’agrégation
REM ∗∗∗ Un co− p r o p r i é t a i r e p e u t p o s s é d e r p l u s i e u r s i m m e u b l e s
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)
);
86/193
Traduction des associations d’agrégation
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
);
87/193
Traduction des contraintes d’intégrité fonctionnelles
88/193
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)
);
89/193
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 ’ ) )
);
90/193
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 ) ;
91/193
Contrainte d’inclusion
Contrainte d’inclusion : Le logiciel doit être installé sur un serveur
du département qui a acheté le programme.
92/193
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)
);
93/193
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)
);
94/193
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)
);
95/193
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) ) ;
96/193
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 ;
/
97/193
Programmation Objet – SQL 3
Objet-relationnel – Objet
Passage UML → Objet / Objet relationnel
98/193
Schéma relationnel / SQL2
Schéma relationnel :
COURS ( NUM COURS, NOMC, NBHEURES, ANNEE )
99/193
Schéma relationnel / SQL2
SQL2 :
c r e a t e t a b l e COURS
( NUM COURS NUMBER( 2 ) NOT NULL ,
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,
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)
);
100/193
Schéma 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 ) ;
101/193
Schéma relationnel-objet / SQL3
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)
)
102/193
Schéma 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 ...)
/
103/193
Types Objet
Type de données
Principaux type de données Oracle :
104/193
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
105/193
Types Objet
106/193
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 ]
/
107/193
Création d’un type
Directive FINAL
108/193
Création d’un type
Directive FINAL – Exemples
109/193
Création d’un type
Directive INSTANTIABLE
Directives INSTANTIABLE et NOT INSTANTIABLE : capacité
d’instancitation d’un type
Tous les types créés sont par défaut INSTANTIABLE
NOT INSTANTIABLE : similaire à la notion de classe abstraite
Chaque type possède
un constructeur permettant de créer des objets (persistants ou
non) à l’aide de la commande NEW ou au sein d’un commande
INSERT
un constructeur (par défaut) et plusieurs dans le cas de
surcharge
Un type NOT INSTANTIABLE ne peut pas être FINAL
Un sous-type NOT INSTANTIABLE peut hériter d’un type
INSTANTIABLE
110/193
Création d’un type
Directive INSTANTIABLE -- Exemples
111/193
Types Objet
Suppression d’un type
DROP TYPE nomType [ FORCE | VALIDATE ] ;
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
112/193
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 )
);
113/193
Types Objet
Création d’un type
114/193
Types Objet
Création d’un type
115/193
Types Objet
Extraction de la description d’un type
116/193
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
117/193
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 ) ) ;
i n s e r t i n t o MAGASINS2 v a l u e s ( 1 , ’ FB ’ , ’ 0145454545 ’ , ’ 13 ’ , ’ Avenue de l a p a i x ’ ,
’ 75015 ’ , ’ P a r i s ’ , ’ F r a n c e ’ ) ;
118/193
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
119/193
Tables Objet
Création d’un type – exemple de TAD
120/193
Tables Objet
Création d’une table – Exemples
121/193
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
122/193
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
123/193
Tables Objet
Object identifier (OID)
OID basés sur la clé primaire : Utilisation de l’option primary
key
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 ;
124/193
Tables Objet
Instanciation - exemples
Insertion d’une ligne (ou plutôt d’un objet) :
i n s e r t i n t o MAGASINS3 v a l u e s (MAG TYPE( 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 ’ ) ) ) ;
i n s e r t i n t o MAGASINS3 v a l u e s (MAG TYPE( 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 ’ ) ) ) ;
i n s e r t i n t o MAGASINS3 v a l u e s (MAG TYPE( 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 ’ ) ) ) ;
i n s e r t i n t o MAGASINS3 v a l u e s (MAG TYPE( 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 ’ ) ) ) ;
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 ’ )
125/193
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 ’ )
126/193
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 ’ )
127/193
Tables Objet
Instanciation
REF (C)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
0000280209 E9E229206EDF47DF9996946C4BBD571C4EB9AF259F2F42BC813
0 0 0 0 2 8 0 2 0 9 5 5 0 14 1 E8898C4859AF0F3D48FA3041944EB9AF259F2F42BC813
0000280209 C2C96804847047F6856499690AAC9E254EB9AF259F2F42BC813E
128/193
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 ’ ;
129/193
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
130/193
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
131/193
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% ’ ;
132/193
Tables imbriquées
(NESTED TABLE )
Table imbriquée (NESTED TABLE) : collection non ordonnée et non
limitée d’éléments de même type
Exemple : table Departement
NumDep Budget Employés
NInsee Nom Age
133/193
Tables imbriquées (NESTED TABLE)
Création
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 ) )
/
134/193
Tables imbriquées (NESTED TABLE)
Exemple
135/193
Tables imbriquées (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 )
136/193
Tables imbriquées (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 ( )
137/193
Tables imbriquées (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
138/193
Tables imbriquées (NESTED TABLE)
Insertion
139/193
Tables imbriquées (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 ’ ))
140/193
Tables imbriquées (NESTED TABLE)
Insertion
Insertion des données dans une table imbriqué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 ( ’ 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 ’ ) )
141/193
Tables imbriquées (NESTED TABLE)
Insertion avec l’opérateur TABLE
142/193
Tables imbriquées (NESTED TABLE)
Insertion avec l’opérateur 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 d’un
enregistrement dans la table imbriquée désignée par TABLE
SELECT après le TABLE : Retourne un seul objet, ce qui permet de
sélectionner la table imbriquée associée
143/193
Tables imbriquées (NESTED TABLE)
Insertion avec l’opérateur TABLE
144/193
Tables imbriquées (NESTED TABLE)
Insertion avec l’opérateur 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 à 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 !
145/193
Tables imbriquées (NESTED TABLE)
Modification
Mise à 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 ’ ) )
146/193
Tables imbriquées (NESTED TABLE)
Modification (suite)
Mise à jour de la table principale selon un prédicat dans la
table imbriquée
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 :
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
147/193
Tables imbriquées (NESTED TABLE)
Modification (suite)
148/193
Tables imbriquées (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 ’ ) )
149/193
Tables imbriquées (NESTED TABLE)
Modification
150/193
Tables imbriquées (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 ’ ) )
151/193
Tables imbriquées (NESTED TABLE)
Modification
152/193
Tables imbriquées (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 ’ ) )
153/193
Tables imbriquées (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 ’ ) )
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 ’ ) )
154/193
Tables imbriquées (NESTED TABLE)
Suppression
155/193
Tables imbriquées (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 ’ ) )
156/193
Tables imbriquées (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
D2 300777 EMPS TYPE(EMP TYPE( ’ N2 ’ , 4 4 , ’CLEMENTINE ’ ) )
157/193
Tables imbriquées (NESTED TABLE)
Interrogation
158/193
Tables imbriquées (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
159/193
Tables imbriquées (NESTED TABLE)
Interrogation
160/193
Tables imbriquées (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
161/193
Tables imbriquées (NESTED TABLE)
Interrogation
162/193
Tables imbriquées (NESTED TABLE)
Interrogation
163/193
Tables imbriquées (NESTED TABLE)
Interrogation
164/193
Tables imbriquées (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
165/193
Plusieurs Tables imbriquées
Création
Regroupement des tables imbriquées Professeurs et Formations dans la
table Cours
NumC Titre Professeurs Formations
Nom Spécialité Filière Horaire
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
/
166/193
Plusieurs Tables imbriquées
Création
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
/
create 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 ;
167/193
Plusieurs Tables imbriquées
Insertion
s e l e c t ∗ from c o u r s ;
168/193
Plusieurs Tables imbriquées
Insertion
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 ) ) ) ;
169/193
Plusieurs Tables imbriquées
Insertion
s e l e c t ∗ from c o u r s ;
170/193
Plusieurs Tables imbriquées
Insertion
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 ) ) ) ;
171/193
Plusieurs Tables imbriquées
Insertion
Cours
NumC Titre Professeurs Formations
Nom Spécialité Filière Horaire
BD Bases de données
DW DataWareHouse Clémence BD Master 1 100
Adam BD Master 2P 200
Master 2R 200
BDA Bases de données avancés Clémence BD Master 2P 200
Traifor BD Master 2R 200
Le Bon BD
172/193
Plusieurs Tables imbriquées
Insertion
Insertion, avec TABLE et VALUES, dans 2 tables imbriquées
Enregistrement des données : 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 cours c
where numc = ’BD ’ ) v a l u e s ( ’ T r a i f o r ’ , ’ SI ’ ) ;
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 cours c
where numc = ’BD ’ ) v a l u e s ( ’ P a r i s i ’ , ’DM’ ) ;
s e l e c t ∗ from c o u r s ;
NumC Titre Professeurs Formations
Nom Spécialité Filière Horaire
BD Bases de données Traifor SI
Parisi DM
DW DataWareHouse Clémence BD Master 1 100
Adam BD Master 2P 200
Master 2R 200
BDA Bases de données avancés Clémence BD Master 2P 200
Traifor BD Master 2R 200
Le Bon BD
173/193
Plusieurs Tables imbriquées
Insertion
Insertion, avec TABLE et VALUES, dans 2 tables imbriquées
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 Professeurs Formations
Nom Spécialité Filière Horaire
BD Bases de données Traifor SI INFO1 70
Parisi DM
DW DataWareHouse Clémence BD Master 1 100
Adam BD Master 2P 200
Master 2R 200
BDA Bases de données avancés Clémence BD Master 2P 200
Traifor BD Master 2R 200
Le Bon BD
174/193
Plusieurs Tables imbriquées
Insertion
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 ;
175/193
Plusieurs Tables imbriquées
Insertion
s e l e c t ∗ from c o u r s ;
176/193
Plusieurs Tables imbriquées
Modification – Exemple
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% ’ ;
177/193
Plusieurs Tables imbriquées
Modification
178/193
Plusieurs Tables imbriquées
Modification – Exemple
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
179/193
Plusieurs Tables imbriquées
Modification
180/193
Plusieurs Tables imbriquées
Modification
181/193
Plusieurs Tables imbriquées
Suppression
Suppression dans 2 tables imbriquées
Le professeur Parisi n’enseigne plus la matière 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 ’ ;
182/193
Plusieurs Tables imbriquées
Suppression
Suppression dans 2 tables imbriquées
La filière Master1 n’inclut plus la matière 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 ’ ;
183/193
Plusieurs niveaux d’imbrication
184/193
Tableaux pré-dimensionnés (VARRAY)
VARRAY (Varrying ARRAY ) : collection ordonnée et limitée
d’éléments de même type
Si le nombre d’éléments maximum contenus dans une table
imbriquées est connu a priori
possibilité d’utiliser un tableau de type VARRAY à la place
d’une table imbriquée
Exemple : stockage de 3 numéros de téléphone maximum par
professeur
Professeurs :
NumP NomP Adresse Téléphones
AdrNum AdrRue AdrVille AdrCP NumTel
185/193
Tableaux de taille pré-dimensionnée (VARRAY)
Exemple
Stockage de 3 numéros de téléphone maximum par professeur
Création
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 ) )
/
create 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 ) )
/
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 ) ) ;
186/193
Tableaux de taille pré-dimensionnée (VARRAY)
Insertion : INSERT avec VALUES
Stockage de 3 objets de type Professeur avec respectivement aucun,
trois et deux numéros de téléphone (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é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 ’ , ’ 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 ) ) ;
187/193
Tableaux de taille pré-dimensionnée (VARRAY)
188/193
Tableaux de taille pré-dimensionnée (VARRAY)
Insertion : INSERT dans un VARRAY avec PL/SQL
Avec les tableaux VARRAY, l’opérateur TABLE n’est pas
opérationnel (Version 8 d’oracle – à vérifier sur les V9 et V10g)
Pour manipuler les tableaux, il est nécessaire d’utiliser 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;
/
189/193
Tableaux de taille pré-dimensionnée (VARRAY)
NumP NomP Adresse Téléphones
AdrNum AdrRue AdrVille AdrCP NumTel
P1 Clémence 77 Avenue de la paix Paris 75009 01 55 55 55 55
06 06 98 98 98
01 40 40 40 40
P2 Adam 7 Rue de la liberté Paris 75015 01 53 80 07 99
06 14 56 07 06
01 49 40 07 40
P3 Saitou 1 Rue de la liberté Paris 75015 01 53 80 53 80
06 14 56 14 77
NULL
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 ) ;
190/193
Conclusion
Comparaison entre NESTED TABLE et VARRAY
191/193
Bilan
192/193
To be continued...
193/193