Académique Documents
Professionnel Documents
Culture Documents
3 Modele Objet
3 Modele Objet
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