Vous êtes sur la page 1sur 87

Page 1

Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel


Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 1
Modle pour les Donnes non Normalises
Passage la technologie objet de Oracle
2014-03-14
AndrGamache, professeur associ
Dpartement d'informatiqueet degnielogiciel
Facultdesscienceset degnie
UniversitLaval. Qubec, Qc, Canada, G1K7P4
Courriel: andre.gamache@ift.ulaval.ca
Modle Objet (Oracle)
Modle Objet
Module 3 page 2
Modle objet-relationnel (OR = relationnel + objet)
Le modle gr par Oracle est dit Objet-Relationnel parce qu'il peut faire cohabiter les modles
relationnel et objet . Il est hybride !! Seule la partie exclusivement objet sera utilise.
Avantages:
- Gre les nombreuses bases relationnelles dj en service (le data legacy );
- Conserve les notions de tables comme containeur dobjets.
- Permet l'encapsulation des donnes : implmentation de linterface (des mthodes)
- Implmente les mcanismes associs l'objet : hritage, redfinition et surcharge.
Normalise les accs scuriss la BD via les mthodes.
- Capitalise sur les acquis (applications) permettant une migration volutive du SGBD
relationnel vers lobjet.
Bmols et limites:
- Objet est plus complexe dcoulant de structures disponibles dans les applications (langages
de dveloppement): usage doutils de mapping des objets (JPublisher, )
- N'implmente pas l'hritage multiple. Idem pour Java sauf pour C++. Est-ce vraiment un
inconvnient??
- N'est pas 100% conforme la norme ODMG: ex. les structures densemble limites 2
niveaux . Utilise la notion explicite de REF qui est en quelque sorte un pointeur logique lequel
devrait tre normalement tre transparent au traitement.
Page 2
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 3
Objet et Attribut
Dans lunivers des bases de donnes objets, il y a seulement quelques concepts cls:
Lobjet a un nom et est concrtis par la cration dune structure (dornavant appele classe
ou type dbjet). Un objet est donc limage dune classe et cette dernire est munie dune
interface. En Oracle : la classe est synonyme du type dun objet de table
Lattribut (proprit) a un nom et est utilis pour reprsenter un aspect de lobjet rel
permettant ainsi des traitements subsquents.
Le type: Lattribut et lobjet auront un type ( i.e. une structure de donnes) de manire
pouvoir stocker un dobjet et en permettre des traitements subsquents. Les objets sont
regroups dans un containeur dobjets. En OR, cest la table. Dans dautres systmes objets,
cela peut tre une liste ou un set.
Les mthodes sont associes aux classes pour manipuler correctement les objets. Elles
sont partages entre les applications et peuvent tre certifies pour le maintien de la
cohrence et de lefficacit. Elles ne sont pas physiquement stockes avec les structures
dobjets mais elles y sont fortement relies via le dictionnaire de donnes.
Modle Objet
Module 3 page 4
Hirarchie des types dobjets (Oracle)
TYPE
User-Defined Build-In
Scalar Collection Relationship
CHAR(N), NCHAR(N)
CHAR VARYING(N)
NCHAR VARYING(N)
RAW(N)
NUMBER DECIMAL
INTEGER SMALLINT
FLOAT REAL
DOUBLE PRECISION
DATE
BLOB CLOB
NCLOB BFILE
VARRAY
NESTED TABLE
Set()
Bag()
List()
REF
Reference: JP Perez Object Database using Oracle
tuple [ ]
Page 3
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 5
Types atomiques, complexes et dusager
1. Atomique ou de base :
int, number, string, varchar(), varchar2(), Date, ... (15 types en R).
2. Complexe : structure de tuple (1 seul objet), densemble, liste, bag, ... identifie par
un nom
Ex.: tuple := [A
1
:t
1
, A
2
:t
2
,] o A
1
est un attribut et t
1
un type primitif (ou dusager).
3. Type dfini par lusager:
Exemple : Sans faire rfrence un SGBD objet particulier, le type pour un objet :employ est
dfini comme un tuple:
employe_t := [mat: int , nom: varchar2(50) , adresse : varchar2(50)] structure de tuple
Convention dcriture pour le type
Le type dun objet a par convention, le mme nom que celui de lobjet suffix par _t et
dbutant par une lettre minuscule. Cest une convention dcriture et non une syntaxe du DDL du
SGBD objet.
Modle Objet
Module 3 page 6
Oracle: Classe externe et Classe interne
Le lien simple est implment par imbrication
dans la classe externe.
Personne: personne_t
no int
nom varchar2(40)
mat int
nom varchar(40)
adresse
Une classe externe ou interne a un type gnralement dfini par lusager
Ex. Personne : personne_t
N.B. Dans le Mnav: un lien simple interne vers une classe interne est instantie par
un seul objet interne.
: adresse_t
Page 4
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 7
Classe interne et type Usager
Dfinition du type dune classe interne (formul via la notation dun tuple)
Exemple : lattribut adresse rfre une classe interne de lobjet :personne crit sans rfrence
un SGBD particulier.
adresse_t := [ no: int, nom : varchar2(50)] i.e. (formulation linaire)
adresse_t := tuple( no: int, nom : varchar2(50))
Un type dj dfini pour une classe interne peut tre aussi utilis dans la dfinition du type dune
autre classe Externe Employe:
personne_t := [mat int, nom varchar2(40), adresse adresse_t]
En Oracle objet le type dune classe interne est cr ainsi:
(cration dun type via lapplication SQLPlus):
Create type adresse_t as Object (no int, nom varchar(50))
/
Create type personne_t as Object (mat int, nom varchar2(50), adresse adresse_t) /
*** Pas de shadowing: un type est dfini quavec des types dj crs ou prdfinis.
Modle Objet
Module 3 page 8
Partage des types entre les classes dobjets
IMPORTANT : un type peut-tre partag entre plusieurs classes dobjets crant ainsi une dpendance dont il
faudra tenir compte par la suite lors de la suppression ou la modification du type existant. Le dictionnaire du
SGBD signale cette dpendance.
Supprimer un type partag est possible si la suppression se rpercute aussi sur
les autres types dpendants:
Alter type adresse_t DROP codePostal varchar2(20) CASCADE ;
Drop type adresse_t FORCE ; -- pour supprimer malgr la dpendance.
Alter type adresse_t ADD codePostal varchar2(20) CASCADE ;
Partage dun type entre plusieurs schmas (BDO):
Possible que si le compte-propritaire Louise accorde le privilge EXECUTE aux
autres:
Grant EXECUTE ANY TYPE ON TO Pierre; -- permission donne par Louise
-- Pierre peut maintenant utiliser les types de Louise en le prfixant : Louise.employe_t
Grant insert , update, . To Pierre;
Revoke insert, update , to Pierre;
Page 5
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 9
Partage dun type entre utilisateurs-DBA
Alors Pierre veut crer un type gerant_t en utilisant le type cr par Louise :
Create type gerant_t as Object
( noGerant int, personne Louise.employe_t )
/
Describe Louise.employe_t;
Pour crer des types, Pierre doit avoir le privilge:
Grant create type to Pierre; -- accord par le DBA
ou
avoir les privilges du DBA.
N.B. Dans un cours vous avez normalement que le premier privilge .
Compte de Louise
Modle Objet
Module 3 page 10
Validation des types
Lors de la cration ou de la modification dun type, le systme doit vrifier que
cette modification ne fait pas une action qui invalide les autres types ou autres
entits de la base:
ALTER TYPE Personne DROP ATTRIBUTE (adresse) CASCADE;
Exemple : un type est modifi en supprimant un attribut
CASCADE: Le systme doit vrifier que cette suppression ne se rpercute pas
sur un autre type utilis par un attribut est index ou utilis par ex. pour le
partitionnement ou le clustering des tables,
*** Si le test passe alors le type est modifi, sinon refus du systme.
INVALIDATE: le test est supprim et les changements sont imposs quitte
ce que le clustering par exemple soit rendu inoprant. Pour le redevenir, il
faudra rinstaller le type initialement supprim!
Page 6
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 11
Partage en cascade des types
Le partage dun type utilisant un autre type dj dfini se reprsente difficilement dans
le Mnav. Avec le modle graphique Mnav. Il y a alors dpendance du type etudiant_t
sur adr_t
Create or Replace type adr_t as Object
( noRue int, rue varchar2(50), ville varchar(50), cPostal varchar(6))
/
Create type etudiant_t as Object (matE int, adr adr_t) /
Create type professeur_t as Object (matP int, assistant etudiant_t) /
Create Table Professeur of professeur_t ;
Le partage dun type est pris en compte dans son volution :
CASCADE et INVALIDATE
Alter type etudiant_t ADD tel varchar(8) CASCADE ;
Modle Objet
Module 3 page 12
Collection en Oracle (set)
Les objets dune classe interne sont appels objets-colonnes dans la terminologie
Oracle.
Lattribut lesJoueurs est un ensemble dont chaque lment est un objet-colonne (OC). Autres
types densemble : list(), bag() mais non disponibles en Oracle:
employe_t := [mat : int , nom: string, lesAdresses : list(adresse_t)] (non Oracle)
Lattribut densemble lesAdresses peut-tre ordonn ou pas par la nature du type
choisi. Chaque adresse est un objet de cet ensemble lesAdresses:
avec adresse_t := [no int, rue varchar(50), ville varchar(50)]
N.B. Un type est dfini en utilisant que des types dj dfinis.
(Formulation linaire)
Page 7
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 13
Avec Oracle, la dclaration de lensemble ordonn lesAdresses est la suivante:
Create employe_t as Object (mat int, nom varchar2(30), lesAdresses lesAdresses_t)
/
Create type lesAdresses_t as VARRAY(2) of adresse_t --ens. ordonn
/
Create type adresse_t as Object (no int, rue varchar2(50), ville varchar2(50))
/
Attention: La dfinition des types est faite dans lordre inverse puisque le shadowing nest pas autoris.
mat : int
nom : string
lesAdresses
Employe: employe_t
Mnav avec une structure interne implmente avec le VARRAY()
Structure interne rfre
par un lien interne multiple. Donc
son type sera varray ou set avec
des lment que sont les valeurs
ou les objets adresse.
Modle Objet
Module 3 page 14
Les attributs de Varray ( 10)
Le type Varray a quelques pseudo-mthodes prdfinies et associs dans le traitement avec
PL/SQL. Dans ce langage, le varray cr en PL/SQL a des attributs et non des pseudos
mthdodes. Ce dernier a les structures ncessaires pour implanter un varray, mais pas SQL.
Ce type sutilise avec des valeurs stables et peu nombreuses.
Count : le nombre actuel dlments dans lensemble dont la structure est VARRAY :
Declare
lesAdresses lesAdresses_t ;
Ex: nb := lesAdresses.count
Limit : nombre maximal dlments dans lensemble ordonn.
+ autres mthodes spcialises venir
NB Impossible de supprimer uniquement une valeur ou un objet rang dans un varray.
La struct PL/SQL varray est dfinie et dots dattributs en PL/SQL
Page 8
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 15
Constructeur dobjet (rappel de convention dcriture)
Tout objet typ sera construit par un constructeur (implicite ou explicite) dont le
nom est form avec le nom du type suffix par _t. Cette convention dcriture
permet de distinguer plus facilement le nom dun type de celui dune table-objet.
Nous verrons plus loin quil existe plusieurs constructeurs dobjets.
Linformation sur cette convention sera transmise au SGBD lors de la cration du type.
Chaque objet est construit et insr dans une table-objet. Il acquiert de ce fait un
oid unique et non rutilisable (persistance) par un autre objet. La table est son
extension/containeur (ou container).
Pour le moment, considrons cet oid comme une sorte de rfrence unique et
persistante chaque objet.
Une dfinition plus prcise et complte sera vue plus loin la composition de la REF.
Modle Objet
Module 3 page 16
Linsertion dun objet avec 2 objets de la classe interne se fera en construisant lobjet
insrer et en lajoutant dans la base par la clause DML Insert.
Insert into Employe values (employe_t (150, Robert,
lesAdresses_t( adresse_t (5, St-Louis, Qubec),
adresse_t(8, desPins, Sorel)
))); - ajout de lobjet Employe avec ses adresses
Insertion suivante sera rejette car il dpasse la capacit du Varray:
Insert into Employe values (employe_t (225, Lucie,
lesAdresses_t (adresse_t (23, Concorde, Qubec),
adresse_t (42, desSaules, Qubec),
adresse_t (99, des Pins, Qubec) )) );
Linsertion dune 3 me adresse gnre une erreur moins dtendre au pralable le varray , ce que le PL/SQL peut faire.
Insertion des objets avec un ensemble Varray
Construction de la classe interne
mat : int
nom : string
lesAdresses
Employe: employe_t
Page 9
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 17
Diffrences entre le VARRAY et le Set (NESTED TABLE)
VARRAY (set) NESTED TABLE
Ensemble tri Ensemble non tri
Objets indics (0rig. 1) Objets non indics (accs direct)
Nombre limit dobjets Nombre illimit dobjets
Pas de SELECT sur les attributs de
lobjet-colonne du varray
SELECT possible sur les attributs des
objets-colonnes
Accessible avec PL/SQL (non
accessible avec SQL)
Accessible avec SQL et PL/SQL
Objets du mme type Objets sont tous du mme type ou dun
sous-type du type dclar
Ces deux types sont du genre ensemble et peuvent avoir comme lments des
rfrences, des valeurs ou des objet-colonnes. (i.e. sans oid)
Linsertion, mise jour, suppression et autres oprations avec ces types complexes exigent lemploi de
mthodes qui seront tudies dans un chapitre ultrieur.
Modle Objet
Module 3 page 18
Supplment sur les varrays (Contenu diffrer au besoin)
Les lments stocks dans un varray sont aussi des objets (du genre objet-
colonne) Linsertion se fait par DML et la recherche avec SQL nest pas permise
avec un critre form par un attribut de lOC. Il faut donc parcourir le varray avec
une application, par exemple dveloppe en PL/SQL en utilisant les mthodes
prdfinies et associes au VARRAY.
Ce type (structure) est utile pour stocker un petit nombre dobjets de mme type
qui doivent tre ordonns exigeant un espace relativement important de
stockage. Pas de suppression possible sinon via une lecture complte du varray
avec PL/SQL et la suppression effectue via une structure de PL/SQL!
Page 10
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 19
Utilisation par appel de mthode prdfinie
Les mthodes (fonctions) qui sont prdfinies avec le type du varray
sont appeles ainsi:
var_objet.nom_mthode
v_nb := v_liste_locaux. COUNT -- fonction qui retourne dans v_nb, le nb de locaux dans la liste.
v_nb est dclare une variable entire.
Modle Objet
Module 3 page 20
Quelques mthodes (fonctions) associes Varray()
Mthode Description
Exists (x) Retourne TRUE sil existe une valeur au rang x du Varray
Count Retourne le nombre dobjets stocks dans lensemble
Limit Retourne la taille max du varray
First / Last Retourne le 1
er
et le dernier lment de la collection
Extend
Extend(m)
Extend (x, i)
Ajoute un lment vide au varray
Ajoute m lments vides
Ajoute x copies de llment en position i
Delete
Delere (i)
Delete (i,j)
Supprime tous les objets du varray
Supprime lobjet de position i dans le Varray
Supprime les objets de rang 1 j du Varray
Declare
v_tableauGroupe groupes_t -- var. objet de type varray dj dfinie dans le DD
limite int ;
Begin
limite := v_tableauGroupe.LIMIT;
DBMS_OUTPUT.PUT_LINE (To_Char(limite));
End;
Page 11
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 21
Reprsentation graphique du Varray
noA : int
lesEnfants
nasE int
nomE: varchar
ageE : int
nasE int
nomE: varchar
ageE : int

Assurance:assurance_t
Le varray est un ensemble ordonn dont
chaque lment a un rang i.
Cet ensemble ordonn est en quelque sorte
une classe interne de type varray.
Les attributs du varray peuvent tre vus
comme des mthodes prdfinies tout
varray.
La 3
e
entre du varray sera value par un
objet null.
Modle Objet
Module 3 page 22
Cration et utilisation du Varray() avec PL/SQL
Impossible de mettre jour le varray avec le Update. Il faut le faire avec PL/SQL
Create type enfant_t as Object (nasE int, nomE varchar(50) , ageE int)
/
Create type lesEnfants_t AS VARRAY(3) of enfant_t
/
Create type assurance_t as Object (noA int, lesEnfants lesEnfants_t)
/
Create table Assurance of assurance_t;
Un type peut avoir plusieurs attributs de typeVarray :
Create type assuranceInternationale_t as
Object (noA int, lesEnfantsCa lesEnfants_t, lesEnfantsUSA lesEnfants_t)
/
Page 12
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 23
Vision tabulaire avec 2 attributs densemble ordonn
Cration du containeur dobjets:
Create table Assuranceinternationale of assuranceInternationale_t;
noA: Les EnfantsCA lesEnfantsUSA
nasE nomE ageE nasE nomE AgeE
102 1001 Paul 22 2003 Jane 34
2004 Peter 25
103 1002 Lise 25 null null null
Varray(3)
(objets-colonnes sans oid)
Objet de la table
avec un oid
Modle Objet
Module 3 page 24
Ajout des objets dans le varray
Revenons Assurance:
Ajout dune Assurance couvrant 2 enfant:
Insert into Assurance values (assurance_t(102, lesEnfants_t(
enfant_t(2,'Louise', 22),
enfant_t(3,'Jacques',25),
enfant_t (null, null, null )
) );
NB Lajout dun autre objet-colonne (sur 3 possibles) ne peut pas se faire directement. Il faut lire
lobjet de table qui le contient , en faire la mise jour en RAM par lapplicatif et ensuite faire un
UPDATE de la table qui le contient. Un inconvnient qui limite lintrt du varray!
Aucune lecture possible dun seul attribut du varray avec SQL:
Select a.lesEnfants.age
From Assurance a
*** identificateur inconnu ****
Page 13
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 25
Lecture SQL du varray sans critre de slection
La lecture des objets est possible avec SQL mais pas leur mise jour, ni leur
suppression
Select a.lesEnfants From Assurance a ;
LESENFANTS (NASE, NOME, AGEE)
LESENFANTS_T(ENFANT_T(2, 'Louise', 22))
LESENFANTS_T(ENFANT_T(3, Jacques', 25))
Modle Objet
Module 3 page 26
Vision tabulaire utilisant un varray 2 places
Create type assurance_t as Object (noA int, lesEnfants lesEnfants_t)
Insert into Assurance values (assurance_t(102, lesEnfants_t(
enfant_t(2,'Louise', 22),
enfant_t(3,'Jacques',25)
);
noA: Les Enfants : lesEnfants_t
nasE nomE ageE
101 1 Paul 20
null null
102 2 Louise 22
3 Jacques 25
Assurance:
Page 14
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 27
Lecture des objets-colonnes dans un tableau
-- Applicatif PL/SQL pour afficher le nombre des enfants assurs par la police dassurance 102
Declare
v_tableauE lesEnfants_t ; -- var. varray 2 places
Begin
Select a.lesEnfants into v_tableauE
From Assurance a Where a.noA = 102;
For i IN 1..v_tableauE.COUNT Loop
IF v_tableauE.EXISTS(i) Then
DBMS_OUTPUT.PUT_LINE (v_tableauE(i).nasE|| v_tableauE(i).nomE);
End IF;
End Loop;
End;
/
2 Louise
3 Jacques
Procdure PL/SQL termine avec succs.
Modle Objet
Module 3 page 28
Recherche dun objet particulier dans un varray
-- Applicatif PL/SQL pour traiter lassurance 101
(SET SERVEROUTPUT ON)
Declare
v_tableauE lesEnfants_t ;
Begin
Select a.lesEnfants into v_tableauE From Assurance a Where a.noA =101;
DBMS_OUTPUT.PUT_LINE (v_tableauE(1).nasE ||' ' || v_tableauE(1).nomE) ;
End;
/
Rponse:
1 Paul
Procdure PL/SQL termine avec succs.
Cette procdure pourrait tre intgre dans une mthode plus gnrale de recherche et de mise
jour.
Page 15
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 29
Lecture de tous les objets (OC) dun VARRAY peu importe lobjet hte
Declare
v_tableauE lesEnfants_t ; -- var locale de type varray
v_nbPoAs int;
Begin
select count(*) into v_nbPoAs from Assurance;
For J IN 101..v_nbPoAs + 100 Loop
Begin
Select a.lesEnfants into v_tableauE From Assurance a where a.noA= J ;
For i IN 1..v_tableauE.COUNT Loop
IF v_tableauE.EXISTS(i) Then
DBMS_OUTPUT.PUT_LINE (v_tableauE(i).nomE || || v_tableauE(i).ageE);
End IF;
End Loop;
End;
End Loop;
End;
/
Paul 20
Louise 22
Jacques 25
Procdure PL/SQL termine avec succs.
Modle Objet
Module 3 page 30
Modification de lattribut dun objet (OC) (ageE)
Exemple: Jacques titulaire de lassurance 102, a 26 ans plutt que 25.
Pour modifier un objet ayant un attribut de type varray, il faut lire lobjet OC, le mettre jour
avec lapplicatif PL/SQL et linsrer nouveau dans la base-objet.
Declare
v_tableauAssur assurance_t; -- type de la var. Idem celui des objets de la table
v_lesEnfants lesEnfants_t; -- variable de type varray
Begin
Select a.lesEnfants into v_lesEnfants From Assurance a
Where a.noA = 102; -- 1 seul objet OC doit tre lu
v_lesEnfants(2).ageE := 26; -- mise jour de la 2
e
entre du varray ne RAM
Update Assurance a SET a.lesEnfants = v_lesEnfants Where a.noA = 102;
End;
/
sqlplus: select lesEnfants from Assurance;
LESENFANTS(NASE, NOME, AGEE)
LESENFANTS_T(ENFANT_T(1, 'Paul', 20))
LESENFANTS_T(ENFANT_T(2, 'Louise', 22), ENFANT_T(3, 'Jacques', 26))
Page 16
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 31
Affichage de la structure dun type
sqlplus: Describe assuranceInternationale_t;
Nom NULL ? Type
----------------------------------------- -------- -----------------------
NOA NUMBER(38)
LESENFANTS LESENFANTS_T
NASE NUMBER(38)
NOME VARCHAR2(50)
AGEE NUMBER(38)
LESENFANTSUSA LESENFANTS_T
NASE NUMBER(38)
NOME VARCHAR2(50)
AGEE NUMBER(38)
Modle Objet
Module 3 page 32
Nature du type REF pour un attribut
Un attribut peut avoir un type REF ce qui signifie quil est valu avec une rfrence ciblant un autre
objet. La REF permet dassocier les objets de classes diffrentes dans une mme hirarchie de
classes (polymorphisme du Ref).
Le REF permet dimplanter le lien externe du Mnav.
La valeur de type REF est construite par le systme en incluant loid et quelques autres
mtadonnes de la table-objet .
Index: mcanisme daccs
Avec une rfrence, un objet est obtenu via la consultation par le noyau du SGBD de lindex cr
(automatiquement) sur les oid de chaque containeur (table-objet) et maintenu par le SGBD.
N.B. dans la technologie relationnelle:
Le ROWID joue un rle similaire au OID dans Oracle-Objet mais il nest pas un vrai oid ne serait-ce par le fait quil est visible,
rutilisable et manipulable directement. (mais non modifiable directement).
Page 17
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 33
Type REF
Une valeur de type REF rfre seulement un seul type objet (OT) via l'oid de l'objet
cibl. Lobjet-colonne na pas de oid donc ne pas tre rfrenc par indexation de
son oid! Sa persistance et son accs passent par ceux de lobjet hte!
Dans ce cours et par convention volontairement abusive :
La valeur Ref sera considre idem l'oid du moins en ce qui a trait son rle.
Le rle dvolu au type REF est d'amliorer la fonction de navigation avec le
langage de requte SQL. Par exemple, acclrer les jointures.
Le oid (son identit) est de prfrence (ou devrait tre) non visible et
obligatoirement non modifiable par programmation;
(variable selon les implmentations)
Modle Objet
Module 3 page 34
Rfrence un autre objet par loid obtenue par la fonction REF()
Create type service_t as object (nomS varchar(50)) /
Create table Service of service_t;
Insert into Service values(service_t(''analyse''));
Create Type employe_t AS Object (nomE varchar2(50), refService REF service_t ) /
Create Table Employe OF employe_t;
INSERT Into Employe values ( employe_t ('Jacques', NULL));
Insert Into Employe values(employe_t (Louise', (select REF(s) FROM Service s WHERE
s.nomS = ''analyse'')); ;
Select e.* FromEmploye e Where e.nomE ='Louise'';
Louise 0000220208424E801067C2EABBE040578CE70A0707424E801067C1EABBE040578CE70A0707
nomE*: varchar
refService
Employe: employe_t
nomS*: varchar
Service: service_t
Page 18
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 35
REF et lassociation UML
Lattribut de type REF est utilis pour implmenter lassociation de la classe UML.
Cl trangre et cl primaire dune table-objet:
- La cl primaire en objet nest pas essentielle pour concrtiser lunicit de lobjet car
loid distingue tout objet. Elle est cependant utile pour la recherche dun objet
particulier puisque loid est non accessible ou inconnu pour la recherche.
- La cl spcifie est une contrainte dentit (toutes les valeurs sont donc distinctes)
La cl trangre est implmente via le lien de rfrence: REFERENCES qui peut
tre aussi dfini en objet.
Modle Objet
Module 3 page 36
Classe et table-objet
Classe: a un type dont les instances auront un oid (logique).
Ex: La classe Employe aura le type de ses objets soit employe_t
3 sortes de tables
1- **Table-objet dont les lments sont des objets pouvant contenir
dautres objets dits objets-colonnes.
2- table-objet-relationnel dont les tuples peuvent contenir des objets et
des tuples en cohabitation avec un SGBD OR
3- Table relationnelle dont les tuples ne sont pas des objets mais
pouvant aussi avoir des objets-colonnes de type objet. (Ignore dans
ce cours)
Une table-objet est physiquement place dans un TableSpace (TS)
Page 19
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 37
Containeur dobjets : table OR
Les objets sont stocks dans des containeurs (ou container) que sont les tables-objets
de la technologie objet-relationnelle de Oracle:
Containeur Table OR (environnement Oracle)
Une table-objet est associe une classe i.e. un type gnralement complexe qui faonne les
objets du conteneur.
Rappel de la convention dcriture:
Le nom d'une table dbute par une lettre majuscule et son type gnralement
complexe est compos de son nom dbutant par une lettre minuscule et suffix par _t
Exemple: La classe externe Employe a un type employe_t:
employe_t := (nom: string, age :int, salaire: real)
Modle Objet
Comment sont stocks les objets sur disque?
38
Page 20
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 39
TableSpace: page et objet
Plus il y a dobjets dans une page, plus rapide est la recherche des dits objets.
Le tableSpace est lunit de gestion de lespace physique:
base objets <====> fichier(s) pagins <====> fichiers OS
Tablespace x + 1
9 objets/page 6 objets/page
4 objets/page
Tablespace x
page
objet
9 objets/page 6 objets/page
4 objets/page
Modle Objet
Module 3 page 40
Rappel sur les tableSpaces de Oracle (TS)
tables, index, <==> fichier(s) physique(s) pagin(s) <==> pages de 4Ko, 8Ko, 16Kotablespace(s)
<==> fichier(s) pagin(s)
A la cration, la base a quelques tableSpaces : System, Temp, User, Dautres sont crs au
besoin et nommes par le DBA:
Ex: Create tablespace ts_employeActuels datafile '/dbf1/ts_sth.dbf' size 32m autoextend on
next 32m maxsize 2048m extent management local;
System: pour le traitement, Temp : pour les tris, User: pour tables utilisateurs
Si la cration dune table:
Aucune mention du TS : le tableSpace User par dfaut
Avec mention dun TS: les objets sont crs dans celui-ci
Create table T1 of type T1_t (a int, b int, c varchar(50)) (tableSpace User);
Alter table T1 Move tableSpace espace_de table_T1;
Create table Inscription of inscription_t (TableSpace TS_Registraire) ;
(table cre dans le tableSpace TS_Registraire)
Page 21
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 41
Ensemble imbriqu dans une classe (classe interne)
Un attribut ensembliste est spcifi avec Oracle comme (non pas comme un set) mais comme
une Nested Table stocke par dfaut dans le mme tableSpace que celui de la table hte.
Placement dun containeur dans un tableSpace:
CREATE TABLE Etudiant of etudiant_t NESTED TABLE lesCours STORE AS Table_lesCours
(TABLESPACE TS_Registraire2013);
(La table-objet Etudiant et la collection imbrique lesCours sont crs dans le TS Registraire2013)
Une nested table bien que stocke comme une table physique spare, cohabite par dfaut
avec sa table mre dans le mme tablespace.
Plus de dtails venir sur la table imbrique
Etudiant: matricule: varcher() nom: varchar() lesCours : lesCours_t
Modle Objet
Module 3 page 42
Gestion des tables physiques au regard des TS
Dplacement dune TS vers une autre TS:
ALTER TABLE Etudiant MOVE TABLESPACE Registraire A2013
Dplacement dune collection imbrique (sous-table) vers une autre TS:
Ce dplacement est possible car lensemble imbriqu est physiquement spar de la
table-objet.
Il faut utiliser le nom de la nested table assign par la clause STORE AS:
ALTER TABLE Table_Les Cours MOVE TABLESPACE Cours2013;
Page 22
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 43
Signature associe aux types de classes (externes et internes)
Linterface est spcifie intgralement et solidairement ( important) dans le type
Un type peut avoir des procdures (mthodes) pour manipuler les donnes
du type. Les types (avec leurs mthodes) peuvent tre partags entre plusieurs
classes.
Solidairement: chaque ajout ou suppression dune mthode, toute linterface doit
tre recre pour quelle soit modifie!
Chaque mthode a une signature dfinie dans le type.
Signature := nom de la mthode et les paramtres typs, incluant celui de retour
Exemple:
Calcul de la marge sur un produit: (une fonction est utilise)
marge (cout: real, facteur: int, lieu varchar) : real (syntaxe thorique)
Modle Objet
Module 3 page 44
Dpendance entre les types
En objet les types complexes sont extensibles:
Create type adresse_t as Object (no int, rue varchar2(50)) --sans signatures
/
Create type coordonnees_ t as Object ( no int , adr1 adresse_t) /
Create type localisation_t as Object ( coordGPS int, region coordonnees_t) /
dpendance: localisation_t - coordonnees_t adr_t
Voir Describe localisation_t -- pour obtenir une description avec les types imbriqus.
.
Imbrication des types et des tables: (Oracle 8, limite 1, illimite avec les versions
rcentes: 11g et +.
Page 23
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 45
Actions combines sur le type et leurs effets sur les objets stocks
2 ajouts et 1 suppression:
ALTER TYPE t1_t ADD ATTRIBUTE attr1 NUMBER, DROP ATTRIBUTE attr2,
ADD ATTRIBUTE attr4 NUMBER,
MODIFY ATTRIBUTE attr5 char(6) CASCADE option ;
Un attribut ne peut-tre modifi quune seule fois dans un mme ALTER TYPE
Un attribut hrit ne peut pas tre supprim sauf dans sa classe source.
Options:
INCLUDING TABLE DATA : conversion des objets dj cres. (le dfaut)
NOT INCLUDING TABLE DATA : La colonne de lattribut de lobjet est marque UNUSED. Idem
pour les donnes de la table ou celles stockes lextrieur.
Suppression des colonnes dont le type a t modifi:
ALTER TABLE DROP UNUSED COLUMNS : pour supprimer les attributs marqus unused.
Modle Objet
Module 3 page 46
Oprations avec les types: cration, suppression,
Cration d'un type:
Create or Replace type .. as Object ()
/
Aucun type dfinir avec les types primitifs : Boolean, rowid, Long, Long Raw,
Description d'un type : Directive Describe fournit les attributs et leur type
Desc [ribe] personne_t ;
Suppression d'un type:
Drop type personne_t [FORCE| VALIDATE];
Synonyme du type : Create Synonym inventaire_t FOR stock_t;
Page 24
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 47
Rappel: objet de table (OT) et objet colonne (OC)
Oracle gre (absent avec les autres systmes) 2 types dobjets :
Objet de table : objet typ limage du containeur et ayant un oid
Objet-colonne (sans oid):
un objet dune classe interne correspond un objet-colonne logiquement
incorpor dans un objet de table. Ex. adresse adresse_t
Un attribut de type ensemble regroupe des objets-colonnes. Si ltudiant a
plusieurs adresses : lattribut lesAdresses est de type ensemble dont les
lments sont des objets-colonnes.
Ex: Create type etudiant_t as object ( mat int, nom varchar(50), adresse adresse_t);
Une instance du type etudiant_t donne un objet contenant une instance de lobjet-colonne adresse_t.
Modle Objet
Module 3 page 48
Dfinition du type ensemble dans le systme O2
Intuitivement et avec le systme objet O2 : (autorisant le shadowing)
Create class Etudiant as object ( mat int,
nom varchar(50), lesAdresses Set of (adresse_t));
O adresse_t est un type crer.
Comparaison avec Oracle:
Create type etudiant_t as object ( mat int,
nom varchar(50), lesAdresses lesAdresses_t);
o lesAdresses_t est un type densemble qui sera rendu par une table imbrique spcifie par
une syntaxe deTable Of (syntaxe venir)
Page 25
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 49
Description du type et ses types composants
SET describe depth 2 -- commande Sqlplus pour contrler le niveau de lecture de la structure
Describe employe_t
NOM Null type
MAT NUMBER(32)
NOM VARCHAR2(40)
ADRESSE ADRESSE_T
NO NUMBER(38)
RUE VARCHAR2(40)
VILLE VARCHAR2(40)
Modle Objet
Module 3 page 50
Objet persistant (objet non persistant)
Objet persistant := une paire (oid, valeur ou objet typ)
oid est l'identifiant unique d'un objet (Object Identifier);
Le oid est gnr par le systme (auto) ou gnr selon des contraintes
formules par le DBA.
Loid ne change pas durant le cycle de vie d'un objet. Il est aussi inscrit
dans la structure de lobjet. Loid limite donc le nombre total dobjets dans la base.
Valeur type
oid
Interfaces
Objet non persistant na pas de oid; cest alors un objet transitoire.
Un objet cr par le NEW de PL/SQL est transitoire et devient persistant seulement lorsque
insr dans un containeur i.e. dans une table ou dans un autre objet persistant.
N.B. Loid est affich uniquement avec lapplication SQLPlus.
Objet persistant
Interfaces
Valeur type
Page 26
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 51
Objet transitoire sans oid
Create type moteur_t as object(no varchar(10), puiss int, poids int)
/
Create table Moteur of moteur_t;
Declare --applicatif
v_moteur moteur_t; -- type dun objet
Begin
v_moteur := NEW moteur_t('FG45S', 300, 1); -- oid absent,donc non persistant
Insert into Moteur values(v_moteur); -- objet rendu persistant avec un oid
v_moteur := NEW moteur_t('FG38', 100, 1); -- disparition de lobjet avec la fin de la procdure
End;
/
2 objets crs dont un seul, le premier rendu permanent (et stock) avec son oid.
Modle Objet
Module 3 page 52
Oid rang comme un attribut cach
O est stock loid dun objet?
Il est stock comme un attribut cach de lobjet dont le nom est
SYS_NC_OID$. Cest gnralement une valeur binaire de 16 octets (32 hex).
Exemple avec SqlPlus:
Select SYS_NC_OID$
From Moteur m
Where m.puiss < 500;
SYS_NC_OID$ .
0627D6A9CEC34BEAB03D7F9D9B6F0D3B ( 32 hex 16 octets)
Impossible cependant de le manipuler et de lImprimer avec une variable objet!
Page 27
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 53
Mutation des oid : oid logique (ref) et physique
Loid est augment pour devenir le oid-L au sens quil ne correspond pas une adresse
physique de la RAM, ni sur disque. Nous lidentifierons comme oid-L (logique).
Loid-L est transform par le noyau du SGBD pour y associer loid-P ds la 1re lecture de
lobjet (swizzling) et son placement dans la RAM du serveur.
La table de correspondance entre loid-L (persistent) et loid physique (variable) est gre
dans la cache du noyau du SGBD (pour un serveur de pages ou un serveur dobjets).
Oid-L: oid + no de fichier, no page et un dplacement dans la page + oid type classe. Une
table est construite avec les oid-L.
Oid-L: oid vol page Offset oid type
classe
Oid-P
3A6F... 5 234 324 3FB2 FE245
Oid-P
Donnes de lobjet
FE245 donnes de lobjet
Loid-L est une REF qui a une taille plus importante que celle du oid-P.
Loid-P doit demeurer inchang aussi longtemps que lobjet nest pas rapatri de la cache vers
le disque. Ce qui signifie que les pages dobjets dans la RAM sont cloues (pinned pages)!
Dans la RAM:
REF
Modle Objet
Module 3 page 54
Oid physique et swizzling (mutation)
Tous les objets transfrs en RAM (du serveur) ont leur oid-L muts (swizzled) immdiatement.
La structure dun objet sur disque est diffrente de celle en RAM afin de tenir compte des
structures physiques particulires de chaque langage et de chaque machine (machine dependant object
structure)
Lorsquun objet est r-crit sur disque, la d-mutation nest pas ncessaire car le oid-L est
toujours intact dans lobjet.
CAS SPCIAL: Partage du mme type dans 2 bases distinctes (sur une mme machine)
Chaque type est aussi un objet qui a son propre oid. Pour le partager entre 2 bases, il faut recrer le type
avec le mme oid dans les 2 bases:
Gnration dun oid pour le type dans une base:
SELECT SYS_OP_GUID() FROM DUAL;
SYS_OP_GUID()
19A57209ECB73F91E03400400B40BBE3
Cration du type personne_t dans les 2 bases:
CREATE TYPE personne_t OID '19A57209ECB73F91E03400400B40BBE3'
AS OBJECT (attrib1 NUMBER); (dans chaque base)
Page 28
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 55
Vue schmatique du swizzling :Transfert de lobjet en RAM
1- La page de lobjet oid8 sur disque est transfre vers la cache RAM du serveur. Ladresse
RAM de chaque objet de la page est inscrite dans une table OP
2- Par la suite, la table OP est consulte pour trouver ladresse RAM de loid-L oid8. Lcriture
se fait via la page vers le disque.
oid8
oid4
Objet
oid8
Pointeur RAM
OP (objet persistant)
Oid-L oid-P

oid2 FB234A
oid4 4AF2233
oid5 93422FF
oid8 F3B255
Pour accder une valeur de oid8 avec la variable objet x, il y a consultation de la table OP et accs
lobjet via ladresse RAM (oid-P) et finalement la valeur attrib1. Il y a en quelque sorte une indirection
dans laccs via la table OP. La table OP sagrandit et se retrcit avec le va et vient des pages dobjets.
Page sur disque
Dans la cache
RAM du serveur
(1)
(2)
x.attrib1
oid obtenu
de la REF
(3)
Page transfre en RAM
Modle Objet
Module 3 page 56
Gnration de loid
Loid peut tre gnr par le systme ou driv de la cl dune table.
L'oid peut tre aussi driv des donnes selon la spcification dfinie pour chaque table-
objet ( la gnration de la BD).
Nombre fini de oid? Mot de 64 bits ou 128 bits
--- la cration dun type gnre un objet ayant son propre oid
La REF est donc construite ainsi:
REF := oid + metadonne . (total de 42 octets) avec une machine de 32 bits
Les mtadonnes permettent au systme didentifier rapidement quelle classe dobjets un oid
appartient et cela en incorporant le oid du type de son containeur sans accder au conteneur.
NB: Une table relationnelle n'a pas de oid pour les tuples, mais un rowid rutilisable.
Page 29
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 57
Gnration de lOID Oracle : systme et driv
Implmentation de l'OID:
Ex: variable selon le systme: nombre sur 32 bits ou mieux sur 64 bits ( max objets 2
64
-
1 objets) ou +;
ORACLE: (oid gnr:16 octets = 128bits soit 2 mots de 64 bits par oid).
Choix fait lors de la cration de la table-objet:
Create Table Employe of employe_t ( contraintes ...) Object Identifier is
{SYSTEM GENERATED | PRIMARY KEY};
Indexation automatique des oids gnrs et des oid drivs.
Oid jamais rutilis (dans la mme base) : oid ne devrait pas tre un pointeur physique sur un
objet (sauf par swizzling lorsque les objets sont dans la RAM) dont l'espace peut tre
rutilis par un autre objet aprs suppression du premier. Finitude de l'espace objet!
Modle Objet
Module 3 page 58
Affichage de l'oid d'un objet: fonction REF( )
Affichage de l'oid d'un objet de la table Employe ( avec dautres donnes
daccompagnement):
Select Ref(e)
From EmployeP e
Where e.mat = 350;
00002 8BC6FCA7654DD687DDAC23 0845 (32 car. Hex ou 16 octets)
En objet, lalias est ncessaire
Strictement exig si la table Employe est
dclare avec un oid SYSTEM
GENERATED
Oid (Ref) visualis (cod en hexadcimal); ne peut pas tre modifi par programmation.
Affichage exceptionnel que par SQLPlus.
Affichage de la valeur de l'objet sans son oid :
Select Value (e) -- l'objet fournit sa valeur (sans oid )
From EmployeP e Where e.noE = 350;
Idem un objet non persistant!
Page 30
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 59
REF porte contrainte (scope)
Une rfrence occupe au total 64 octets (plus encombrant que le oid (16 o.)!)
Il est possible de dfinir des rfrences de 16 octets en dfinissant une rfrence
dite SCOPE.
Une telle rfrence ne cible que des objets dune table particulire pr-identifie
Au niveau de la table-objet:
refChef REF SCOPE IS Ouvrier
Avantage de la REF scope:
Une REF scope rfrence obligatoirement un objet de la table cible dite scope .
Modle Objet
Module 3 page 60
Constructeur dobjet de type table
Cration et insertion dun objettable avec SQL
** Le nom du constructeur est le type de la table.
Un objet est cr avec SQL au moyen de la clause INSERT INTO utilisant un
constructeur dobjet dit implicite qui exige une valeur pour chaque attribut:
Insert into Employe values (employe_t ('Picard', 24, 'des Lilas', 'Qubec') );
Lobjet cr est insr dans une table, le rendant persistant et lui attribuant un oid
permanent. Le mme objet dfini avec un type comprenant une classe interne pour
les objets-colonnes (avec 3 attributs):
Insert into Employe values
(employe_t ('Picard', adresse_t( 24, 'des Lilas', 'Qubec') ));
Page 31
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 61
Cration dun objet transitoire en PL/SQL
Cration et initialisation dun objet transitoire :
ex. : NEW employe_t ('Picard', 24, 'des Lilas', 'Qubec');
Un objet-transitoire :employe devient persistant lorsquinsr dans une table-objet.
Les objets sont manipuls en PL/SQL par des variables de mme type que ceux de la BDO:
v_employe_t : = NEW employe_t ('Picard', 24, 'des Lilas', 'Qubec');
*** Couplage fort entre PL/SQL et le DD du SGBD Oracle.
Idem avec un attribut de type ensemble (pour la classe interne) :
v_employe_t := NEW employe_t ('Picard', 24, adresse_t( 'des Lilas', 'Qubec'));
N.B. Il en est autrement avec les autres langages: la struct de lobjet est implment avec une struct du langage hte et est
gnralement beaucoup plus complexe.
Un objet est aussi cr avec un type lorsque le constructeur de type est appel par le NEW
de PL/SQL suivi du constructeur de type.
Modle Objet
Module 3 page 62
Pseudo shadowing
Cration de type incomplet et d'une rfrence inverse
c_t ( c1: int , c2: ref)
d_t ( d1:int , d2: ref)
La rfrence inverse est cependant possible en
utilisant un type incomplet.
Create type c_t -- type incomplet
/
Create type d_t as Object ( d1 int, d2 REF c_t) -- le type d_t est cr
/
-- mise jour du type incomplet par un Create :
Create type c_t as Object ( c1 int, c2 REF d_t) -- type complt
/
Utile pour les rfrences circulaires.
Avec Oracle, un type peut utiliser un autre type que sil est dj existant dans le DD.
Aucune dfinition anticipe, aucun shadowing de type.
Page 32
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 63
Exemple dun type mutuellement dpendant
CREATE TYPE employe_t AS OBJECT ( nomE VARCHAR2(20), dep REF dep_t)
-- le type dep_t est absent de la base
/
** ERREUR ***
CREATE or REPLACE TYPE dep_t AS OBJECT ( noD int, gerant REF employe_t) /
-- le type employe_t est absent de la base
*** IDEM***
Le type employe_t ne peut pas tre cr car le type dp_t nexiste pas. Idem pour le type dep_t
La solution est dutiliser un type incomplet:
Create type dep_t -- un type incomplet na aucun attribut
/
Par la suite il faudra le complter par un Create (et non un update):
Create type dep_t as Object (noD int , gerant REF employe_t)
/
Modle Objet
Module 3 page 64
Visibilit des attributs et Encapsulation
Encapsulation des objets : Les donnes sont manipules que par les mthodes sans
notion de visibilit explicite pour les attributs et les mthodes contrairement la
visibilit implants dans les L3G objet ou avec les SGBD objets qui adhrent la
norme ODMG.
*En Oracle , le droit d'accs est accord un usager via le type. L'utilisateur voit
tout : les attributs et mthodes du type sur lequel il a les droits.
Les mthodes sont prsumes toujours prsentes dans le diagramme de classe, mme
si elles sont absentes dans les exemples UML et Mnav et cela , pour des raisons
pratiques dallgement des figures.
En principe, un objet de table-objet devrait se comporter comme un vritable objet
de classe et tre accessible que par son interface. (Rappel)
-Une signature est la liste type de ses paramtres incluant sil y a lieu, celui de retour.
- Linterface de classe est l'ensemble de ses signatures.
Page 33
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 65
Comparaison entre les modles Relationnel et Objet
Le nombre de types dans le Relationnel est environ 15.
En objet, nombre illimit (car il y a les TAD ou les UDT).
Le R est bas que sur les valeurs pour implmenter les associations entre tables :
partage d'attributs ayant un mme domaine. Lobjet utilise les REF pour la
navigation entre les classes et parcourir les associations. La jointure par valeur nest
cependant pas interdite.
En R, la contrainte rfrentielle peut tre implmente par la cl trangre FK; en
objet pas de FK obligatoire, la contrainte est remplace par le REF.
A la cration d'un objet et son insertion dans une table (type et avec oid), la
persistance est assure.
Le oid est mut en pointeur physique dans la RAM : le swizzling acclre l'accs aux
objets. Cette transformation est gre par le SGBD.
* Une rfrence perdue est une rfrence dangling (danger dincohrence) Elle pointe
sur un emplacement ne correspondant pas un objet.
Modle Objet
Module 3 page 66
Implmentations de quelques modles navigationnels avec
la technologie de lobjet
Page 34
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 67
Du diagramme de classe UML au Mnav (Rappel)
Transposition du navigationnel l'objet:
Essentiellement la cration des types et des containeurs
Instantiation dobjet:
La classe externe instantie un objet qui sera stocke dans une table-
objet, tandis que la classe interne instantie des objets-colonnes (OC).
Les contraintes de multiplicit ne sont pas toutes renforces par le
Mnav (objet). Il faut avoir recours la logique propre des mthodes
pour complter la validation notamment celles des multiplicits.
Modle Objet
Module 3 page 68
Implmentation de lassociation (1..1 1..1) en Objet
EmployeP:
noE*: int
nomE: varchar(50)
Domicile:
no*: int
rue : varchar(50)
telD : varchar(8)
1..1
1..1
n.b. 1,1 1
Exemple: implantation dun modle UML simple avec des multiplicits contraignantes:
A_un >
En raison des multiplicits 1..1
Lajout dun domicile est possible que si les contraintes du modle sont
vrifies la fin de la transaction logique dajout.
Page 35
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 69
Mnav: implantation des associations avec REF (OR)
REF : une rfrence vers un ou des objets dune classe .
Create type domicile_t as object ( no int, rue varchar(30), telD varchar(8))
/
Create type employeP_t as Object (noE int, nomE varchar(50), refAdresse REF domicile_t)
/
Create table EmployeP of Type employeP_t -- cration du containeur dobjets (de la table)
La contrainte (not null) sur refAdresse reste dfinir ou sera renforce par la mthode dajout.
*** La REF doit toujours avoir un valeur valide pour renforcer la multiplicit.
EmployeP : employeP_t
noE*: int
nomE: varchar(50)
refAdresse
Domicile : domicile_t
no*: int
rue : varchar(50)
telD : varchar(8)
Modle Objet
Module 3 page 70
Dfinition des contraintes
Les contraintes sur les attribut et celles dfinies avec plusieurs
attributs se dfinissent au niveau de la table i.e. du containeur.
Page 36
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 71
Les contraintes dfinies sur les objets au niveau des tables
Une contrainte est toujours dfinie via la table et non au niveau du type. Ce dernier
est partageable avec d'autres tables qui n'ont pas ncessairement les mmes
contraintes mme si elles partagent le mme type.
Contraintes de table: cl primaire, cl trangre, Unicit, Check,
Create table Employe of employe_t
(Constraint pkEmploye Primary Key (mat),
Constraint c_salaire Check(salaire is not null and salaire < 99999.00)
);
Rappel:
La dfinition de cl est INTERDITE via le type: (est dfinie au niveau de la table)
Create type employe_t (mat int, salaire number (8,2),
Constraint pkEmploye Primary Key (mat)
/
Modle Objet
Module 3 page 72
Cration de la table-objet avec des contraintes
REF : une rfrence vers un objet est construite avec l'oid.
Create table EmployeP of type employeP_t
( constraint pk_noE primary key (noE),
constraint c_nomE check ( length (nomE) <= 50),
constraint c_refAdresse check ( refAdresse is not null) ,
constraint c_verifEmpl check (noE * length (nomE) ) > 56000));
Create table Domicile of type domicile_t ; -- aucune contrainte dfinie
La multiplicit (1,1) pour Domicile nest donc pas renforce avec ce Mnav
EmployeP : employeP_t
noE*: int
nomE: varchar(50)
refAdresse
Domicile : domicile_t
no*: int
rue : varchar(50)
telD : varchar(8)
Contrainte de table
vrifie en dernier
Page 37
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 73
Insertion en violation de multiplicit dun objet de type Domicile
Insert into Domicile values
( domicile_t(500, "des Lilas " , '41854506787 ' ));
Le commit implicite (le dfaut) la fin du DML fait en sorte que lajout de cet
objet se fera en violation de sa multiplicit i.e. que le domicile ne sera pas
associ un employ comme lexige le modle! Il faudra le faire avec un
update de lattribut de rfrence sans avoir comme dans cet exemple, la
garantie de latomicit des actions: Insert + insert
Solutions :
A- Faire linsertion de lemploy et de son domicile avec deux DML Insert mais
dans la mme transaction dfinie dans lapplication avec report de la vrification
des contraintes par le noyau.
B- Faire lajout du domicile et de lemploy par une seule mthode exigeant
aussi la dfinition dune transaction au sein de la mthode.
Modle Objet
Module 3 page 74
Association: Interrogation avec navigation par le REF
Navigation possible entre les tables en utilisant le type REF: formulation d'une requte
plus simple et calcul plus rapide .
Select E.nomE, E.refAdresse.telD
From EmployeP E
Where E.refAdresse.rue = 'desPignes ;
Multiplicit 1..1 du ct Domicile:
La contrainte sur refAdresse exige de rfrer un et un seul objet de Domicile.
Une contrainte IS NOT NULL tant dfinie sur lattribut refAdresse. Lajout dun employ doit se
faire obligatoirement avec un domicile! N.B. Lutilisation de lalias est obligatoire.
EmployeP : employe_t
noE*: int
nomE: varchar(50)
refAdresse
Domicile : domicile_t
no: int
rue : varchar(50)
telD : varchar(8)
Chemin de navigation
Page 38
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 75
Interrogation avec une slection exploitant la navigation
** La colonne refAdresse nest pas une donne de lusager => cart avec le relationnel
Select E.nomE, E.refAdresse.telD
From EmployeP E
Where E.refAdresse.rue = 'desPignes
and E.refAdresse.no = 450
and E.noE = 100;
Cette navigation est rendue possible par loid
Renforcement de la multiplicit 1..1 du cte EmployeP avec ce Mnav:
Par la mthode dont le code permet de vrifier qu lajout dun domicile, il y a
obligatoirement un employ et un seul qui lhabite.
Modle Objet
Module 3 page 76
Autre Mnav quivalent: une ref vers Employe
EmployeP : employe_t
noE*: int
nomE: varchar(50)
Domicile : domicile_t
no: int
rue : varchar(50)
telD : varchar98)
refEmp
Select d.refEmp. nomE, d.telD
From Domicile d
Where d.rue = 'desPignes
La multiplicit 1..1 de la classe Domicile renforce par la ref qui ne peut avoir
quune seule valeur non nulle.
Avec une seule ref, une seule multiplicit est donc renforce!
La multiplicit (1,1) pour Employe nest pas renforce avec ce Mnav autrement
que par une mthode.
Page 39
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 77
Mnav avec deux REF (parcours non privilgi) et type incomplet
REF : une rfrence vers un objet, construit avec l'oid.
Create type employeP_t / -- type incomplet
Create type domicile_t as object ( no int, rue varchar(30), telD varchar(8), refEmploye REF
employeP_t) /
Create type employeP_t as Object (noE int, nomE varchar(50), refAdresse REF domicile_t)
/
EmployeP : employeP_t
noE*: int
nomE: varchar(50)
refAdresse
Domicile : domicile_t
no*: int
rue : varchar(50)
telD : varchar(8)
refEmploye
Les multiplicits (1,1) pour Employe et Domicile sont renforces (via la dfinition des
contraintes au niveau table) au prix dune gestion plus complexe des ajouts,
suppressions et mises jour faites dans une mme transaction.
Modle Objet
Module 3 page 78
Mnav avec 2 rfrences : complexit accrue des actions sur le modle
Create table EmployeP of employeP_t (constraint c_refAdresse check ( refAdresse
is not null));
Create table Domicile of domicile_t ( constraint c_refEmploye check (refEmploye si
not null));
Insert into EmployeP e values (employeP_t( 109, Jules,null));
Insert into Domicile values (domicile_t(567, des Fleurs, 3456789, null));
Update EmployeP e set e.refAdresse = (Select ref(d) from Domicile d Where d.telD =
3456789) Where e.noE = 109;
Update Domicile d set d.refEmployeP = (Select ref (e) from EmployeP e where e.noE = 109)
Where d.no = 567;
N.B. Avec 2 refs, les deux multiplicits peuvent tre renforces dans une mme
transaction avec report de la validation des contraintes. La mise jour du modle
devient plus complexe et doit se faire dans une transaction non interruptible.
Interdit pas la contrainte
Page 40
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 79
Commentaires sur lusage des 2 rfrences inverses
1. Avec 2 rfrences obligatoires les 2 multiplicits 1..1 sont renforces dans une mme
transaction avec report de la vrification des contraintes.
2. La non interruption (une proprit ACID) dans un contexte daccs concurrentiel (multi
usager) exige que ces actions soient intgres dans une transaction du genre TL
(Transaction Logique) dfinie par le dveloppeur. (voir plus loin comment dfinir une TL)
3. Tout ajout dun objet doit tre suivi (sans interruption) de celui dun autre objet: lajout dun
employ doit tre suivi de lajout dun domicile et dans les 2 cas les rfrences sont nulles.
Les ajouts se font dans la mme TL.
4. Les insertions dobjets doivent tre suivies sans interruption par 2 ordres Update de la
rfrence donc dans la mme TL
5. Cette complexit est cependant masque au dveloppeur si les clauses sont intgres
dans une mthode dfinissant une transaction et cela avant deffectuer cette mise jour.
Modle Objet
Module 3 page 80
Les transactions avec les objets
Les proprits ACID dune transaction doivent tre renforces par le
moteur SGBD, notamment avec les objets:
1- Atomicit: tout ou rien
2- Cohrence prserve : avant et aprs la transaction
3- Isolation: transaction excute comme si elle tait seule
4- Durabilit (persistance): au commit (validation) dune transaction
les donnes modifies ou ajoutes sont persistantes.
Pour y arriver, le SGBD a un systme de verrous utilis selon un
algorithme prcis pour autoriser la concurrence sans interfrence
avec les autres transactions.
Page 41
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 81
Cohrence et transaction logique
Un modle reprsente les objets dans leur tat stable i.e. quil modlise ltat de lensemble des objets un
moment t lorsquil y a aucune action ou manipulation en cours.
Transaction logique (TL)
Les manipulations des objets (ajout, mise jour et suppression sur un ou plusieurs objets de
classes diffrentes) sont excutes par une suite dactions lmentaires non interruptibles
prsumant la validation ultrieure russie des contraintes, notamment celles des multiplicits.
Exemples:
Ajout dun employ : une seule action dinsertion dans la BD compose la transaction
logique; la fin de cette action les contraintes de multiplicit seront vrifies et la BD est laisse
dans un tat stable et cohrent.
Ajout dun employ et dun dpartement dans la mme transaction logique; la fin de la TL les contraintes de
multiplicit seront vrifies.
Important:
Si la cohrence est mise en pril, la TL doit tre annule. Le principe du Tout ou Rien sapplique!
Modle Objet
Module 3 page 82
Exemple dincohrence avec une TL
Professeur:
matP* : string
nomP : string
statutP : char
Cours:
noCours* : string
titreC : string
nbCr : integer
EstResponsable >
1..1 1..*
1- Si un applicatif veut ajouter seulement un professeur dans la base:
TL1 : Ajout professeur ( 'mat45 ', ' Tremblay, ' P') ;
Cet ordre Ajout constitue une transaction logique simple (implicite). Si laddition
est autorise par le SGBD, la base sera alors dans un tat incohrent au regard
du MCD dont la multiplicit est 1..1 du ct Cours.
Il faut ajouter obligatoirement un cours au prof dans la mme transaction
avant la vrification des contraintes du modle objet par le noyau du SGBDO.
Page 42
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 83
Actions dans le cadre dune transaction logique
2- Si les deux actions sont incorpores dans une mme transaction logique soit:
TL2: Ajout professeur ( 'mat45 ', ' Tremblay ', ' P ') ;
Ajout cours values (45, ' C++ ', 3);
** la cration de la rfrence est suppose se faire dans cet exemple
A la fin de la TL2, la cohrence du modle est respecte (donc celle de la BDO) parce
que les multiplicits sont valides conformment au modle. Cette cohrence dcoule de la
transaction logique (TL).
Dans le cas contraire, la transaction en cours sera dfaite (retour au point de cohrence de
Dpart: atomicit)
Comment alors dfinir une transaction ?
Modle Objet
Contrainte Deferrable dfinie pour la table-objet
84
Create Table Stage of stage_t
(Constraint Pk_Stage Primary Key (noS) Deferrable, (1)
Constraint U_matricule Unique (matriculeE) immediate Deferrable, (2)
Constraint PK_non_null Check( noS is NOT NULL), (3)
Constraint FK_non_null Check( matriculeE is NOT NULL) Deferrable); (4)
(1 ) contrainte qui peut-tre reporte, mais louverture de la BDO, elle est active
(2) contrainte qui est reporte louverture de la BDO, elle est active
(3) contrainte non reporte, valide ds que lattribut est modifi
(4) contrainte qui peut-tre reporte, mais louverture de la BDO, elle est active
Page 43
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 85
Transaction logique et transaction physique
Une transaction logique devient une transaction (physique) avec un SGBDO particulier par un
marquage spcial du dbut et de la fin de la transaction. Ce marquage varie selon le SGBD.
Avec Oracle :
Dbut : lexcution dun 1
er
DML
Fin: Commit
Les contraintes de table sont vrifies qu la fin de la transaction
si et seulement si les contraintes de table dont dites reportables (Deferrable) dans
le schma de la BDO.
Le report de la vrification des contraintes du schma sapplique chaque transaction.
Exemple : SET Constraints ALL Deferred (pour toutes les contraintes reportables)
dans SqlPlus: SET Constraint c1_xxxxx DEFERRED ; -- avec contrainte nomme
SET Constraint c2_yyyyy DEFERRED ;
Dans lapplicatif PL/SQL:
Execute Immediate Set All Constraints Deferred;
Modle Objet
Module 3 page 86
Intgrit dune transaction avec la mthode
La cohrence peut tre assume deux niveaux:
Niveau mthode:
La logique interne dune mthode peut sous-tendre plusieurs actions et pour maintenir
la cohrence, la mthode doit dfinir la transaction sans gard lapplication.
ex.: dbut TL par la mthode Ajout objet
ajout dun objet o1;
ajout dun objet o2; - pour ainsi valider la multiplicit
fin de la TL par la mthode Ajouto1o2
Niveau application (source dincohrence?):
Lapplication a la responsabilit de maintenir la cohrence du modle en dfinissant le
dbut et la fin de la transaction.
ex.: dbut de la TL par lapplication
ajout objet o1;
ajout objet o2;
fin la TL par lapplication
**** Dans ce cas, le contrle sur la transaction assum par lapplication est une source potentielle derreurs.
Page 44
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 87
La cl primaire avec le modle objet
Loid gnr avec la cl primaire est plus compact que celui gnr par le
systme.
Un attribut de type REF avec un oid driv de la cl primaire est connue
comme une primary-key-based REF ou pkREF et occupe moins despace que loid
gnr par le systme.
Une REF du genre pkREF doit avoir une contrainte de type REFERENCES pour
viter les REFs indtermine (non valide) (dangling).
** dangling : rfrence qui ne pointe pas sur un objet valide.
Modle Objet
Module 3 page 88
Racine de persistance d'un objet de table (OT)
Un objet est cr dans un applicatif et devient persistant lorsque:
- insr dans une table type (OT):
Insert Into EmployeP values (v_empl);
Insert into EmployeP values (employeP_t ( 235, Paul, ..));
- insr dans un objet de table qui est persistant (le cas du OC). Dans ce cas lobjet
imbriqu na pas doid propre.
-- NB: Les objets des langages L3G objets ne sont pas persistants moins que le langage le soit i.e. gnre
et gre la cration d'objets persistants.
Page 45
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 89
Couplage avec le DD et r-Insertion dun objet avec Value()
Declare /* avec une proc PL/SQL dans lenvironnement sqlplus */
v_empl employe_t; -- variable pl/sql dont le type objet dfini dans le dictionnaire (DD)
-- Couplage fort entre le langage procdural et le dictionnaire de donnes
Begin
/* v_empl := NEW employe_t (234, Julie, null)) */
Select value(e) into v_empl from EmployeP e Where e.noE = 234; -- voir 1
Insert into EmployeLibere values (v_empl); -- voir 2 nouvel objet avec mme valeur

Delete Employe e Where e.noE = 234;


End;
/
1- recherche un objet par sa cl primaire. Chargement dans la variable objet v_empl mais sans son oid
2- chargement de lobjet dans la table EmployeLibere ce qui lui donne un nouvel oid; cest donc un nouvel
objet mme sil est idem par ses valeurs.
Modle Objet
Module 3 page 90
Accs un objet: Fonction DEREF()
La fonction REF(x) (o x est un objet) donne l'oid de l'objet x persistant.
De faon similaire, la fonction DEREF(a) (o a est une rfrence incluant le oid) rend l'objet
correspondant et l'assigne une variable du type de lobjet.
Exemple: applicatif PL/SQL:
Set serveroutput ON
Declare
v_ref REF client_t; -- var. de type ref
v_client client_t; -- variable objet de type client_t
v_clientA client_t
Begin
Select REF(x) Into v_ref from Client x Where x.matC = 10000;
Select DEREF(v_ref) Into v_clientA From Dual;
Insert into ClientAncien Values(v_clientA); -- partage du type client_t
DBMS_OUTPUT.PUT_LINE(v_clientA.nomC);
..
End;
/
Page 46
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 91
propos du type REF et le swizzling
La rfrence REF pointe sur (identifie) un objet sans gard son placement physique
sur le disque. (location independancy).
Rappel:
Le Ref ne peut donc pas pointer directement un objet dans la RAM comme un
vritable pointeur physique sait le faire.
Un objet dans la cache RAM voit ses Refs transformes en pointeurs physiques
pour acclrer l'accs: c'est la transformation ou mutation des Refs (le swizzling)
Cette mutation est prise en charge par le serveur (pour lapproche serveur
d'objets (Oracle). Dans un systme serveur de pages dobjets, la mutation peut tre
faite par un module install sur chaque client .
page
objet
Des objets sont changs entre lapplication et le
client
Modle Objet
Module 3 page 92
Dfinition claire et simple dune classe dobjets (Systme O2)
Dfinition d'une classe avec la technologie objet d systme O2 sans
rfrence explicite vers un objet.
Class Personne type
tuple ( nom : string,
age : integer,
conjoint : Personne,
enfants : set (Enfant),
ville : tuple ( nom: string, code : integer),
pays : Pays)
End;
Classe objet
* Structure complexe de type tuple.
Personne:
Enfant:
0..*
0..1
< Conjoint_de
Page 47
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 93
(cohabitation: objet avec technologie relationnelle)
Une table relationnelle peut maintemant contenir aussi un objet-colonne ((OC). Le
tuple de la table qui contient un OC nest cependant pas un objet!
Table-objet (table type):
Create Type bourse_t as Object (noB int, nomB varchar2(50))
/
Create Type etudiant_t as Object (nom varchar2(50), age int, bourse bourse_t)
/
Create Table Etudiant of etudiant_t; -- table-objet
Table relationnelle: Chaque tuple de la table na pas de oid!
Create table Etudiant (nas int, bourse bourse_t); -- table relationnelle avec OC
Cette dualit de la technologie permet de faire un passage en douce vers lobjet en prservant
lacquis relationnel!
Objet- colonne
Modle Objet
Module 3 page 94
Diffrentes initialisation des objets de table (Oracle)
Page 48
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 95
Insertion dun objet OT et OC avec Oracle
Objet de table (OT) cr et initialis dans un Insert en utilisant dun constructeur.
Cas 1: Un objet de table (OT) a le type dune classe du Mnav
Insert into Employe values
(employe_t(Dupont, 35, Qubec, 4000.00));
*** Le type de la table doit tre dfini au pralable:
Cas 2: Incluant un objet de colonne (OC):
Insert into Employe values (employe_t
(Dupont, 35, salaire_t( Qubec, 4000.00)));
Mme info range dans la table mais structure diffremment.
Modle Objet
Module 3 page 96
Interface OT et OC
Quelle est la diffrence entre les deux insertions prcdentes?
Dans les deux cas, la mme information est insre dans des tables objets mais
avec des structures diffrentes.
1
er
cas: lobjet peut tre trait que par les mthodes de linterface de OT
2
me
cas: lobjet de table ajout comporte un objetcolonne. Une manipulation
particulire de cet OC pourra se faire par son interface propre. Les mthodes
OT demeurent toujours disponibles pour les objets de la table.
Exemple :
Pour mettre jour les nom et salaire des employs. Linterface de la classe noffre
pas de mthode adquate pour modifier le salaire tandis que linterface de la classe
interne ou OC a une telle mthode.
Page 49
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 97
Procdure PL/SQL dinitialisation d'un objet de table (OT)
Create type employe_t as Object (no int, nom varchar(45), adresse varchar(60) /
Un objet est initialis sa cration soit:
Par des valeurs fournies au constructeur d'objet ou au NEW de PL/SQL
Ex. employe_t (Delphine, 35, 45000) -- cration avec le constructeur
Soit par dfaut selon les valeurs formules dans le schma objet
Si aucune valeur n'est fournie, il y a erreur.
Declare
v_emp emp_t; -- ce type est connu car prsent dans le DD
begin
v_emp := NEW employe_t( ); -- le constructeur na pas de valeur par dfaut.
insert into Employe values (v_emp);
End;
PLS-00306: nombre ou types d'arguments errons dans appel EMPL_T
v_emp := NEW employe_t(345, Gustave, null); Lemploy 345 na pas encore dadresse.
N.B. En Java un objet de travail est cependant cr avec des valeurs implicites par dfaut.
Modle Objet
Module 3 page 98
Mthode de l'objet OC
Un objet-colonne peut avoir ses propres mthodes. Le partage du type,
avec la cration d'une autre table-objet ayant le mme type de l'OC est
possible et les mthodes de OC du type deviennent alors celles de la
classe interne ou de la sous-table imbrique.
Les mthodes de linterface dun OC ne s'appliquent pas un objet nil ,
mais sappliquent aux objets NULL (ceux qui peuvent pas tre mis jour
par la suite).
Page 50
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 99
Cration et initialisation par dfaut des objets de table (OT) et des
objets-colonnes (OC)
Important
En mode exploitation, les cration, suppression et mise jour seront ralises
par des mthodes et non directement avec les DML comme dans les exemples
qui suivent.
Modle Objet
Module 3 page 100
Objet null et nil (atomically null)
Create type adr_t as object (no int , rue varchar(40))
/
Create type emp_t as object (nas int, adr adr_t)
/
Create table Emp of emp_t;
Insert into Emp values (emp_t(1, adr_t(null, null))); -- objet null qui peut tre mis jour
Insert into Emp values (emp_t(2, null)); -- objet null qui ne peut pas tre mis jour
Page 51
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 101
Exemple de mise jour des objets nils et nulls
Mise jour des objets nil et null
Create type adr_t as object (no int , rue varchar(40))
/
Create type emp_t as object (nas int, adr adr_t)
/
Create table Emp of emp_t;
Insert into Emp values (emp_t(1, adr_t(null, null)));
Insert into Emp values (emp_t(2, null));
Update Emp e set e.adr.no = 20 where e.nas=2;
Update Emp e set e.adr.no = 20 where e.nas=1;
Delete Emp;
SQL> Update Emp e set e.adr.no = 20 where e.nas=2;
Update Emp e set e.adr.no = 20 where e.nas=2
*
ERROR at line 1:
ORA-02309: violation de NULL atomique
SQL> Update Emp e set e.adr.no = 20 where e.nas=1;
1 row updated.
Modle Objet
Module 3 page 102
Affichage des objets de la table-objet et de ses valeurs
Affichage des objets OT dpourvus de leur oid mais avec leur constructeur:
Select value(e) From Emp e ;
** La fonction value() fournit lobjet sans oid. Le constructeur est affich avec sqpplus pour rappeler que cest un objet qui est
affich. Normalement, les objets tant lus et manipuls par une application au moyen de varaiables objets.
VALUE(e) (MATE, NOME, ADR(NO, RUE, VILLE))
EMP_T(1, 1 , NULL) -- objet OC nil est perdu jamais
EMP_T(2, ADR_T(null, null)) OC Null
Cas spcial: affichage avec SQLPlus:
Affichage des valeurs des objets OT sans leur constructeur.
Pour la mise au point des clauses SQL, il est possible dafficher que les valeurs:
SQL> Select * From EmployeSup;
MAT ADR(NO, RUE, VILLE)
1 ---objet nil
2 ADR_T(NULL, NULL)
Page 52
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 103
Cration et initialisation des objets: null et nil dans PL/SQL
Create type metier_t as Object(metier varchar2(25), classe char(1))
/
Create type employeU_t as Object (mat int, metier metier_t)
/
Application PL/SQL pour la cration:
Declare -- dans un bloc anonyme PL/SQL
v employe_t ;
n employe_t ;
o employe_t ;
Begin -- le constructeur implicite employe_t() exige une valeur pour tous ses paramtres.
v := NEW employeU_t(250, NULL); -- OC nil
n := NEW employeU_t (500, metier_t(null, null)); -- OC null
o := NEW employeU_t (500, metier_t('technologiste', 'A')); -- OC initialis
Insert into EmployeU values(o); -- objet o rendu persistant et assignation dun oid
End;
L'objet-colonne v est nil donc non modifiable. L'objet n est null et modifiable. L'objet colonne de o
est initialis par le constructeur.
Modle Objet
Module 3 page 104
Cas particulier: mise jour de l'objet-colonne (OC)
Avec Cration de lOC:
Update EmployeSup p SET p.adr = adr_t (99, null, null)
Where p.matE = 104; -- identifie 1 seul OT
SQL> Select * From EmployeSup;
MATE NOME ADR(NO, RUE, VILLE)
104 Desbiens ADR_T(99, NULL, NULL) -- OC est mis jour
101 Desbiens -- objet nil
Mise jour de l'objet OT 101 avec cration de lobjet colonne OC (matE = 101)
Update EmployeSup p SET p.adr = adr_t(88, null, null)
Where p.matE = 101;
MATE NOME ADR(NO, RUE, VILLE)
104 Desbiens ADR_T(99, NULL, NULL)
101 Desbiens ADR_T(88, null, null)
Page 53
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 105
Indexation et persistance des OT et OC (Oracle)
Objet de table: indexation automatique avec les oids drivs SYSTEM.
Cration avec le INSERT et un constructeur de type appropri.
Indexation de lobjet-colonne par valeur:
Insertion de l'objet hte dans une table rend son objet-colonne (qui n'a pas de
oid) persistant. Indexation des objets-colonnes est possible mais par valeur
i.e. pour chaque attribut de la classe interne.
Create index employeAdresse_idx on Employe(adresse.rue);
Attribut de lOC
Modle Objet
Module 3 page 106
Les triggers (Oracle) associs une table-objet: ses limites
Un trigger Oracle peut-tre associ une table-objet mais il y a des limites:
1- Un trigger ne peut pas dfinir normalement une transaction (donc se terminer par
un commit).
2- Un trigger ne peut pas tre associ une table imbrique (OC) soit la table
physique correspondant la nested table, ni un de ses attributs.
3- Aucun trigger ne peut aussi modifier un LOB.
4- Un trigger nest pas report (DEFERRABLE ) comme peut ltre les contraintes de
table et dattributs.
Leur usage est aussi restreint car il hypothque la performance du SGBD recherche
dans le cadre du paradigme objet.
Page 54
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 107
Suppression d'objets : plusieurs approches
Via la suppression d'une table : DROP Table Employe;
Entrane la suppression des objets, du containeur, des privilges et des index
ventuels dfinis sur cette table Employe.
Rend aussi inoprant les composants dpendants : dclencheurs (triggers), vues.
TRUNCATE TABLE Employe [DROP | REUSE STORAGE ]
Supprime que les objets sans supprimer le containeur ni crer de
segments de rollback. Nenregistre aucune entre dans une vue matrialise .
Les objets sont supprims mais lespace peut-tre conserv (REUSE
STORAGE).
Invalidation des objets par la suppression force d'un type
DROP TYPE employe_t FORCE;
Suppression, mme si dautres objets utilisent le type!!! Les objets restent dans la
base et sont temporairement invalides!!!
Modle Objet
Module 3 page 108
Quelques infos ranges dans le dictionnaire
Page 55
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 109
Dictionnaire Oracle des objets (DD)
Le dictionnaire est compos de tables-objets dont chaque objet dcrit
notamment les types. Celles-ci sont accessibles via les vues statiques
suivantes :
USER_COLL_TYPES : pour dcrire les collections (sous-tables)
USER_INDEXTYPES : pour dcrire les index
USER_TRIGGERS : pour obtenir le texte dun trigger
USER_TYPES : pour dcrire les types
USER_TYPE_ATTRS : pour dcrire les attributs des types
USER_TYPE_METHODS : pour dcrire les mthodes des types
USER_TYPE_VERSIONS : pour dcrire les versions des types
USER_SOURCE : dcrit notamment le texte des types dun utilisateur;
USER_TYPES
Select * from User_Types;
Select * From type_name, attributes, methods from User_Types;
Modle Objet
Module 3 page 110
Information sur les types avec le dictionnaire (DD)
La table (en ralit une vue) du dictionnaire, USER_TYPES fournit des informations sur la
hirarchie des types :
SQL> describe User_types --- fournit les attributs de la table User_tupes
Nom (attributs) NULL ? Type
TYPE_NAME NOT NULL VARCHAR2(30)
TYPE_OID NOT NULL RAW(16)
TYPECODE VARCHAR2(30)
ATTRIBUTES NUMBER
METHODS NUMBER
PREDEFINED VARCHAR2(3)
INCOMPLETE VARCHAR2(3)
FINAL VARCHAR2(3)
INSTANTIABLE VARCHAR2(3)
SUPERTYPE_OWNER VARCHAR2(30)
SUPERTYPE_NAME VARCHAR2(30)
LOCAL_ATTRIBUTES NUMBER
LOCAL_METHODS NUMBER
TYPEID RAW(16) (oid du type)
Select *
From USER_TYPES
Where type_name = 'ETUDIANT_T'; --- NB le nom du type est stock en majuscules
Page 56
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 111
Quelques tables utiles inscrites au dictionnaire
Le dictionnaire de donnes est prsent en RAM, charg avec la tableSpace
SYSTEM et ce ds le lancement du noyau du SGBD.
Schma des tables du DD:
Desc User_Object_Tables; -- pour les tables objets
Les tables objets sont affiches:
Select table_name
From User_Object_Tables;
Modle Objet
Module 3 page 112
Information pratiques sur les clauses de cration des objets
SQLPlus
Pour voir le texte source utilis pour crer (via le constructeur) les objets:
Sqlplus : SET long 600 -- affichage jusqu 600 caractres
Select * from User_Source ; -- liste de la dfinition des types
Affiche le texte:
Select name, text From User_Source Where name = VILLE_T;
NAME TEXT
VILLE_T Type ville_t As Object (noV int, nomV varchar(50))
Page 57
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 113
Recouvrement du texte dun trigger
Une table dans le dictionnaire appele user_triggers a un attribut :
trigger_body .
Il suffit donc de faire :
Select trigger_body From USER_TRIGGERS
Where trigger_name = le nom du trigger
Attention :
Lapplication SQLPlus affiche par dfaut que les 80 premiers caractres du
texte.
Il faut donc l'largir : avec la directive de SQLPlus: Set long 300
Modle Objet
Module 3 page 114
volution de la table-objet versus celle non type
Une table non type volue plus facilement :
ex. Ajout d'un attribut age dans la table non type Employe .
Raison: le MR normalis sous-tend la prsence d'un attribut non primaire
dans une seule table.
Cration d'une table temporaire avec le schma de Employe
Create table Tempo (matricule int, nom varchar(50) adresse adr_t);
Insert into Tempo Select * from Employe;
Cration de la nouvelle table : (Drop table Employe)
Create table Employe (matricule int, nom varchar(50) adresse adr_t, age int);
Rangement des tuples stocks dans la table Tempo ***:
Insert into Employe Select * from Tempo;
*** Les valeurs pour le nouvel attribut age sont absentes et reprsentes par des indicateurs
de NULL.
Page 58
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 115
volution du schma de la table-objet : Cascade
Plus difficile (?) en raison essentiellement du partage des types:
Ajout de age dans la table-objet Employe:
Il faut modifier le type employe_t avec des effets collatraux possibles:
Rpercussion possible sur d'autres tables-objets (du mme proprio) partageant le type
employe_t ou sur un autre type dfini avec employe_t (comme un sous-type).
Create table Employe of employe_t;
Alter type employe_t ADD Attribute age int CASCADE;
(recompilation du type par dfaut)
Modle Objet
Module 3 page 116
volution du schma de la table-objet
Describe employe_t;
Trs important en pratique:
*** la modification sur le type se fait directement dans le dictionnaire et non sur la
copie du type en cache. Pour lactualiser dans la cache , il faut quitter la session
SQL/Plus et se connecter nouveau au SGBD.
La cache est alors rafrachie.
Rpercussion suite un changement de type:
Si le type employe_t est utilis par des objets-colonnes :
cadreSup_t delegue_t chef_t
Page 59
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 117
Navigabilit et indexation avec les cls primaires
Par dfaut: toute association a un parcours bidirectionnel.
Il est possible de privilgier une direction par le symbole ou >
ClubDeSport :
noCS* : int
siteCS:
abonnementCS:
Abonne :
nasA* :string
nomA:
periodeA:
< Est_Inscrit
0..*
1..*
Navigabilit
Dans ce modle l'accs au club de sport peut se faire via un abonn autant que par un
club de sport. Au niveau du Mnav, il y a un lien multiple vers ClubDeSport.
Laccs labonn sera fait via un index dfini sur nasA. Idem pour un accs dans le
sens inverse.
N.B. Lajout dun nouveau club se fait dans une TL qui doit aussi comprendre lajout dau moins 1
abonn ce nouveau club! A la fin seulement de la TL, la multiplicit 1..* du ct Abonn
est ainsi vrifie.
Modle Objet
Module 3 page 118
Report de la validation des contraintes : DEFERRABLE
Contraintes de ce modle:
1. ** Lajout seulement d'un tudiant dans une TL sous-tend une violation de la
multiplicit 1..1!
2. La suppression de l'tudiant entrane celle de son stage.
3. Idem pour lajout et la suppression dun stage.
Pour valider ces contraintes il faut utiliser une TL avec report de la vrification des
contraintes.
Etudiant
matriculeE* : int
nomE : string
Stage:
noS* : int
themeS : string
respS: string
1..1
1..1
EffectueUn >
Page 60
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 119
Report des contraintes
Create type etudiant_t as Object (.)
/
Create type stage_t as Object ()
/
Create Table Stage of stage_t
(Constraint Pk_Stage Primary Key (noS) Deferrable, -- par dfaut immediate
Constraint U_matricule Unique (matriculeE) immediate Deferrable, (1)
Constraint PK_non_null Check( noS is NOT NULL),
Constraint FK_non_null Check( matriculeE is NOT NULL) Deferrable);
(1) La contrainte est en vigueur immdiatement au moment de la cration du schma, mais peut-
tre reporte par la suite dans une procdure.
Modle Objet
Module 3 page 120
Dfinition en PL/SQL de la transaction avec report des contraintes
Pour raliser ces ajouts dans lapplicatif il faut utiliser une TP et reporter la validation des
contraintes au Commit:
SET Constraints ALL Deferred; --En SQLPus ; toutes les contraintes Deferrable sont reportes y
compris le Check spcifi comme une contrainte de table.
SET Constraint c1_verif_asso_oblig DEFERRED ;
Dbut de TP: Insertion dun stage sans titulaire tudiant;
Begin
Execute Immediate Set Contraints ALL Deferred ;
Insert into Etudiant values (etudiant_t( 200, 'Jacques' null));
/* Insertion dun tudiant titulaire du stage 120: */
Insert into Stage values (stage_t(120. testing, S. F.));
Update Etudiant e Set e.refnoS = (select REF(s) From Stage s where s.noS = 120)
Where e.matriculeE = 200;
COMMIT lancement de la validation de toutes les contraintes;
End;
Aprs le commit, toutes les contraintes sont ractives.
Ou par lexcution du Execute Immediate: Set constraints immediate; ractive toutes les contraintes
Une telle transaction sera ventuellement encapsule dans une mthode.
Page 61
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 121
Implantation du lien multiple: interne et externe
Table imbrique
Modle Objet
Module 3 page 122
matricule *: int
nom: varchar
lesSalnet
Employe: employe_t
annee: Date
salNet : real
Salnet : sal_t
SalNet: salnet_t
annee: int
salNet : int
Employe: employe_t
matricule *: int
nom: varchar
lesSalnet
M2
Liens multiples : interne et externe
M1
M1: avec une classe interne; M2 : avec une classe externe
Quelles sont les caractristiques de chaque modle au regard de linsertion , la
suppression et de la modification ?
LesSalnet est un attribut densemble dont
les lments sont des rfrences la
classe externe salNet. lesSal := { salNet_t}.
Ce lien multiple peut tre ralis avec une
classe interne pour les rfrences.
Page 62
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 123
Caractristiques des deux modles navigationnels
Action sur la
calsse Employe
M1 (1 classe avec imbrication) M2 (2 classes)
Ajout Ajout 1 employ sous-tend
aussi lajout dun salaire.
Idem mais avec un change ventuel
de pages dobjets pour obtenir les
salaires.
Modification Sous-tend la lecture des objets
de Employe et de Salaire dans
un mme accs: partage possible
de la mme tablespace mais de pages
diffrentes.
Sous-tend la lecture seulement de
lobjet modifier: :employe
Suppression Une lecture et une
suppression de lemploy et
salaire.
2 lectures + suppression pour la
mme opration
Modle Objet
Module 3 page 124
Reprsentation tabulaire de M1 avec une table imbrique
matricule* :int nom :varchar(50) lesSalnet: lesSalnet_t
1234 Savoie
1456 Lachance
annee salNet
2000 45K$
2001 46K$
2001 46K$
1. La table-objet type par employe_t a 3 attributs: matricule, nom et lesSalnet;
2. Chaque attribut a un nom et un type.
3. L'attribut lesSalnet correspond une classe interne donc un ensemble dont
chaque lment a comme les attributs: [annee et salNet] . Chaque objet identifi
par un matricule incluant un ensemble dobjets de type lesSalnet_t.
Employe: employe_t
Une 1
re
collection (set)
Avec lesSal_t := { sal: sal_t}
Page 63
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 125
M1 : Objet de table comportant une Collection (dobjets)
La table prcdente Employe contient 2 objets :
Le 1er objet de table : a une collection forme de deux objets-colonnes :
oid1 : [1234, 'Savoie', { [2000, 45K$], [2001, 46K$]}
le 2e objet a aussi un OC form avec une collection compose dun seul objet-
colonne.
oid2 : [1456, 'Lachance', { [2001, 46K$] }
Modle Objet
Module 3 page 126
Cration des tables pour M1
Create or Replace type salnet_t as object (annee Date, salNet number (8,2))
/
Create type lesSalnet_t AS TABLE OF salnet_t
/
Create type employe_t as object ( matricule int , nom varchar(40), lesSalnet lesSalnet_t)
/
Cration du containeur:
Create table Employe of employe_t NESTED TABLE lesSalnet STORE AS Table_lesSalnet ;
Page 64
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 127
Ajout de OC dans la table imbrique de M1
Insert into Employe values (employe_t(1234, 'Savoie', lesSalnet_t (
salnet_t(to_date(2000,'YYYY'), 45000),
salnet_t(to_date(2001,'YYYY'), 46000) )
));
Insert into Employe values (employe_t(1456, 'Lachance', lesSalnet_t(
salnet_t(to_date(2001,'YYYY'), 46000)
)));
Les objets-colonnes sont imbriqus dans la table hte. La suppression dun objet de
table Employe entrane aussi lhistorique de ses salaires.
Modle Objet
Module 3 page 128
Reprsentation de M2 avec une classe externe pour lhistorique des salaires
Description graphique de la table type employe_t avec des rfrences REF dfnies comme un attribut dune
table imbrique des rfrences.:
Matricule* :int nom :varchar(50) lesrefSal: lesrefSal_t
REF salnet_t
1234 Savoie
1456 Lachance
Lhistorique des salaires est rendue par lattribut lesSalnet qui correspond une table
externe dont les objets ont leur propre.
Attention: La sous-table intgre est une vision logique, limplantation physique est diffrente: 3 tables
sont cres.
Salnet : salnet_t
annee*: montantBrut:
2000 45K$
2001 46K$
Employe : employe_t
2 ref des
objets-
externes
Page 65
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 129
M2: Cration de la table-objet pour un modle avec une classe externe
Create type salnet_t as object (annee int , montantBrut number (8,0) )
/
Create type lesrefSal_t AS TABLE OF REF salnet_t
/
Create type employe_t as object ( matricule int , nom varchar(40), lesrefSal
lesrefSal_t)
/
Create table Employe of employe_t NESTED TABLE lesrefSal STORE AS
Table_lesrefSal ;
Create table Salnet of salnet_t ;
Insert into SalNet values(salNet_t(2000, 45000));
Insert into SalNet values (salNet_t(2001, 46000));
Modle Objet
Module 3 page 130
Insertion avec un ensemble de REF
Insert into Employe values (employe_t( 1234, 'Savoie', lesrefSal_t(
(select Ref(s) from SalNet s Where s.annee = 2000),
(select Ref(s) from SalNet s Where s.annee = 2001))));
sqlplus: select * from Employe;
MATRICULE NOM LESSAL
1234 Savoie LESSAL_T(000022020827069D438A094D459F9B0A77E1E3CECB044502A1952C44AF9AAA83353B6724F2,
000022020865C2EAAB650E450D9A122570529AB24D044502A1952C44AF9AAA83353B6724F2)
Insert into Employe values (employe_t( 1456, Lachance',
lesrefSal_t( (select Ref(s) from SalNet s Where s.annee = 2001))));
Page 66
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 131
Avantages du modle M2
- Toute recherche se limitant des informations nominales des employs
(ex. matricule et nom ) sera effectue plus rapidement sil y a plus dobjets
sont dans la mme page en raison de la taille la table
- Plus il y aura dobjets de type Employe dans une page ==> le balayage du
genre table scan sera plus rapide.
- Donc un avantage pour certaines interrogations et mises jour: full
table scan avec des mises jour de nombreux objets de la mme
table-objet
Modle Objet
Module 3 page 132
Modle M3 avec liens interne multiple et externe simple
SalNet: salnet_t
montantBrut:
chargesSoc:
Employe: employe_t
matricule *: int
nom: varchar
lesSal
Sal :sal_t
annee: int
refSalNet:
M3
Page 67
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 133
Vision tabulaire de M3 et lien mono externe
Ajout dun attribut (annee) la table type employe_t en sus des rfrences REF:
matricule :int nom :varchar(50) lesSal: lesSal_t
1234 Savoie
1456 Lachance
annee refSal
2000
2001
2003
1. L'attribut lesSal a un type collection dfini par les attributs annee et le lien refSal
2. L'attribut refSal est une rfrence (type Ref) vers un objet de la table SalNet;
SalNet : salNet_t
montantBrut chargesSoc
45K$ 4K$
46K$ 5K$
Employe : employe_t
2 objets-colonnes
dans le 1
er
set
Modle Objet
Module 3 page 134
Cration de la BDO du modle M3
Solution :
Create type salNet_t as object (montantBrut number (8,2) , chargeSoc Number (8,2) )
/
Create or Replace type Sal_t as object (annee int , refSal REF salNet_t)
/
Create type lesSal_t AS TABLE OF sal_t
/
Create type employe_t as object ( matricule int , nom varchar(40), lesSal lesSal_t)
/
Create table SalNet of salNet_t;
Create table Employe of employe_t NESTED TABLE lesSal STORE AS
Table_lesSal ;
Page 68
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 135
Traitement des objets-colonnes avec un curseur
noA : int
lesEnfants
nasE int
nomE: varchar
ageE : int
Assurance:
Enfant:
Les objets de la classe interne sont imbriqus
dans la classe externe. Les premier peuvent-tre
traits par une application en utilisant un curseur.
Create type enfant_t as object (nasE int, nomE
varchar(40), ageE int)
/
Create type lesEnfants_t as table of enfant_t
/
Create type assurance_t as object (noA int,
lesEnfants lesEnfants_t )
/
Create table Assurance of assurance_t nested
table lesEnfants store as Table_LesEnfants;
Modle Objet
Module 3 page 136
Affichage des objets colonnes avec SQLPlus
Avec SQLPlus:
Select a.lesEnfants
From Assurance a
Where a.noA = 10;
Il y a affichage de lensemble des objets :
LESENFANTS(NASE, NOME, AGEE)
LESENFANTS_T(ENFANT_T(10, 'Paul', 20), ENFANT_T(15, 'Louise', 30))
Comment obtenir la valeur de noA et le nom des enfants assurs?
Insert into Assurance values (assurance_t (10, lesEnfants_t (enfant_t(10,
Paul, 20), enfant_t(15, Louise, 30))));
Page 69
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 137
Application avec curseur et unnesting de lensemble
Set serveroutput on
Declare
Cursor enfantsAss is
Select a.noA, b.nomE
From Assurance a, Table(a.lesenfants) b -- unnesting et pseudo jointure
Where a. noA = 10;
v_noA int;
v_nomE varchar(40);
Begin
open enfantsAss;
LOOP
Exit when enfantsAss%NOTFOUND;
Fetch enfantsAss into v_noA, v_nomE;
DBMS_OUTPUT.PUT_LINE (v_noA || || || v_nomE);
End LOOP;
Close enfantsAss;
End;
/
10 Paul
10 Louise
PL/SQL procedure successfully completed.
Modle Objet
Module 3 page 138
Notation pointe avec un attribut et une mthode)
Pour accder la valeur d'un attribut (ou une mthode via un objet) d'un type, utilisez
la notation pointe.
Ex.: Create Type atelier_t (noA int adrA varchar2(5), refD REF description_t) /
nomObjet.nomAttribut
Ex.: Atelier.noA
nomObjet.nomAttributRef.nomAttribut
Ex.: Atelier.refD.texte -- navigation vers l'autre classe
varObjet.nomMethode appel de la mthode dun objet
Ex.: x.modifAtelier() o x est une variable objet de Atelier
Atelier:
noA*
adrA
refD
noD : int
texte : varchar
photo: lob
refA
Description :
modifAtelier()
Page 70
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 139
La recherche du no datelier spcialis en informatique ne ncessite pas de jointure
explicite grce la REF. Il y a navigation entre les tables. Dans le relationnel, la
formulation de la jointure doit tre explicite.
Select A.noA (R) -- calcul de jointure
From Atelier A, Description D
Where A.noA = D.noA And D.texte = 'IFT';
Jointure implicite navigationnelle versus calcul de jointure relationnelle
Select a.noA (OR) -- jointure navigationnelle
From Atelier A
Where A.refD.texte = 'IFT';
En relationnel il faut l'ajout de l'attribut nomB (dans Etudiant) partageant un domaine
commun (ex: cl trangre) avec les tables R correspondantes afin de formuler
explicitement une jointure:
Modle Objet
Module 3 page 140
Table-objet et les contraintes
(Pas dhritage pour (entre) les tables)
Page 71
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 141
TABLE-OBJET avec une contrainte rfrentielle et une REF SCOPE
Personne :
nas*: int
nom:varchar(50)
refBac
Chercheur :
theme: varchar(50)
Bac: bac_t
noB* : char(3)
univ: varchar(50)
annee: Date
nbCr : int
ajoutMail()
Create Table Personne of personne_t
(Constraint pk_Personne Primary Key (nas),
Constraint c1_bac Check (refBac is not null),
Constraint c2_bac refBac REFERENCES Bac ) ;
table-objet
SCOPE
Create type bac_t as Object (noB char(3), univ varchar(50),
annee Date, nbCr int) /
Create type personne_t as Object ( nas int, nom varchar(50),
refBac REF bac_t) /
(c,e)
Modle Objet
Module 3 page 142
SCOPE IS
Un index UNIQUE peut tre dfini avec un attribut de type Ref la condition
que cet attribut soit Scop.
Create Table Personne of personne_t
(Constraint pk_Personne Primary Key (nas),
Constraint c_bac Check(refBac is not null),
Constraint c1_bac refBac SCOPE IS Bac ) ;
Comment obliger que lattribut refBac rfre bien un objet de type Bac?
En effet rien ninterdit que refBac pointe sur un objet dune autre classe.
La contrainte SCOPE IS rgle ce problme forant une rfrence avoir un oid
appartement une classe donne.
Une table cible
Page 72
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 143
Insertion dans une table-objet scope : contrainte sur le nouvel objet
Insertion d'une rfrence contrainte dans un objet Personne:
Insert into Personne values (personne_t(10, 'Gingas', (Select Ref(b) From
Bac b where b.noB = 'IFT')));
- Par le SCOPE : la ref de lobjet insr doit tre non null et obligatoirement du type bac_t
Personne:
nas*: int
nom:varchar(50)
refBac
Chercheur:
theme: varchar(50)
Bac :
noB* : char(3)
univ: varchar2(50)
annee: Date
nbCr : int
ajoutMail()
Table type
Table type
Modle Objet
Module 3 page 144
Table temporaire avec/sans prservation des objets ( une session)
GLOBAL TEMPORARY : pour la cration d'une table temporaire avec des donnes
visibles que par une session durant laquelle des objets sont ajouts dans la table.
Le schma et la structure de la table persistent comme les tables ordinaires.
La persistance des donnes dpend des paramtres suivants appliqus aux tables
temporaires:
- ON COMMIT DELETE ROWS (Objects): les objets de la table temporaire sont
gards pour la dure de chaque transaction et supprims la validation i.e. la fin
de la transaction;
- ON COMMIT PRESERVE ROWS (Objects) : les objets sont prservs pour la
dure de la session et pour toutes les transactions. Ils sont supprims la fin de
la session.
Page 73
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 145
Syntaxe pour la cration d'une table-objet dite temporaire
Cration d'une table-objet :
(les hauts et bas de case sont confondus par Oracle)
Ex: Create Global Temporary Table Personne of personne_t
( Constraint c_age (Check age > 18 and ) )
On COMMIT Delete Rows
Object Identifier is System Generated
Oidindex nom_idx TableSpace TS_Client ;
Create [GLOBAL TEMPORARY] TABLE [schema.] nomTable OF [schma.]
(Contraintes de table ) [ON COMMIT {DELETE | PRESERVE} ROWS]
[OBJECT IDENTIFIER IS ({SYSTEM GENERATED | PRIMARY KEY}]
[OIDINDEX [index] ({descriptionPhysiqueIndex | TABLESPACE
nomEspaceDonnees}]);
Modle Objet
Module 3 page 146
Diffrences entre une contrainte de table et une contrainte d'attribut dans une table-objet
Contrainte d'attribut (in-line constraint) Contrainte dfinie avec un attribut de la table-objet.
Elle permet SEULEMENT la comparaison de lattribut avec une ou plusieurs valeurs. Un
attribut est test par un prdicat au regard d'un domaine smantique. Les contraintes
d'attribut sont vrifies avant celles de table (out-of-line) (et dans l'ordre des attributs du
schma)
Formule au niveau de chaque attribut (technologie relationnelle) :
Certaines fonctions SQL peuvent tre utilises dans la condition du Check( ).
Exemples: Check(salaire < 50000.00 and age > 25) -- permis
Check (Round(prixVente) < 2500.20 -- permis
Check (Round(prixVente) < Round(prixAchat)) -- interdit (2 attributs)
Pour les tables objets
Contrainte de table (out-of-line constraint) : peut tre formule pour
comparer plusieurs attributs de la mme table-objet.
Exemple: Check (prixVente < prixAchat) -- autoris si formule au niveau de la mme
table
Page 74
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 147
valuation des contraintes
Logique 3 valeurs avec le systme de contraintes de table-objet
Evaluation d'une condition peut fournir une valeur parmi les 3 suivantes:
True
False (chec) F
Null ou ? (ou ne peut dire si T)
Une contrainte choue si l'expression value fournit un False, sinon (True ou
Null), il y a succs donc True.
Exemple: Constraint c_salaire Check ( salaire > 45000.00)
Pour tout tuple dont le salaire est null, le check est null, donc True car le salaire
pourrait tre > 45000.00 dans une mise jour ultrieure (donc T)!
Insert into t1 values (emp_t (null, null)); -- insre un objet qui vrifie donc les contraintes ci-
dessus, car le check est considr un succs!
Modle Objet
Module 3 page 148
Les index oid d'une table-objet
Quelques remarques:
OIDINDEX : si la table a des oid gnrs par le systme, un index est cr
automatiquement.
OBJECT IDENTIFIER : mthode de gnration des oid System avec 16 octets (32
Hex) et avec Primary Key (< 16 o. car est fonction de la longueur de la cl.)
-- Attention la cl primaire dclare longueur variable avec le type varchar() : elle
ne gnre pas ncessairement un oid plus petit en raison de la longueur variable
de la chane!
Page 75
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 149
Indexation d'une table-objet avec les oid
Dfinition du nom de lindex cr automatiquement avec les oid gnrs par le
systme:
Create GLOBAL TEMPORARY Table Personne of personne_t
(Constraint pk_Personne Primary Key ( nas)) ON COMMIT Preserve rows
Object Identifier is system generated
OIDINDEX PersonneIoiddx (Storage (Initial 100K Next 50K Minextents 1
Maxextents 20 PCT increase 10));
Personne:
nas*: int
nom: varchar(50)
refBac :
Bac : bac_t
noB* : char(3)
univ: varchar(50)
annee: Date
(Parent)
(enfant)
NB Une table-objet qui rfre (enfant) une autre table-objet (parent)
Modle Objet
Module 3 page 150
Gnration de loid d'une table-objet en utilisant la cl primaire
Create Table GLOBAL TEMPORARY Personne of personne_t
(Constraint pk_Personne Primary Key (nas)) On commit preserve rows
Object Identifier is PRIMARY KEY
OIDINDEX PersonneIoiddx (Storage (Initial 100K Next 50K Minextents 1 Maxextents
20 PCTincrease 10));
** Avec une BD centralise, il est conseill de privilgier la gnration de l'oid partir de la cl
primaire (car cet oid est moins encombrant lorsque la cl est numrique).
Personne :
nas*: int
nom:varchar2(50)
refBac
Bac: bac_t
noB* : char(3)
univ: varchar3(50)
annee: Date (parent)
(enfant)
Page 76
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 151
Comment retrouver le mode de gnration de l'oid?
Dans la table (vue) USER_OBJECT_TABLES du dictionnaire, plus prcisment
l'attribut OBJECT_ID_TYPE
Select table_name, object_id_type
From Object_ID_TABLES;
TABLE_NAME OBJECT_ID_TYPE
Personne USER_DEFINED
Atelier SYSTEM DEFINED
Oid gnr par
drivation avec la cl
primaire de Personne
** Par dfaut, la gnration de l'oid est effectue par le systme
Modle Objet
Module 3 page 152
Implmentation de la contrainte rfrentielle avec les objets
Page 77
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 153
Contrainte rfrentielle en objet
La cohrence d'une BD relationnelle est renforce par l'intgrit
rfrentielle.
En objet, une telle cohrence est dfinie par REFERENCES
Deux cohrences assurer:
Insertion dans la table enfant: un objet de la table enfant ne peut pas
rfrer a un objet parent absent. (cohrence enfant)
Suppression dans la table parent: un objet parent ne peut pas tre
supprim si une REF de la table enfant y est faite; (cohrence parent)
Modle Objet
Module 3 page 154
Cohrence et intgrit rfrentielles des tables Atelier et Ouvrier
Cohrence de suppression (parent) dans Atelier
Cohrence dinsertion (enfant): ajout dans Ouvrier
Atelier:
nomA*:
adrA:
matO*: int
nomO:
villeO:
Ouvrier:
1..* 1..1
<Travaille
Atelier:
nomA*:
adrA:
matO*: int
nomO:
villeO:
refA
Ouvrier:
(enfant)
(parent)
DC-UML
Mnav
(table enfant)
(table parent)
Mnav
Page 78
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 155
Absence de la contrainte rfrentielle dans une table-objet
Create type atelier_t as Object (nomA varchar2(50), adrA varchar2(50))
/]
Create type ouvrier_t as Object (matO char(6), nomO varchar2(50), villeO varchar2(50), refA
REF atelier_t)
/
Create Table Atelier of atelier_t
(constraint pk_Atelier Primary Key (nomA));
Create Table Ouvrier of ouvrier_t
(Constraint pk_Ouvrier Primary Key (matO),
Constraint c1_refAtelier check( refA is not null));
Cohrence enfant:
Insert into Atelier values ( 'Atelier-Qubec', null); (objet parent)
Insert into Ouvrier values ( 123456, Dupont, Qubec, (select ref(a) from Atelier a
where nomA = Atelier-Qubec)); (objet enfant)
** Ces insertions doivent tre effectues dans une mme transaction, termine par un Commit.
Atelier <-- Ouvrier
Modle Objet
Module 3 page 156
Suite intgrit rfrentielle avec les oid et table-objet
Cohrence du parent:
Delete from Atelier Where nomA = 'Atelier-Qubec'; -- cet objet existant est supprim!
select count(*) from Ouvrier where refA is dangling
Donc aucun blocage de la suppression de lobjet parent assur : incohrence de
suppression non renforce
Il peut y avoir un ouvrier qui rfrence un atelier disparu (parent). Donc un
atelier est supprim mme s'il y a des ouvriers qui y travaillent !
Cest la mme incohrence que celle affiche avec le modle relationnel.
Cohrence de lenfant: insertion dun ouvrier non associ un atelier?
Le not null de lattribut refA bloque cet ajout.
Count(*)
1
Atelier <-- Ouvrier
Page 79
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 157
Suite Renforcment de la contrainte rfrentielle objet avec REFERENCES
Avec la technologie objet, cette incohrence du parent est corrige avec la clause
REFERENCES dans lobjet-enfant:
Create Table Ouvrier of ouvrier_t (Constraint pk_Ouvrier Primary Key (mat),
Constraint c_Atelier Check ( refA IS NOT NULL),
Constraint c1_ref_Atelier refA REFERENCES Atelier) ;
La suppression de l'atelier est alors bloque par la contrainte ref_Atelier assurant la
cohrence de Ouvrier.
*** NB la suppression nest cependant pas bloque avec le une contrainte scope sur refA :

refA is scope Atelier


Atelier<-- ouvrier
Modle Objet
Module 3 page 158
Suite intgrit rfrentielle utilisant loid et la table-objet
Insertion d'un fils (cohrence de l'enfant Ouvrier)
Insert into Ouvrier values (
ouvrier_t( '123', 'Ferland', 'Qubec', (Select Ref(a) From
Atelier a Where a.nomA = 'Atelier-Qc')));
*** Erreur *** l'atelier (parent) recherch n'existe pas.
Le Select ne trouvant pas un objet retourne un null, alors l'insertion est
interdite par la contrainte c1_refAtelier dans lobjet Ouvrier (cohrence dinsertion)
Atelier <-- Ouvrier
Page 80
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 159
Suite . Cohrence rfrentielle du parent
Cohrence du parent (Atelier rfr par un ouvrier)
Delete From Atelier Where nomA = 'Mcano' ;
** ERREUR la ligne 1
ORA-02292 > Referential Constraint Violation
En supprimant cet atelier la contrainte dobjet ci-dessous est enfreinte:
Constraint c_refA refA References Atelier
*** Erreur violation de la contrainte c_refA
A tout moment l'attribut refA doit se rfrer un oid valide de la table
Atelier, soit un oid d'objet prsent dans la base.
Atelier <-- Ouvrier
Modle Objet
Module 3 page 160
Actions rfrentielles en objet
Les actions qui dcoulent de la suppression dun objet parent sont les
mmes que celles de la technologie relationnelle:
ON DELETE CASCADE et ON DELETE SET NULL.
(parent) Create Table Atelier of atelier_t
(constraint pk_Atelier Primary Key (nomA));
(enfant)
Create Table Ouvrier of ouvrier_t
(Constraint pk_Ouvrier Primary Key (matO),
Constraint c1_refAtelier check( refA is not null),
Constraint c2_refAtelier refA REFERENCES Atelier ON DELETE
CASCADE);
Toute suppression d'un atelier supprime aussi les ouvriers qui y travaillent.
Atelier <-- Ouvrier
Page 81
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 161
Eviter les contraintes contradictoires: Action ON DELETE SET NULL
(enfant): Create Table Ouvrier of ouvrier_t
(Constraint pk_Ouvrier Primary Key (mat),
Constraint c1_refAtelier check( refA is not null),
Constraint c2_refAtelier refA REFERENCES Atelier
ON DELETE SET NULL);
Atelier: Toute suppression d'un atelier met null la ref des ouvriers qui y
travaillent.
Cette action rfrentielle exige la suppression de la contrainte c1 qui est
contradictoire avec la smantique de laction SET NULL.
Atelier <-- Ouvrier
(Contrainte contradictoire)
Modle Objet
Module 3 page 162
Mthode incluse dans le type
Ajout et suppression d'une seule signature dans le type qui en a dj une:
Alter type employe_t ADD Member Procedure augmentationSal (aug IN number);
Alter type employe_t DROP Member Procedure augmentationSal (aug IN number);
** Le type dans la signature ninclut pas la longueur du type : Number et non Number(8,2),
varchar2 et non varchar2(50),
NB : L'volution d'un type avec le ALTER change le type dans la base mais pas celui plac
dans la cache du SGBD. Pour voir le changement, il faut vider la cache en se dconnectant et
en crant une nouvelle connexion (nouvelle session)!!
Page 82
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 163
Signature d'une mthode dfinie dans un type
Fonction et procdure (Pl/SQL et JAVA) constituent les mthodes du type.
Create type produit_t as Object(noP int, nom varchar2(25), prix number(5,2),
joursValides int, rabais int,
Member Function lireDateLimiteProduit Return Date, (signature)
Member Procedure rabaisProduit (noPr IN int, prixReg IN number,
rabais Out number, nom OUT varchar2))
/
La signature de la fonction / procdure est incluse dans la dclaration du type d'un
objet (ajoute ventuellement avec Alter type).
Le code de chaque mthode (bloc PL/SQL, C++, C, JAVA) i.e. le body est cr par un
nonc DDL Create Body produit_t
Une mthode Member est appele explicitement par un objet du type ( soit une
variable objet:
v_article.rabaisProduit(25, prixReg, rabais, nomP);
Sans longueur
Modle Objet
Module 3 page 164
Oracle JPublisher :mapping des objets Oracle en des classes Java
J Publisher gnre une classe J ava pour chaque type de la base-objet
For eachobject type, whether an ORAData or a SQLData implementation, J Publisher generates a
<type>.sqlj file for the class code (or a <type>.java file if wrapper methods were suppressedor do not
exist, or dependingon the J Publisher -methods option setting) and a <type>Ref.java file for the code for the
REF class of the J ava type. For example, if you define an EMPLOYEE SQL object type, J Publisher
generates an employee.sqlj file (or an employee.java file) and an employeeRef.java file. Note that the
case of J ava class names producedby J Publisher is determinedby the -case option. Mthods are also
included.
Create the object type EMPLOYE:E_t
CREATE TYPE employee_t AS OBJECT ( name VARCHAR2(30), empno INTEGER, deptno NUMBER,
hiredate DATE, salary REAL );
Jpub -user=angam/tigre -dir=demo numbertypes=objectjdbc -builtintypes=jdbc
-package=corp -case=mixed-sql= employee_t
Page 83
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 165
Rfrences
1- Christian SOUTOU, Programmer Objet avec Oracle: concepts et pratiques, Vuibert,
2004, 394 p. ISBN 2-7117-4822-7
2- Paul BROWN, Object-Relational Database Development: A Plumber's Guide,
Prentice-Hall , 2001, ISBN 0-13-019460-3
3- Kevin Loney, Oracle Database 11g. The Complete Reference
ISBN 978-0- 07-159875-0, 2009
** Le WEB publie des articles et documents sur les BD objets notamment sur les BD
objets de Oracle.
Modle Objet
Module 3 page 166
SURVOL
Type non structur : LOB
Les objets de grande taille non structurs (4 Go et +) :
1- LOB interne (internal LOB avec un locator conduisant au LOB interne) , stock
dans la base, plus prcisment dans un tablespace.
BLOB : objets de grande taille binaire : ex. sons, images, vido,
CLOB: Objets de grande taille de type caractres : ex. textes
NCLOB: Objets de grande taille avec caractres nationaux UNICODE) : Ex.
textes en caractres asiatiques ou en cyrillique
2- Externe: LOB externe stocks lextrieur comme un fichier mais dont le
nom et le chemin sont stocks dans la base.
BFILE: type pour stocker une rfrence vers des fichiers externes sur le
serveur et non sur le poste client.
Page 84
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 167
Exemple de cration dun objet avec une photo et un LOB externe
Dans la table-objet , un LOB interne est reprsent par un locator (une sorte de
pointeur logique) :
1- locator de LOB interne : la cration doit tre initialis par les fonctions
EMPTY_CLOB() et EMPTY_BLOB() du package DBMS_LOB;
2- locator de BFILE : inititialis par la fonction
BFILENAME(nom_rpertoire_sur_serveur, nom_fichier); *
* Le rpertoire et le fichier sont crs sur le serveur et le dveloppeur obtient les droits
de lire et crire. Le lob est lextrieur de la BD.
Modle Objet
Module 3 page 168
Exemple
Ex. cration d'une table avec le type CBLOB
Create type carteID_t as Object (noC int , photo CLOB)
/
Create table CarteID of carteID_t;
Linsertion dun objet ayant un attribut de type CBLOB mais sans valeur doit se faire
avec une initialisation au moyen de la fonction EMPTY_CLOB():
Insertion dans CarteID:
Insert into carteID values (carteID_t( 1, Empty_CLOB()));
Update CarteID set photo = 'Photo_en_format_JPEG' where noC = 1
/
Insert CarteID values (2, photo_ en format_Tiff)
/
Page 85
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 169
Insertion de LOBs
Insertion dun LOB externe:
Insert into CarteIDD values ( 10, Photo_en_format_GIF, BFILENAME
(null, null));
La fonction BFILENAME() a 2 paramtres : le nom du rpertoire sur le
serveur et le nom du fichier sur le mme serveur.
Modle Objet
Module 3 page 170
Recherche et traitement dun LOB avec un applicatif PL/SQL
Avec un locator pour un LOB externe:
Create type carteIDD_t as Object (noC int , photo CLOB, dossier BFILE)
/
Insert into CarteIDD values (10, 'VVVVVVVVVVVVVV', NULL);
Applicatif PL/SQL
Declare
photo CLOB;
noC integer ;
Begin
Select photo into photo From CarteIDD where noC = 10;
DBMS_OUTPUT.PUT_LINE( ***Taille de la photo est : ' || DBMS_LOB.GETLENGTH(photo));
/* traitements de la photo */
END;
*** Taille de la photo est : 19
Procdure PL/SQL termine avec succs.
Page 86
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 171
Exemple de cration dun objet avec un LOB
1- BLOB : donnes binaires stockes dans la BD
Create type photoB_t as Object ( photo BLOB) /
Create type personne_t as Object ( mat int, nom varchar2(30), age int,
photo photoB_t) /
Create table Personne of personne_t;
** le chargement dun LOB se fera avec une procdure PL/SQL provenant dun package
spcialis.
2- CLOB : Donnes en caractres stockes dans la BD.
Create type photoC_t as Object ( photo CLOB) /
3- BFILE : Fichier de donnes binaires en lecture seulement stockes en dehors de la BD, dans le
systme de fichiers de lOS
Create photoBF_t_as Obect (photo BFILE ( rpertoire ,fichier))
/
N.B. le chargement des LOBs est fait notamment pas le package DBMS_LOB() de Oracle
Modle Objet
Module 3 page 172
Locator
Une donne de type LOB peut tre stocke physiquement dans la table ou en
dehors de la table en utilisant un locator qui rfre un tableSpace de la BD ou
un fichier externe.
Pour les BLOB, CLOB et NCLOB, le locator pointe sur un espace dans la BD o
la donne Lob est stocke (tableSpace).
Insert into Personne values (personne_t(314, Viorel, 28,
BFILENAME (nom_complet_rpertoire, nom du fichier))
);
Avec le type BFILE, le locator est une rfrence un fichier externe la base-
objet. Ce fichier est cependant gr par le OS du serveur.
Page 87
Andr Gamache professeur associ, Dpartement d'informatique et de gnie logiciel
Facult des sciences et de gnie, Universit Laval. Qubec, Qc, Canada, G1K 7P4
Module 3
Modle Objet
Module 3 page 173
Exercices
Modle Objet
Module 3 page 174
Fin

Vous aimerez peut-être aussi