Vous êtes sur la page 1sur 87

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Modèle Objet (Oracle)
Modèle Objet (Oracle)
Modèle pour les Données non Normalisées Passage à la technologie objet de Oracle
Modèle pour les Données non Normalisées
Passage à la technologie objet de Oracle

André Gamache, professeur associé Département d'informatique et de génie logiciel Faculté des sciences et de génie Université Laval. Québec, Qc, Canada, G1K 7P4

Courriel: andre.gamache@ift.ulaval.ca

2014-03-14

Modèle Objet ©

Canada, G1K 7P4 Courriel: andre.gamache@ift.ulaval.ca 2014-03-14 M o d è l e O b j e

Module 3

page

1

Modèle objet-relationnel (OR = relationnel + objet)
Modèle objet-relationnel (OR = relationnel + objet)
Le modèle géré par Oracle est dit Objet-Relationnel parce qu'il peut faire cohabiter les modèles
Le modèle géré par Oracle est dit Objet-Relationnel parce qu'il peut faire cohabiter les modèles
relationnel et objet . Il est hybride !! Seule la partie exclusivement objet sera utilisée.
Avantages:
- Gère les nombreuses bases relationnelles déjà en service (le data legacy );
- Conserve les notions de tables comme containeur d’objets.
- Permet l'encapsulation des données : implémentation de l’interface (des méthodes)
- Implémente les mécanismes associés à l'objet : héritage, redéfinition et surcharge.
Normalise les accès sécurisés à la BD via les méthodes.
- Capitalise sur les acquis (applications) permettant une migration évolutive du SGBD
relationnel vers l’objet.
Bémols et limites:
- Objet est plus complexe découlant de structures disponibles dans les applications (langages
de développement): usage d’outils de mapping des objets (JPublisher, …)
- N'implémente pas l'héritage multiple. Idem pour Java sauf pour C++. Est-ce vraiment un
inconvénient??
- N'est pas 100% conforme à la norme ODMG: ex. les structures d’ensemble limitées à 2
niveaux . Utilise la notion explicite de REF qui est en quelque sorte un pointeur logique lequel
devrait être normalement être transparent au traitement.

Modèle Objet ©

Module 3

page

2

André Gamache professeur associé, Département d'informatique et de génie logiciel

Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Objet et Attribut
Objet et Attribut
Dans l’univers des bases de données objets, il y a seulement quelques concepts clés: 
Dans l’univers des bases de données objets, il y a seulement quelques concepts clés:
 L’objet a un nom et est concrétisé par la création d’une structure (dorénavant appelée classe
ou type d’bjet). Un objet est donc à l’image d’une classe et cette dernière est munie d’une
interface.
En Oracle : la classe est synonyme du type d’un objet de table
 L’attribut (propriété) a un nom et est utilisé pour représenter un aspect de l’objet réel
permettant ainsi des traitements subséquents.
 Le type: L’attribut et l’objet auront un type ( i.e. une structure de données) de manière à
pouvoir stocker un d’objet et en permettre des traitements subséquents. Les objets sont
regroupés dans un containeur d’objets. En OR, c’est la table. Dans d’autres systèmes objets,
cela peut être une liste ou un set.
 Les méthodes sont associées aux classes pour manipuler correctement les objets. Elles
sont partagées entre les applications et peuvent être certifiées pour le maintien de la
cohérence et de l’efficacité. Elles ne sont pas physiquement stockées avec les structures
d’objets mais elles y sont fortement reliées via le dictionnaire de données.

Modèle Objet ©

Module 3

page

3

Hiérarchie des types d’objets (Oracle) TYPE User-Defined Build-In Scalar Collection Relationship
Hiérarchie des types d’objets (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 REF NESTED TABLE Set() Bag() List()
VARRAY
REF
NESTED TABLE
Set()
Bag()
List()
tuple [ ]
tuple [ ]

Reference: JP Perez – Object Database using Oracle

Modèle Objet ©

Module 3

page

4

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Types atomiques, complexes et d’usager
Types atomiques, complexes et d’usager
1. Atomique ou de base : int, number, string, varchar(), varchar2(), Date, (15 types en
1. Atomique ou de base :
int, number, string, varchar(), varchar2(), Date,
(15 types en R).
2. Complexe : structure de tuple (1 seul objet), d’ensemble, liste, bag,
identifiée par
Ex.:
un nom
tuple := [A 1 :t 1 , A 2 :t 2 ,…] où A 1 est un attribut et t 1 un type primitif (ou d’usager).
3. Type défini par l’usager:
Exemple : Sans faire référence à un SGBD objet particulier, le type pour un objet :employé est
défini comme un tuple:
employe_t := [mat: int , nom: varchar2(50) , adresse : varchar2(50)] structure de tuple
Convention d’écriture pour le type
Le type d’un objet a par convention, le même nom que celui de l’objet suffixé par _t et
débutant par une lettre minuscule. C’est une convention d’écriture et non une syntaxe du DDL du
SGBD objet.

Modèle Objet ©

Module 3

page

5

Oracle: Classe externe et Classe interne
Oracle: Classe externe et Classe interne

Une classe externe ou interne a un type généralement défini par l’usager Ex. Personne : personne_t

N.B. Dans le Mnav: un lien simple interne vers une classe interne est instantiée par un seul objet interne.

Personne: personne_t mat int nom varchar(40) adresse : adresse_t no int nom varchar2(40) Modèle Objet
Personne: personne_t
mat int
nom varchar(40)
adresse
: adresse_t
no int
nom varchar2(40)
Modèle Objet ©

Le lien simple est implémenté par imbrication dans la classe externe.

Module 3

page

6

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Classe interne et type Usager
Classe interne et type Usager
Définition du type d’une classe interne (formulé via la notation d’un tuple) Exemple : l’attribut
Définition du type d’une classe interne (formulé via la notation d’un tuple)
Exemple : l’attribut adresse réfère à une classe interne de l’objet :personne écrit sans référence
à un SGBD particulier.
adresse_t := [ no: int, nom : varchar2(50)]
i.e.
(formulation linéaire)
adresse_t := tuple( no: int, nom : varchar2(50))
Un type déjà défini pour une classe interne peut être aussi utilisé dans la définition du type d’une
autre classe Externe Employe:
personne_t := [mat int, nom varchar2(40),
adresse adresse_t]
En Oracle objet le type d’une classe interne est créé ainsi:
(création d’un type via l’application 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 défini qu’avec des types déjà créés ou prédéfinis.

Modèle Objet ©

Module 3

page

7

Partage des types entre les classes d’objets
Partage des types entre les classes d’objets
IMPORTANT : un type peut-être partagé entre plusieurs classes d’objets créant ainsi une dépendance dont
IMPORTANT : un type peut-être partagé entre plusieurs classes d’objets créant ainsi une dépendance dont il
faudra tenir compte par la suite lors de la suppression ou la modification du type existant. Le dictionnaire du
SGBD signale cette dépendance.
Supprimer un type partagé est possible si la suppression se répercute aussi sur
les autres types dépendants:
 Alter type adresse_t DROP codePostal varchar2(20) CASCADE ;
 Drop type adresse_t FORCE ; -- pour supprimer malgré la dépendance.
 Alter type adresse_t ADD codePostal varchar2(20) CASCADE ;
Partage d’un type entre plusieurs schémas (BDO):
Possible que si le compte-propriétaire Louise accorde le privilège EXECUTE aux
autres:
Grant EXECUTE ANY TYPE ON TO Pierre; -- permission donnée par Louise
-- Pierre peut maintenant utiliser les types de Louise en le préfixant : Louise.employe_t
Grant insert , update, …. To Pierre;
Revoke insert, update , … to Pierre;

Modèle Objet ©

Module 3

page

8

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Partage d’un type entre utilisateurs-DBA
Partage d’un type entre utilisateurs-DBA
Alors Pierre veut créer un type gerant_t en utilisant le type créé par Louise :
Alors Pierre veut créer un type gerant_t en utilisant le type créé par Louise :
Compte de Louise
Create type gerant_t as Object
( noGerant int, personne
Louise.employe_t )
/
Describe Louise.employe_t;
Pour créer des types, Pierre doit avoir le privilège:
Grant create type to Pierre;
ou
avoir les privilèges du DBA.
-- accordé par le DBA
N.B. Dans un cours vous avez normalement que le premier privilège .

Modèle Objet ©

Module 3

page

9

Validation des types
Validation des types
 Lors de la création ou de la modification d’un type, le système doit vérifier
 Lors de la création ou de la modification d’un type, le système doit vérifier que
cette modification ne fait pas une action qui invalide les autres types ou autres
entités de la base:
ALTER TYPE Personne DROP ATTRIBUTE (adresse) CASCADE;
 Exemple : un type est modifié en supprimant un attribut
 CASCADE: Le système doit vérifier que cette suppression ne se répercute 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 système.
 INVALIDATE: le test est supprimé et les changements sont imposés quitte à
ce que le clustering par exemple soit rendu inopérant. Pour le redevenir, il
faudra réinstaller le type initialement supprimé!

Modèle Objet ©

Module 3

page

10

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Partage en cascade des types
Partage en cascade des types
Le partage d’un type utilisant un autre type déjà défini se représente difficilement dans le
Le partage d’un type utilisant un autre type déjà défini se représente difficilement dans
le Mnav. Avec le modèle graphique Mnav. Il y a alors dépendance 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 d’un type est pris en compte dans son ‘évolution ‘:

CASCADE et INVALIDATE

Alter type etudiant_t ADD tel varchar(8) CASCADE ;

Modèle Objet ©

Module 3

page

11

Collection en Oracle (set)
Collection en Oracle (set)
Les objets d’une classe interne sont appelés objets-colonnes dans la terminologie Oracle. L’attribut lesJoueurs est
Les objets d’une classe interne sont appelés objets-colonnes dans la terminologie
Oracle.
L’attribut lesJoueurs est un ensemble dont chaque élément est un objet-colonne (OC). Autres
types d’ensemble : list(), bag() … mais non disponibles en Oracle:
(Formulation linéaire)
employe_t := [mat : int , nom: string, lesAdresses : list(adresse_t)] (non Oracle)
L’attribut d’ensemble 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 défini en utilisant que des types déjà définis.

Modèle Objet ©

Module 3

page

12

André Gamache professeur associé, Département d'informatique et de génie logiciel

Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Mnav avec une structure interne implémentée avec le VARRAY()
Mnav avec une structure interne implémentée avec le VARRAY()

Avec Oracle, la déclaration de l’ensemble ordonné lesAdresses est la suivante:

Employe: employe_t

mat : int nom : string lesAdresses
mat : int
nom : string
lesAdresses

Structure interne référée par un lien interne multiple. Donc son type sera varray ou set avec des élément que sont les valeurs ou les objets adresse.

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 définition des types est faite dans l’ordre inverse puisque le shadowing n’est pas autorisé.

Modèle Objet ©

Module 3

page

13

Les attributs de Varray ( ≈ 10)
Les attributs de Varray ( ≈ 10)
Le type Varray a quelques pseudo-méthodes prédéfinies et associés dans le traitement avec PL/SQL. Dans
Le type Varray a quelques pseudo-méthodes prédéfinies et associés dans le traitement avec
PL/SQL. Dans ce langage, le varray créé en PL/SQL a des attributs et non des pseudos
méthdodes. Ce dernier a les structures nécessaires pour implanter un varray, mais pas SQL.
Ce type s’utilise avec des valeurs stables et peu nombreuses.
Count : le nombre actuel d’éléments dans l’ensemble dont la structure est VARRAY :
Declare
lesAdresses lesAdresses_t ;
Ex: nb := lesAdresses.count
Limit : nombre maximal d’éléments dans l’ensemble ordonné.
+ autres méthodes spécialisées à venir
NB Impossible de supprimer uniquement une valeur ou un objet rangé dans un varray.
La struct PL/SQL varray est définie et dotés d’attributs en PL/SQL

Modèle Objet ©

Module 3

page

14

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Constructeur d’objet (rappel de convention d’écriture)
Constructeur d’objet (rappel de convention d’écriture)

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 d’écriture permet de distinguer plus facilement le nom d’un type de celui d’une table-objet. Nous verrons plus loin qu’il existe plusieurs constructeurs d’objets.

L’information sur cette convention sera transmise au SGBD lors de la création du type.

Chaque objet est construit et inséré dans une table-objet. Il acquiert de ce fait un oid unique et non réutilisable (persistance) par un autre objet. La table est son extension/containeur (ou container).

Pour le moment, considérons cet oid comme une sorte de référence unique et persistante à chaque objet.

Une définition plus précise et complète sera vue plus loin la composition de la REF.

Modèle Objet ©

Module 3

page

15

Insertion des objets avec un ensemble Varray L’insertion d’un objet avec 2 objets de la
Insertion des objets avec un ensemble Varray
L’insertion d’un objet avec 2 objets de la classe interne se fera en construisant l’objet
à insérer et en l’ajoutant dans la base par la clause DML Insert.
Employe: employe_t
mat : int
Insert into Employe values (employe_t (150, ‘Robert’,
lesAdresses_t( adresse_t (5, ‘St-Louis’, ‘Québec’),
adresse_t(8, desPins, ‘Sorel’)
nom : string
lesAdresses
))); - ajout de l’objet Employe avec ses adresses
Construction de la classe interne
 Insertion suivante sera rejettée car il dépasse la capacité du Varray:
Insert into Employe values (employe_t (225, ‘Lucie’,
lesAdresses_t (adresse_t (23, ‘Concorde’, ‘Québec’),
adresse_t (42, ‘desSaules’, ‘Québec’),
adresse_t (99, ‘des Pins’, ‘Québec’) )) );
L’insertion d’une 3 ème adresse génère une erreur à moins d’étendre au préalable le varray , ce que le PL/SQL peut faire.

Modèle Objet ©

Module 3

page

16

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Différences entre le VARRAY et le Set (NESTED TABLE)
Différences entre le VARRAY et le Set (NESTED TABLE)

Ces deux types sont du genre ensemble et peuvent avoir comme éléments des références, des valeurs ou des objet-colonnes. (i.e. sans oid)

VARRAY (set) NESTED TABLE Ensemble trié Ensemble non trié Objets indicés (0rig. 1) Objets non
VARRAY
(set) NESTED TABLE
Ensemble trié
Ensemble non trié
Objets indicés (0rig. 1)
Objets non indicés (accès direct)
Nombre limité d’objets
Nombre illimité d’objets
Pas de SELECT sur les attributs de
l’objet-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 même type
Objets sont tous du même type ou d’un
sous-type du type déclaré

L’insertion, mise à jour, suppression et autres opérations avec ces types complexes exigent l’emploi de méthodes qui seront étudiées dans un chapitre ultérieur.

Modèle Objet ©

Module 3

page

17

Supplément sur les varrays (Contenu à différer au besoin)
Supplément sur les varrays
(Contenu à différer au besoin)

Les éléments stockés dans un varray sont aussi des objets (du genre objet- colonne) L’insertion se fait par DML et la recherche avec SQL n’est pas permise avec un critère formé par un attribut de l’OC. Il faut donc parcourir le varray avec une application, par exemple développée en PL/SQL en utilisant les méthodes prédéfinies et associées au VARRAY.

Ce type (structure) est utile pour stocker un petit nombre d’objets de même type qui doivent être ordonnés exigeant un espace relativement important de stockage. Pas de suppression possible sinon via une lecture complète du varray avec PL/SQL et la suppression effectuée via une structure de PL/SQL!

Modèle Objet ©

Module 3

page

18

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Utilisation par appel de méthode prédéfinie
Utilisation par appel de méthode prédéfinie
Les méthodes (fonctions) qui sont prédéfinies avec le type du varray sont appelées ainsi: var_objet.nom_méthode
Les méthodes (fonctions) qui sont prédéfinies avec le type du varray
sont appelées ainsi:
var_objet.nom_méthode
v_nb :=
v_liste_locaux. COUNT
-- fonction qui retourne dans v_nb, le nb de locaux dans la liste.
v_nb est déclarée une variable entière.

Modèle Objet ©

Module 3

page

19

Quelques méthodes (fonctions) associées à Varray()
Quelques méthodes (fonctions) associées à Varray()
 

Méthode

Description

Exists (x)

Retourne TRUE s’il existe une valeur au rang x du Varray

Count

Retourne le nombre d’objets stockés dans l’ensemble

Limit

Retourne la taille max du varray

First / Last

Retourne le 1 er et le dernier élément de la collection

Extend Extend(m) Extend (x, i)

Ajoute un élément vide au varray Ajoute m éléments vides Ajoute x copies de l’élément en position i

Delete

Supprime tous les objets du varray Supprime l’objet de position i dans le Varray Supprime les objets de rang 1 à j du Varray

Delere (i)

Delete (i,j)

Declare

 

v_tableauGroupe

groupes_t

-- var. objet de type varray déjà définie dans le DD

limite int ; Begin limite := v_tableauGroupe.LIMIT; DBMS_OUTPUT.PUT_LINE (To_Char(limite)); End;

Modèle Objet ©

Module 3

page

20

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Représentation graphique du Varray
Représentation graphique du Varray

Modèle Objet ©

Assurance:assurance_t noA : int lesEnfants nasE int nomE: varchar ageE : int nasE int nomE:
Assurance:assurance_t
noA : int
lesEnfants
nasE int
nomE: varchar
ageE : int
nasE int
nomE: varchar
ageE : int

Le varray est un ensemble ordonné dont chaque élément 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 méthodes prédéfinies à tout varray.

La 3 e entrée du varray sera valuée par un objet null.

Module 3

page

21

Création et utilisation du Varray() avec PL/SQL
Création et utilisation du Varray() avec PL/SQL
Impossible de mettre à jour le varray avec le Update. Il faut le faire avec
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)
/

Modèle Objet ©

Module 3

page

22

André Gamache professeur associé, Département d'informatique et de génie logiciel

Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Vision tabulaire avec 2 attributs d’ensemble ordonné
Vision tabulaire avec 2 attributs d’ensemble ordonné
Création du containeur d’objets: Create table Assuranceinternationale of assuranceInternationale_t; noA: Les
Création du containeur d’objets:
Create table Assuranceinternationale of assuranceInternationale_t;
noA:
Les EnfantsCA
lesEnfantsUSA
nasE
nomE
ageE
nasE
nomE
AgeE
Objet de la table
102
1001
Paul
22
2003
Jane
34
avec un oid
2004
Peter
25
103
1002
Lise
25
null
null
null
Varray(3)
(objets-colonnes sans oid)

Modèle Objet ©

Module 3

page

23

Ajout des objets dans le varray
Ajout des objets dans le varray

Revenons à Assurance:

Ajout d’une 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 L’ajout d’un autre objet-colonne (sur 3 possibles) ne peut pas se faire directement. Il faut lire l’objet de table qui le contient , en faire la mise à jour en RAM par l’applicatif et ensuite faire un UPDATE de la table qui le contient. Un inconvénient qui limite l’intérêt du varray!

Aucune lecture possible d’un seul attribut du varray avec SQL:

Modèle Objet ©

Select a.lesEnfants.age From Assurance a

***

identificateur inconnu ****

Module 3

page

24

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Lecture SQL du varray sans critère de sélection
Lecture SQL du varray sans critère de sélection

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))

Modèle Objet ©

Module 3

page

25

Vision tabulaire utilisant un varray à 2 places
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,
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
Assurance:
nasE
nomE
ageE
101
1
Paul
20
null
null
102
2
Louise
22
3
Jacques
25

Modèle Objet ©

Module 3

page

26

André Gamache professeur associé, Département d'informatique et de génie logiciel

Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Lecture des objets-colonnes dans un tableau
Lecture des objets-colonnes dans un tableau
-- Applicatif PL/SQL pour afficher le nombre des enfants assurés par la police d’assurance 102
-- Applicatif PL/SQL
pour afficher le nombre des enfants assurés par la police d’assurance 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
Procédure PL/SQL terminée avec succès.

Modèle Objet ©

Module 3

page

27

Recherche d’un objet particulier dans un varray
Recherche d’un objet particulier dans un varray

-- Applicatif PL/SQL pour traiter l’assurance 101

(SET SERVEROUTPUT ON)

Declare v_tableauE lesEnfants_t ; Begin Select a.lesEnfants into v_tableauE From Assurance a Where a.noA =101;

into v_tableauE From Assurance a Where a.noA =101 ; DBMS_OUTPUT.PUT_LINE (v_tableauE (1).nasE ||' End; /
into v_tableauE From Assurance a Where a.noA =101 ; DBMS_OUTPUT.PUT_LINE (v_tableauE (1).nasE ||' End; /

DBMS_OUTPUT.PUT_LINE (v_tableauE(1).nasE ||' End;

/

' || v_tableauE(1).nomE) ;

Réponse:

1

Paul

Procédure PL/SQL terminée avec succès.

Cette procédure pourrait être intégrée dans une méthode plus générale de recherche et de mise à jour.

Modèle Objet ©

Module 3

page

28

André Gamache professeur associé, Département d'informatique et de génie logiciel

Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Lecture de tous les objets (OC) d’un VARRAY peu importe l’objet hôte Declare v_tableauE lesEnfants_t
Lecture de tous les objets (OC) d’un VARRAY peu importe l’objet hôte
Declare
v_tableauE lesEnfants_t ;
v_nbPoAs int;
Begin
-- var locale de type varray
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
Procédure PL/SQL terminée avec succès.
Modèle Objet ©
Module 3
page
29
Modification de l’attribut d’un objet (OC) (ageE)
Modification de l’attribut d’un objet (OC) (ageE)
Exemple: Jacques titulaire de l’assurance 102, a 26 ans plutôt que 25. Pour modifier un
Exemple: Jacques titulaire de l’assurance 102, a 26 ans plutôt que 25.
Pour modifier un objet ayant un attribut de type varray, il faut lire l’objet OC, le mettre à jour
avec l’applicatif PL/SQL et l’insérer à 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;
v_lesEnfants(2).ageE := 26;
-- 1 seul objet OC doit être lu
-- mise à jour de la 2 e entrée du varray ne RAM
Update Assurance a SET a.lesEnfants = v_lesEnfants
End;
Where a.noA = 102;
/
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))

Modèle Objet ©

Module 3

page

30

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Affichage de la structure d’un type
Affichage de la structure d’un type

sqlplus:

Describe

assuranceInternationale_t;

Nom

NULL ?

Type

----------------------------------------- -------- -----------------------

NOA

LESENFANTS LESENFANTS_T

NUMBER(38)

NASE

NUMBER(38)

NOME

VARCHAR2(50)

AGEE

NUMBER(38)

LESENFANTSUSA LESENFANTS_T

NASE

NUMBER(38)

NOME

VARCHAR2(50)

AGEE

NUMBER(38)

Modèle Objet ©

Module 3

page

31

Nature du type REF pour un attribut
Nature du type REF pour un attribut

Un attribut peut avoir un type REF ce qui signifie qu’il est valué avec une référence ciblant un autre objet. La REF permet d’associer les objets de classes différentes dans une même hiérarchie de classes (polymorphisme du Ref).

Le REF permet d’implanter le lien externe du Mnav.

La valeur de type REF est construite par le système en incluant l’oid et quelques autres métadonnées de la table-objet ….

Index: mécanisme d’accès Avec une référence, un objet est obtenu via la consultation par le noyau du SGBD de l’index 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 rôle similaire au OID dans Oracle-Objet mais il n’est pas un vrai oid ne serait-ce par le fait qu’il est visible, réutilisable et manipulable directement. (mais non modifiable directement).

Modèle Objet ©

Module 3

page

32

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Type REF
Type REF
Une valeur de type REF réfère seulement à un seul type objet (OT) via l'oid
Une valeur de type REF réfère seulement à un seul type objet (OT) via l'oid de l'objet
ciblé. L’objet-colonne n’a pas de oid donc ne pas être référencé par indexation de
son oid! Sa persistance et son accès passent par ceux de l’objet hôte!
Dans ce cours et par convention volontairement abusive :
 La valeur Ref sera considérée idem à l'oid du moins en ce qui a trait à son rôle.
 Le rôle dévolu au type REF est d'améliorer la fonction de navigation avec le
langage de requête SQL. Par exemple, accélérer les jointures.
 Le oid (son identité) est de préférence (ou devrait être) non visible et
obligatoirement non modifiable par programmation;
(variable selon les implémentations)

Modèle Objet ©

Module 3

page

33

Référence à un autre objet par l’oid obtenue par la fonction REF()
Référence à un autre objet par l’oid obtenue par la fonction REF()
Employe: employe_t Service: service_t nomE*: varchar nomS*: varchar refService
Employe: employe_t
Service: service_t
nomE*: varchar
nomS*: varchar
refService

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));

Into Employe values ( e mploye_t ('Jacques', NULL)); Insert Into Employe values(emp loye_t (‘Louise',

Insert Into Employe values(employe_t (‘Louise', (select REF(s) FROM Service s WHERE s.nomS = ''analyse'')); ;

Select e.* From Employe e Where e.nomE = '‘Louise'';

Louise

0000220208424E801067C2EABBE040578CE70A0707424E801067C1EABBE040578CE70A0707

Modèle Objet ©

Module 3

page

34

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

REF et l’association UML
REF et l’association UML
L’attribut de type REF est utilisé pour implémenter l’association de la classe UML. Clé étrangère
L’attribut de type REF est utilisé pour implémenter l’association de la classe UML.
Clé étrangère et clé primaire d’une table-objet:
- La clé primaire en objet n’est pas essentielle pour concrétiser l’unicité de l’objet car
l’oid distingue tout objet. Elle est cependant utile pour la recherche d’un objet
particulier puisque l’oid est non accessible ou inconnu pour la recherche.
- La clé spécifiée est une contrainte d’entité (toutes les valeurs sont donc distinctes)
La clé étrangère est implémentée via le lien de référence: REFERENCES qui peut
être aussi défini en objet.

Modèle Objet ©

Module 3

page

35

Classe et table-objet  Classe: a un type dont les instances auront un oid (logique).
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 éléments sont des objets pouvant contenir
d’autres 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. (Ignorée dans
ce cours)
Une table-objet est physiquement placée dans un TableSpace (TS)

Modèle Objet ©

Module 3

page

36

André Gamache professeur associé, Département d'informatique et de génie logiciel

Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Containeur d’objets : table OR Les objets sont stockés dans des containeurs (ou container) que
Containeur d’objets : table OR
Les objets sont stockés 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 associée à une classe i.e. un type généralement complexe qui façonne les
objets du conteneur.
Rappel de la convention d’écriture:
Le nom d'une table débute par une lettre majuscule et son type généralement
complexe est composé de son nom débutant 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)
Modèle Objet ©
Module 3
page
37
Comment sont stockés les objets sur disque?
38
Modèle Objet ©

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

TableSpace: page et objet
TableSpace: page et objet

Tablespace x + 1

page objet 6 objets/page 9 objets/page Tablespace x 4 objets/page
page
objet
6 objets/page
9 objets/page
Tablespace x
4 objets/page
6 objets/page 9 objets/page 4 objets/page
6 objets/page
9 objets/page
4 objets/page

Plus il y a d’objets dans une page, plus rapide est la recherche des dits objets. Le tableSpace est l’unité de gestion de l’espace physique:

base objets <====> fichier(s) paginés <====> fichiers OS

Modèle Objet ©

Module 3

page

39

Rappel sur les tableSpaces de Oracle (TS)
Rappel sur les tableSpaces de Oracle (TS)
tables, index, …<==> fichier(s) physique(s) paginé(s) <==> pages de 4Ko, 8Ko, 16Kotablespace(s)
tables, index, …<==> fichier(s) physique(s) paginé(s) <==> pages de 4Ko, 8Ko, 16Kotablespace(s)
<==> fichier(s) paginé(s)
A la création, la base a quelques tableSpaces : System, Temp, User, … D’autres sont créés au
besoin et nommées 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 création d’une table:
Aucune mention du TS :
Avec mention d’un TS:
le tableSpace User par défaut
les objets sont créés 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 créée dans le tableSpace TS_Registraire)

Modèle Objet ©

Module 3

page

40

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Ensemble imbriqué dans une classe (classe interne)
Ensemble imbriqué dans une classe (classe interne)
Un attribut ensembliste est spécifié avec Oracle comme (non pas comme un set) mais comme
Un attribut ensembliste est spécifié avec Oracle comme (non pas comme un set) mais comme
une Nested Table stockée par défaut dans le même tableSpace que celui de la table hôte.
Etudiant:
matricule: varcher()
nom: varchar()
lesCours : lesCours_t
Placement d’un 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 imbriquée lesCours sont créés dans le TS Registraire2013)
Une nested table bien que stockée comme une table physique séparée, cohabite par défaut
avec sa table mère dans le même tablespace.
Plus de détails à venir sur la table imbriquée …

Modèle Objet ©

Module 3

page

41

Gestion des tables physiques au regard des TS
Gestion des tables physiques au regard des TS
Déplacement d’une TS vers une autre TS: ALTER TABLE Etudiant MOVE TABLESPACE Registraire A2013 Déplacement
Déplacement d’une TS vers une autre TS:
ALTER TABLE Etudiant MOVE TABLESPACE Registraire A2013
Déplacement d’une collection imbriquée (sous-table) vers une autre TS:
Ce déplacement est possible car l’ensemble imbriqué est physiquement séparé 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;

Modèle Objet ©

Module 3

page

42

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Signature associée aux types de classes (externes et internes)
Signature associée aux types de classes (externes et internes)
L’interface est spécifiée intégralement et solidairement ( important) dans le type Un type peut avoir
L’interface est spécifiée intégralement et solidairement ( important) dans le type
Un type peut avoir des procédures (méthodes) pour manipuler les données
du type. Les types (avec leurs méthodes) peuvent être partagés entre plusieurs
classes.
Solidairement: à chaque ajout ou suppression d’une méthode, toute l’interface doit
être recréée pour qu’elle soit modifiée!
Chaque méthode a une signature définie dans le type.
Signature := nom de la méthode et les paramètres typés, incluant celui de retour
Exemple:
Calcul de la marge sur un produit: (une fonction est utilisée)
marge (cout: real, facteur: int, lieu varchar) : real (syntaxe théorique)

Modèle Objet ©

Module 3

page

43

Dépendance entre les types
Dépendance entre les types

En objet les types complexes sont extensibles:

Create type adresse_t as Object (no int, rue varchar2(50))

/

Create type coordonnees_ t as Object ( no int , adr1 adresse_t) / Create type localisation_t as Object ( coordGPS int, region coordonnees_t) /

--sans signatures

dépendance:

localisation_t -coordonnees_t

adr_t

Voir Describe localisation_t

.

-- pour obtenir une description avec les types imbriqués.

Imbrication des types et des tables: (Oracle 8, limitée à 1, illimitée avec les versions récentes: 11g et +.

Modèle Objet ©

Module 3

page

44

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Actions combinées sur le type et leurs effets sur les objets stockés
Actions combinées sur le type et leurs effets sur les objets stockés

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é qu’une seule fois dans un même ALTER TYPE

Un attribut hérité ne peut pas être supprimé sauf dans sa classe source.

Options:

INCLUDING TABLE DATA : conversion des objets déjà créées.

(le défaut)

NOT INCLUDING TABLE DATA : La colonne de l’attribut de l’objet est marquée UNUSED. Idem pour les données de la table ou celles stockées à l’extérieur.

Suppression des colonnes dont le type a été modifié:

ALTER TABLE DROP UNUSED COLUMNS : pour supprimer les attributs marqués unused.

Modèle Objet ©

Module 3

page

45

Opérations avec les types: création, suppression, …
Opérations avec les types: création, suppression, …
 Création d'un type: Create or Replace type as Object (…) / Aucun type à
 Création d'un type:
Create or Replace type
as Object (…)
/
Aucun type à définir 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;

Modèle Objet ©

Module 3

page

46

André Gamache professeur associé, Département d'informatique et de génie logiciel

Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Rappel: objet de table (OT) et objet colonne (OC)
Rappel: objet de table (OT) et objet colonne (OC)
Oracle gère (absent avec les autres systèmes) 2 types d’objets :  Objet de table
Oracle gère (absent avec les autres systèmes) 2 types d’objets :
Objet de table : objet typé à l’image du containeur et ayant un oid
Objet-colonne (sans oid):
 un objet d’une 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 l’étudiant a
plusieurs adresses : l’attribut lesAdresses est de type ensemble dont les
éléments 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 l’objet-colonne adresse_t.

Modèle Objet ©

Module 3

page

47

Définition du type ensemble dans le système O2
Définition du type ensemble dans le système O2
Intuitivement et avec le système objet O2 : (autorisant le shadowing) Create class Etudiant as
Intuitivement et avec le système 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 à créer.
Comparaison avec Oracle:
Create type etudiant_t as object ( mat int,
nom varchar(50), lesAdresses lesAdresses_t);
où lesAdresses_t est un type d’ensemble qui sera rendu par une table imbriquée spécifiée par
une syntaxe deTable Of
(syntaxe à venir)

Modèle Objet ©

Module 3

page

48

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Description du type et ses types composants
Description du type et ses types composants
SET describe depth 2 -- commande Sqlplus pour contrôler le niveau de lecture de la
SET describe depth 2
-- commande Sqlplus pour contrôler 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)

Modèle Objet ©

Module 3

page

49

Objet persistant (objet non persistant)
Objet persistant (objet non persistant)
Objet persistant := une paire (oid, valeur ou objet typé) oid est l'identifiant unique d'un
Objet persistant := une paire (oid, valeur ou objet typé)
oid est l'identifiant unique d'un objet (Object Identifier);
oid
Valeur typée
Le oid est généré par le système (auto) ou généré selon des contraintes
formulées par le DBA.
Interfaces
Objet persistant
L’oid ne change pas durant le cycle de vie d'un objet. Il est aussi inscrit
dans la structure de l’objet. L’oid limite donc le nombre total d’objets dans la base.

Objet non persistant n’a pas de oid; c’est alors un objet transitoire.

Valeur typée Interfaces
Valeur typée
Interfaces

Un objet créé par le NEW de PL/SQL est transitoire et devient persistant seulement lorsque inséré dans un containeur i.e. dans une table ou dans un autre objet persistant.

N.B. L’oid est affiché uniquement avec l’application SQLPlus.

Modèle Objet ©

Module 3

page

50

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Objet transitoire sans oid
Objet transitoire sans oid
Create type moteur_t as object(no varchar(10), puiss int, poids int) / Create table Moteur of
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 d’un 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
End;
moteur_t('FG38', 100, 1);
-- disparition de l’objet avec la fin de la procédure
/
2 objets créés dont un seul, le premier rendu permanent (et stocké) avec son oid.

Modèle Objet ©

Module 3

page

51

Oid rangé comme un attribut caché
Oid rangé comme un attribut caché
Où est stocké l’oid d’un objet? Il est stocké comme un attribut « caché» de
Où est stocké l’oid d’un objet?
Il est stocké comme un attribut « caché» de l’objet dont le nom est
SYS_NC_OID$. C’est généralement 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 l’Imprimer avec une variable objet!

Modèle Objet ©

Module 3

page

52

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Mutation des oid : oid logique (ref) et physique
Mutation des oid : oid logique (ref) et physique

L’oid est augmenté pour devenir le oid-L au sens qu’il ne correspond pas à une adresse physique de la RAM, ni sur disque. Nous l’identifierons comme oid-L (logique).

L’oid-L est transformé par le noyau du SGBD pour y associer l’oid-P dès la 1ère lecture de l’objet (swizzling) et son placement dans la RAM du serveur.

La table de correspondance entre l’oid-L (persistent) et l’oid physique (variable) est gérée

dans la cache du noyau du SGBD (pour un serveur de pages ou un serveur d’objets).

Oid-L: oid + no de fichier, no page et un déplacement dans la page + oid type classe. Une table est construite avec les oid-L.

Oid-L:

oid

vol

page

Offset

oid type

Oid-P

classe

 

3A6F

5

234

324

3FB2

FE245

     

REF

     

Oid-P

Données de l’objet …

FE245

données de l’objet

Dans la RAM:

de l’objet … FE245 données de l’objet Dans la RAM: L’oid-L est une REF qui a

L’oid-L est une REF qui a une taille plus importante que celle du oid-P.

L’oid-P doit demeurer inchangé aussi longtemps que l’objet n’est pas rapatrié de la cache vers le disque. Ce qui signifie que les pages d’objets dans la RAM sont clouées (pinned pages)!

Modèle Objet ©

Module 3

page

53

Oid physique et swizzling (mutation)
Oid physique et swizzling (mutation)

Tous les objets transférés en RAM (du serveur) ont leur oid-L mutés (swizzled) immédiatement.

La structure d’un objet sur disque est différente de celle en RAM afin de tenir compte des structures physiques particulières de chaque langage et de chaque machine (machine dependant object

structure)

Lorsqu’un objet est ré-écrit sur disque, la dé-mutation n’est pas nécessaire car le oid-L est toujours intact dans l’objet.

CAS SPÉCIAL: Partage du même type dans 2 bases distinctes (sur une même machine) Chaque
CAS SPÉCIAL: Partage du même type dans 2 bases distinctes (sur une même machine)
Chaque type est aussi un objet qui a son propre oid. Pour le partager entre 2 bases, il faut recréer le type
avec le même oid dans les 2 bases:
Génération d’un oid pour le type dans une base:
SELECT SYS_OP_GUID() FROM DUAL;
SYS_OP_GUID()
19A57209ECB73F91E03400400B40BBE3
Création du type personne_t dans les 2 bases:
CREATE TYPE personne_t OID '19A57209ECB73F91E03400400B40BBE3'
AS OBJECT (attrib1 NUMBER);
(dans chaque base)
Modèle Objet ©
Module 3
page
54

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Vue schématique du swizzling :Transfert de l’objet en RAM 1- La page de l’objet oid8
Vue schématique du swizzling :Transfert de l’objet en RAM
1- La page de l’objet oid8 sur disque est transférée vers la cache RAM du serveur. L’adresse
RAM de chaque objet de la page est inscrite dans une table OPé
2- Par la suite, la table OP est consultée pour trouver l’adresse RAM de l’oid-L oid8. L’écriture
se fait via la page vers le disque.
(1)
(2)
oid obtenu
de la REF
OP (objet persistant)
oid8
Oid-L
oid-P
oid8
Objet
oid2
FB234A
(3)
oid4
oid4
4AF2233
Pointeur RAM
Page transférée
en RAM
oid5
93422FF
Page sur disque
oid8
F3B255
Dans la cache
RAM du serveur
x.attrib1

Pour accéder à une valeur de oid8 avec la variable objet x, il y a consultation de la table OP et accès à l’objet via l’adresse RAM (oid-P) et finalement à la valeur attrib1. Il y a en quelque sorte une indirection dans l’accès via la table OP. La table OP s’agrandit et se retrécit avec le va et vient des pages d’objets.

Modèle Objet ©

Module 3

page

55

Génération de l’oid
Génération de l’oid
 L’oid peut être généré par le système ou dérivé de la clé d’une table.
 L’oid peut être généré par le système ou dérivé de la clé d’une table.
L'oid peut être aussi dérivé des données selon la spécification définie pour chaque table-
objet (à la génération de la BD).
Nombre fini de oid? Mot de 64 bits ou 128 bits …
--- la création d’un type génère un objet ayant son propre oid
 La REF est donc construite ainsi:
REF := oid + metadonnée . (total de 42 octets) avec une machine de 32 bits
Les métadonnées permettent au système d’identifier rapidement à quelle classe d’objets un oid
appartient et cela en incorporant le oid du type de son containeur sans accéder au conteneur.
NB: Une table relationnelle n'a pas de oid pour les tuples, mais un rowid réutilisable.

Modèle Objet ©

Module 3

page

56

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Génération de l’OID Oracle : système et dérivé
Génération de l’OID Oracle : système et dérivé
 Implémentation de l'OID: Ex: variable selon le système: nombre sur 32 bits ou mieux
 Implémentation de l'OID:
Ex: variable selon le système: nombre sur 32 bits ou mieux sur 64 bits ( max objets 2 64 -
1 objets) ou +;
ORACLE: (oid généré:16 octets = 128bits soit 2 mots de 64 bits par oid).
Choix fait lors de la création de la table-objet:
Create Table Employe of employe_t ( contraintes
) Object Identifier is
{SYSTEM GENERATED | PRIMARY KEY};
 Indexation automatique des oids générés et des oid dérivés.
 Oid jamais réutilisé (dans la même 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
réutilisé par un autre objet après suppression du premier. Finitude de l'espace objet!

Modèle Objet ©

Module 3

page

57

Affichage de l'oid d'un objet: fonction REF( )
Affichage de l'oid d'un objet: fonction REF( )

Oid (Ref) visualisé (codé en hexadécimal); ne peut pas être modifié par programmation. Affichage exceptionnel que par SQLPlus.

Affichage de l'oid d'un objet de la table Employe ( avec d’autres données d’accompagnement):

Select Ref(e)

From EmployeP e

Where e.mat = 350;

En objet, l’alias est nécessaire

Strictement exigé si la table Employe est déclarée avec un oid SYSTEM GENERATED

00002 8BC6FCA……………7654DD687DDAC23

0845

(32 car. Hex ou 16 octets)

Affichage de la valeur de l'objet sans son oid :

Select Value (e)

From EmployeP e Where

-- l'objet fournit sa valeur (sans oid )

e.noE = 350;

Idem à un objet non persistant!

Modèle Objet ©

Module 3

page

58

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

REF à portée contrainte (scopée)
REF à portée contrainte (scopée)
 Une référence occupe au total 64 octets (plus encombrant que le oid (16 o.)!)
 Une référence occupe au total 64 octets (plus encombrant que le oid (16 o.)!)
 Il est possible de définir des références de 16 octets en définissant une référence
dite SCOPÉE.
Une telle référence ne cible que des objets d’une table particulière pré-identifiée
Au niveau de la table-objet:
… refChef REF
SCOPE
IS Ouvrier
Avantage de la REF scopée:
Une REF «scopée » référence obligatoirement un objet de la table cible dite « scopée ».

Modèle Objet ©

Module 3

page

59

Constructeur d’objet de type table
Constructeur d’objet de type table
Création et insertion d’un objet–table avec SQL ** Le nom du constructeur est le type
Création et insertion d’un objet–table 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 d’objet dit implicite qui exige une valeur pour chaque attribut:
Insert into Employe values (employe_t ('Picard', 24, 'des Lilas', 'Québec') );
L’objet créé est inséré dans une table, le rendant persistant et lui attribuant un oid
permanent. Le même objet défini 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', 'Québec') ));

Modèle Objet ©

Module 3

page

60

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Création d’un objet transitoire en PL/SQL
Création d’un objet transitoire en PL/SQL

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.

Création et initialisation d’un objet transitoire :

ex. : NEW employe_t ('Picard', 24, 'des Lilas', 'Québec');

Un objet-transitoire :employe devient persistant lorsqu’inséré dans une table-objet.

Les objets sont manipulés en PL/SQL par des variables de même type que ceux de la BDO:

v_employe_t : = NEW employe_t ('Picard', 24, 'des Lilas', 'Québec');

*** 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', 'Québec'));

N.B. Il en est autrement avec les autres langages: la struct de l’objet est implémenté avec une struct du langage hôte et est généralement beaucoup plus complexe.

Modèle Objet ©

Module 3

page

61

Pseudo shadowing Création de type incomplet et d'une référence inverse
Pseudo shadowing
Création de type incomplet et d'une référence inverse

Avec Oracle, un type peut utiliser un autre type que s’il est déjà existant dans le DD. Aucune définition anticipée, aucun shadowing de type.

La référence 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)

/

/ Create type d_t as Object ( d1 int, d2 REF c_t ) / -- mise

-- mise à jour du type incomplet par un Create :

c_t ( c1: int , c2: ref) d_t ( d1:int , d2: ref)
c_t ( c1: int , c2: ref)
d_t ( d1:int , d2: ref)

-- le type d_t est créé

Create

type c_t

as Object (

c1

int, c2 REF d_t)

-- type complété

/

Utile pour les références circulaires.

Modèle Objet ©

Module 3

page

62

André Gamache professeur associé, Département d'informatique et de génie logiciel

Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Exemple d’un type mutuellement dépendant
Exemple d’un type mutuellement dépendant

CREATE TYPE employe_t AS OBJECT ( nomE VARCHAR2(20), dep REF dep_t)

-- le type dep_t est absent de la base

dep REF dep_t ) -- le type dep_t est absent de la base / ** ERREUR

/

** 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 dép_t n’existe pas. Idem pour le type dep_t

La solution est d’utiliser un type incomplet:

Create type dep_t

/

Par la suite il faudra le compléter par un Create (et non un update):

-- un type incomplet n’a aucun attribut

non un update ): - - un type incomplet n’a aucun attribut Create type dep_t as

Create type dep_t as Object (noD int , gerant REF employe_t)

/

Modèle Objet ©

Module 3

page

63

Visibilité des attributs et Encapsulation
Visibilité des attributs et Encapsulation

Encapsulation des objets : Les données sont manipulées que par les méthodes sans notion de visibilité explicite pour les attributs et les méthodes contrairement à la visibilité implantés dans les L3G objet ou avec les SGBD objets qui adhèrent à la norme ODMG.

*En Oracle , le droit d'accès est accordé à un usager via le type. L'utilisateur voit

tout : les attributs et méthodes du type sur lequel il a les droits.

Les méthodes sont présumées toujours présentes dans le diagramme de classe, même si elles sont absentes dans les exemples UML et Mnav et cela , pour des raisons

pratiques d’allégement des figures.

En principe, un objet de table-objet devrait se comporter comme un véritable objet de classe et être accessible que par son interface. (Rappel)

-Une signature est la liste typée de ses paramètres incluant s’il y a lieu, celui de retour.

- L’interface de classe est l'ensemble de ses signatures.

Modèle Objet ©

Module 3

page

64

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Comparaison entre les modèles Relationnel et Objet
Comparaison entre les modèles Relationnel et Objet
 Le nombre de types dans le Relationnel est environ 15. En objet, nombre illimité
 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 implémenter les associations entre tables :
partage d'attributs ayant un même domaine. L’objet utilise les REF pour la
navigation entre les classes et parcourir les associations. La jointure par valeur n’est
cependant pas interdite.
 En R, la contrainte référentielle peut être implémentée par la clé étrangère FK; en
objet pas de FK obligatoire, la contrainte est remplacée par le REF.
 A la création d'un objet et son insertion dans une table (typée et avec oid), la
persistance est assurée.
 Le oid est muté en pointeur physique dans la RAM : le swizzling accélère l'accès aux
objets. Cette transformation est gérée par le SGBD.
* Une référence perdue est une référence dangling (danger d’incohérence) Elle pointe
sur un emplacement ne correspondant pas à un objet.

Modèle Objet ©

Module 3

page

65

Implémentations de quelques modèles navigationnels avec la technologie de l’objet M o d è l

Implémentations de quelques modèles navigationnels avec la technologie de l’objet

Modèle Objet ©

Module 3

page

66

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Du diagramme de classe UML au Mnav (Rappel)
Du diagramme de classe UML au Mnav (Rappel)

Transposition du navigationnel à l'objet:

Essentiellement la création des types et des containeurs

Instantiation d’objet:

La classe externe instantie un objet qui sera stockée dans une table- objet, tandis que la classe interne instantie des objets-colonnes (OC).

Les contraintes de multiplicité ne sont pas toutes renforcées par le Mnav (objet). Il faut avoir recours à la logique propre des méthodes pour compléter la validation notamment celles des multiplicités.

Modèle Objet ©

Module 3

page

67

Implémentation de l’association (1 1 – 1 1) en Objet
Implémentation de l’association (1
1
– 1
1)
en Objet

Exemple: implantation d’un modèle UML simple avec des multiplicités contraignantes:

EmployeP: Domicile: noE*: int no*: int 1 1 A_un > 1 1 nomE: varchar(50) rue
EmployeP:
Domicile:
noE*: int
no*: int
1
1
A_un >
1
1
nomE: varchar(50)
rue : varchar(50)
telD : varchar(8)
n.b.
1,1 ≡
1

En raison des multiplicités 1 1 L’ajout d’un domicile est possible que si les contraintes du modèle sont vérifiées à la fin de la transaction logique d’ajout.

Modèle Objet ©

Module 3

page

68

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Mnav: implantation des associations avec REF (OR)
Mnav: implantation des associations avec REF (OR)
REF : une référence vers un ou des objets d’une classe . EmployeP : employeP_t
REF : une référence vers un ou des objets d’une classe .
EmployeP : employeP_t
Domicile : domicile_t
noE*: int
nomE: varchar(50)
refAdresse
no*: int
rue : varchar(50)
telD : varchar(8)
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

La contrainte (not null) sur refAdresse reste à définir ou sera renforcée par la méthode d’ajout. *** La REF doit toujours avoir un valeur valide pour renforcer la multiplicité.

of

Type employeP_t

-- création du containeur d’objets (de la table)

Modèle Objet ©

Module 3

page

69

Définition des contraintes
Définition des contraintes
Les contraintes sur les attribut et celles définies avec plusieurs attributs se définissent au niveau
Les contraintes sur les attribut et celles définies avec plusieurs
attributs se définissent au niveau de la table i.e. du containeur.

Modèle Objet ©

Module 3

page

70

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Les contraintes définies sur les objets au niveau des tables
Les contraintes définies sur les objets au niveau des tables
 Une contrainte est toujours définie via la table et non au niveau du type.
 Une contrainte est toujours définie via la table et non au niveau du type. Ce dernier
est partageable avec d'autres tables qui n'ont pas nécessairement les mêmes
contraintes même si elles partagent le même type.
 Contraintes de table: clé primaire, clé étrangère, 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 définition de clé est INTERDITE via le type: (est définie au niveau de la table)
Create type employe_t (mat int, salaire number (8,2),
Constraint pkEmploye Primary Key (mat)
/

Modèle Objet ©

Module 3

page

71

Création de la table-objet avec des contraintes
Création de la table-objet avec des contraintes
REF : une référence vers un objet est construite avec l'oid. EmployeP : employeP_t Domicile
REF : une référence vers un objet est construite avec l'oid.
EmployeP : employeP_t
Domicile : domicile_t
noE*: int
no*: int
nomE: varchar(50)
rue : varchar(50)
refAdresse
telD : varchar(8)

Create table EmployeP of type employeP_t ( constraint pk_noE primary key (noE),

of type employeP_t ( constraint pk_noE primary key (noE), constraint c_nomE check ( length (nomE) <=

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 définie

Domicile of type domicile_t ; -- aucune contrainte définie Contrainte de table vérifiée en dernier La

Contrainte de table vérifiée en dernier

La multiplicité (1,1) pour Domicile n’est donc pas renforcée avec ce Mnav

Modèle Objet ©

Module 3

page

72

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Insertion en violation de multiplicité d’un objet de type Domicile
Insertion en violation de multiplicité d’un objet de type Domicile

Insert into Domicile values ( domicile_t(500, "des Lilas " ,

'41854506787 ' ));

Le commit implicite (le défaut) à la fin du DML fait en sorte que l’ajout de cet objet se fera en violation de sa multiplicité i.e. que le domicile ne sera pas associé à un employé comme l’exige le modèle! Il faudra le faire avec un update de l’attribut de référence sans avoir comme dans cet exemple, la garantie de l’atomicité des actions: Insert + insert

Solutions :

A- Faire l’insertion de l’employé et de son domicile avec deux DML Insert mais dans la même transaction définie dans l’application avec report de la vérification des contraintes par le noyau.

B- Faire l’ajout du domicile et de l’employé par une seule méthode exigeant aussi la
B- Faire l’ajout du domicile et de l’employé par une seule méthode exigeant
aussi la définition d’une transaction au sein de la méthode.
Modèle Objet ©
Module 3
page
73
Association: Interrogation avec navigation par le REF
Association: Interrogation avec navigation par le REF

Navigation possible entre les tables en utilisant le type REF: formulation d'une requête plus simple et calcul plus rapide .

EmployeP : employe_t Domicile : domicile_t noE*: int no: int nomE: varchar(50) rue : varchar(50)
EmployeP : employe_t
Domicile : domicile_t
noE*: int
no: int
nomE: varchar(50)
rue : varchar(50)
refAdresse
telD : varchar(8)
Select E.nomE, E.refAdresse.telD
From EmployeP E
Chemin de navigation
Where E.refAdresse.rue = 'desPignes‘ ;
Multiplicité 1
1
du côté Domicile:

La contrainte sur refAdresse exige de référer à un et un seul objet de Domicile.

Une contrainte IS NOT NULL étant définie sur l’attribut refAdresse. Lajout dun employé doit se

faire obligatoirement avec un domicile!

Modèle Objet ©

N.B. L’utilisation de l’alias est obligatoire.

Module 3

page

74

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Interrogation avec une sélection exploitant la navigation
Interrogation avec une sélection exploitant la navigation

Select E.nomE, E.refAdresse.telD

From EmployeP E

Where E.refAdresse.rue = 'desPignes‘

and

E.refAdresse.no = 450

and

E.noE = 100;

** La colonne refAdresse n’est pas une donnée de l’usager => écart avec le relationnel

Cette navigation est rendue possible par l’oid

Renforcement de la multiplicité 1 1 du côte EmployeP avec ce Mnav: Par la méthode
Renforcement de la multiplicité 1
1
du côte EmployeP avec ce Mnav:
Par la méthode dont le code permet de vérifier qu’à l’ajout d’un domicile, il y a
obligatoirement un employé et un seul qui l’habite.

Modèle Objet ©

Module 3

page

75

Autre Mnav équivalent: une ref vers Employe
Autre Mnav équivalent: une ref vers Employe
Domicile : domicile_t no: int EmployeP : employe_t rue : varchar(50) noE*: int telD :
Domicile : domicile_t
no: int
EmployeP : employe_t
rue : varchar(50)
noE*: int
telD : varchar98)
nomE: varchar(50)
refEmp
Select d.refEmp. nomE, d.telD

From Domicile d

Where d.rue = 'desPignes‘

La multiplicité 1

qu’une seule valeur non nulle. Avec une seule ref, une seule multiplicité est donc renforcée!

1

de la classe Domicile renforcée par la ref qui ne peut avoir

La multiplicité (1,1) pour Employe n’est pas renforcée avec ce Mnav autrement que par une méthode.

Modèle Objet ©

Module 3

page

76

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Mnav avec deux REF (parcours non privilégié) et type incomplet
Mnav avec deux REF (parcours non privilégié) et type incomplet
REF : une référence vers un objet, construit avec l'oid. EmployeP : employeP_t Domicile :
REF : une référence vers un objet, construit avec l'oid.
EmployeP : employeP_t
Domicile : domicile_t
noE*: int
no*: int
nomE: varchar(50)
rue : varchar(50)
refAdresse
telD : varchar(8)
refEmploye
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)

t (noE int, nomE varchar(50), refAdresse REF domicile_t ) / Les multiplicités (1,1) pour Employe et

/ Les multiplicités (1,1) pour Employe et Domicile sont renforcées (via la définition des contraintes au niveau table) au prix d’une gestion plus complexe des ajouts, suppressions et mises à jour faites dans une même transaction.

Modèle Objet ©

Module 3

page

77

Mnav avec 2 références : complexité accrue des actions sur le modèle
Mnav avec 2 références : complexité accrue des actions sur le modèle

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));

( constraint c_refEmploye check (refEmploye si not null)); Interdit pas la contrainte Insert into EmployeP e

Interdit pas la contrainte

Insert into EmployeP e values (employeP_t( 109, ‘Jules’,null));

Insert into Domicile values (domicile_t(567, ‘des Fleurs’, ‘3456789’, null));

(domicile_t(567, ‘des Fleurs’, ‘3456 789’, null)); N.B. Avec 2 refs, les deux multi plicités peuvent être
(domicile_t(567, ‘des Fleurs’, ‘3456 789’, null)); N.B. Avec 2 refs, les deux multi plicités peuvent être

N.B. Avec 2 refs, les deux multiplicités peuvent être renforcées dans une même transaction avec report de la validation des contraintes. La mise à jour du modèle devient plus complexe et doit se faire dans une transaction non interruptible.

Modèle Objet ©

Module 3

page

78

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Commentaires sur l’usage des 2 références inverses
Commentaires sur l’usage des 2 références inverses
1. Avec 2 références obligatoires les 2 multiplicités 1 1 sont renforcées dans une même
1. Avec 2 références obligatoires les 2 multiplicités 1
1
sont renforcées dans une même
transaction avec report de la vérification des contraintes.
2. La non interruption (une propriété ACID) dans un contexte d’accès concurrentiel (multi
usager) exige que ces actions soient intégrées dans une transaction du genre TL
(Transaction Logique) définie par le développeur. (voir plus loin comment définir une TL)
3. Tout ajout d’un objet doit être suivi (sans interruption) de celui d’un autre objet: l’ajout d’un
employé doit être suivi de l’ajout d’un domicile et dans les 2 cas les références sont nulles.
Les ajouts se font dans la même TL.
4. Les insertions d’objets doivent être suivies sans interruption par 2 ordres Update de la
référence donc dans la même TL
5. Cette complexité est cependant masquée au développeur si les clauses sont intégrées
dans une méthode définissant une transaction et cela avant d’effectuer cette mise à jour.

Modèle Objet ©

Module 3

page

79

Les transactions avec les objets
Les transactions avec les objets

Les propriétés ACID d’une transaction doivent être renforcées par le moteur SGBD, notamment avec les objets:

1- Atomicité: tout ou rien

2- Cohérence préservée : avant et après la transaction

3- Isolation: transaction exécutée comme si elle était seule

4- Durabilité (persistance): au commit (validation) d’une transaction les données modifiées ou ajoutées sont persistantes.

Pour y arriver, le SGBD a un système de verrous utilisé selon un algorithme précis pour autoriser la concurrence sans interférence avec les autres transactions.

Modèle Objet ©

Module 3

page

80

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Cohérence et transaction logique
Cohérence et transaction logique
Un modèle représente les objets dans leur état stable i.e. qu’il modélise l’état de l’ensemble
Un modèle représente les objets dans leur état stable i.e. qu’il modélise l’état de l’ensemble des objets à un
moment t lorsqu’il 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 différentes) sont exécutées par une suite d’actions élémentaires non interruptibles
présumant la validation ultérieure réussie des contraintes, notamment celles des multiplicités.
Exemples:
Ajout d’un employé : une seule action d’insertion dans la BD compose la transaction
logique; à la fin de cette action les contraintes de multiplicité seront vérifiées et la BD est laissée
dans un état stable et cohérent.
Ajout d’un employé et d’un département dans la même transaction logique; à la fin de la TL les contraintes de
multiplicité seront vérifiées.
Important:
Si la cohérence est mise en péril, la TL doit être annulée. Le principe du Tout ou Rien s’applique!

Modèle Objet ©

Module 3

page

81

Exemple d’incohérence avec une TL
Exemple d’incohérence avec une TL
Professeur: matP* : string nomP : string statutP : char
Professeur:
matP* : string
nomP : string
statutP : char
Cours: noCours* : string titreC : string nbCr : integer
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 l’addition est autorisée par le SGBD, la base sera alors dans un état incohérent au regard

du MCD dont la multiplicité est 1

1

du côté Cours.

Il faut ajouter obligatoirement un cours au prof dans la même transaction avant la vérification des contraintes du modèle objet par le noyau du SGBDO.

Modèle Objet ©

Module 3

page

82

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Actions dans le cadre d’une transaction logique
Actions dans le cadre d’une transaction logique

2- Si les deux actions sont incorporées dans une même transaction logique soit:

TL2:

incorporées dans une même transaction logique soit: TL2: Ajout professeur ( 'mat45 ', ' Tremblay ',

Ajout professeur ( 'mat45 ', ' Tremblay ', ' P ') ; Ajout cours values (45, ' C++ ', 3);

P ') ; Ajout cours values (45, ' C++ ', 3); ** la création de la

** la création de la référence est supposée se faire dans cet exemple

A la fin de la TL2, la cohérence du modèle est respectée (donc celle de la BDO) parce

que les multiplicités sont validées conformément au modèle. Cette cohérence découle de la

transaction logique (TL).

Dans le cas contraire, la transaction en cours sera défaite (retour au point de cohérence de Départ: atomicité)

Comment alors définir une transaction ?

Modèle Objet ©

Module 3

page

83

Contrainte Deferrable définie pour la table-objet

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 reportée, mais à l’ouverture de la BDO, elle est active

(2) contrainte qui est reportée à l’ouverture de la BDO, elle est active

(3) contrainte non reportée, validée dès que l’attribut est modifié

(4) contrainte qui peut-être reportée, mais à l’ouverture de la BDO, elle est active

Modèle Objet ©

84

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Transaction logique et transaction physique
Transaction logique et transaction physique
Une transaction logique devient une transaction (physique) avec un SGBDO particulier par un marquage spécial
Une transaction logique devient une transaction (physique) avec un SGBDO particulier par un
marquage spécial du début et de la fin de la transaction. Ce marquage varie selon le SGBD.
Avec Oracle :
• l’exécution d’un 1 er DML
Début :
• Commit
Fin:
 Les contraintes de table sont vérifiées qu’à la fin de la transaction
si et seulement si les contraintes de table dont dites reportables (Deferrable) dans
le schéma de la BDO.
Le report de la vérification des contraintes du schéma s’applique à chaque transaction.
Exemple :
SET Constraints ALL Deferred (pour toutes les contraintes reportables)
dans SqlPlus:
SET Constraint c1_xxxxx
SET Constraint c2_yyyyy
DEFERRED ; -- avec contrainte nommée
DEFERRED ;
Dans l’applicatif PL/SQL:
Execute Immediate ‘Set All Constraints Deferred’;

Modèle Objet ©

Module 3

page

85

Intégrité d’une transaction avec la méthode La cohérence peut être assumée à deux niveaux: Niveau
Intégrité d’une transaction avec la méthode
La cohérence peut être assumée à deux niveaux:
Niveau méthode:
La logique interne d’une méthode peut sous-tendre plusieurs actions et pour maintenir
la cohérence, la méthode doit définir la transaction sans égard à l’application.
ex.: début TL par la méthode Ajout objet
ajout d’un objet o1;
ajout d’un objet o2; - pour ainsi valider la multiplicité
fin de la TL par la méthode Ajouto1o2
Niveau application (source d’incohérence?):
L’application a la responsabilité de maintenir la cohérence du modèle en définissant le
début et la fin de la transaction.
ex.:
début de la TL par l’application
****
ajout objet o1;
ajout objet o2;
fin la TL par l’application
Dans ce cas, le contrôle sur la transaction assumé par l’application est une source potentielle d’erreurs.

Modèle Objet ©

Module 3

page

86

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

La clé primaire avec le modèle objet
La clé primaire avec le modèle objet
L’oid généré avec la clé primaire est plus compact que celui généré par le système.
L’oid généré avec la clé primaire est plus compact que celui généré par le
système.
Un attribut de type REF avec un oid dérivé de la clé primaire est connue
comme une primary-key-based REF ou pkREF
et occupe moins d’espace que l’oid
généré par le système.
Une REF du genre pkREF doit avoir une contrainte de type REFERENCES pour
éviter les REFs indéterminée (non valide) (dangling).
** dangling : référence qui ne pointe pas sur un objet valide.

Modèle Objet ©

Module 3

page

87

Racine de persistance d'un objet de table (OT)
Racine de persistance d'un objet de table (OT)
 Un objet est créé dans un applicatif et devient persistant lorsque: - inséré dans
 Un objet est créé dans un applicatif et devient persistant lorsque:
- inséré dans une table typée (OT):
Insert Into EmployeP values (v_empl);
Insert into EmployeP values (employeP_t ( 235, ‘Paul’, …… ));
- inséré dans un objet de table qui est persistant (le cas du OC). Dans ce cas l’objet
imbriqué n’a pas d’oid propre.
-- NB: Les objets des langages L3G objets ne sont pas persistants à moins que le langage le soit i.e. génère
et gère la création d'objets persistants.

Modèle Objet ©

Module 3

page

88

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Couplage avec le DD et ré-Insertion d’un objet avec Value()
Couplage avec le DD et ré-Insertion d’un objet avec Value()
Declare /* avec une proc PL/SQL dans l’environnement sqlplus */ v_empl employe_t; -- variable pl/sql
Declare
/* avec une proc PL/SQL dans l’environnement sqlplus */
v_empl employe_t;
-- variable pl/sql dont le type objet défini dans le dictionnaire (DD)
-- Couplage fort entre le langage procédural et le dictionnaire de données
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 même 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 l’objet dans la table EmployeLibere ce qui lui donne un nouvel oid; c’est donc un nouvel
objet même s’il est idem par ses valeurs.

Modèle Objet ©

Module 3

page

89

Accès à un objet: Fonction DEREF()
Accès à un objet: Fonction DEREF()
La fonction REF(x) (où x est un objet) donne l'oid de l'objet x persistant. De
La fonction REF(x) (où x est un objet) donne l'oid de l'objet x persistant.
De façon similaire, la fonction DEREF(a) (où a est une référence incluant le oid) rend l'objet
correspondant et l'assigne à une variable du type de l’objet.
Exemple: applicatif PL/SQL:
Set serveroutput ON
Declare
v_ref
REF client_t;
v_client
client_t;
-- var. de type ref
-- 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);
DBMS_OUTPUT.PUT_LINE(v_clientA.nomC);
-- partage du type client_t
End;
/

Modèle Objet ©

Module 3

page

90

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

À propos du type REF et le swizzling
À propos du type REF et le swizzling
La référence REF pointe sur (identifie) un objet sans égard à son placement physique sur
La référence 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
véritable pointeur physique sait le faire.
Un objet dans la cache RAM voit ses Refs transformées en pointeurs physiques
pour accélérer l'accès: c'est la transformation ou mutation des Refs (le swizzling)
Cette mutation est prise en charge par le serveur (pour l’approche serveur
d'objets (Oracle). Dans un système serveur de pages d’objets, la mutation peut être
faite par un module installé sur chaque client .
page
Des objets sont échangés entre l’application et le
client
objet

Modèle Objet ©

sont échangés entre l’application et le client objet M o d è l e O b

Module 3

page

91

Définition claire et simple d’une classe d’objets (Système O2)
Définition claire et simple d’une classe d’objets (Système O2)
Définition d'une classe avec la technologie objet d système O2 sans référence explicite vers un
Définition d'une classe avec la technologie objet d système O2 sans
référence explicite vers un objet.
Classe objet
< Conjoint_de
Class Personne type
tuple (
nom : string,
age : integer,
conjoint : Personne,
Enfant:
Personne:
0
*
0
1
enfants : set (Enfant),
ville : tuple ( nom: string, code : integer),
pays : Pays)
End;
* Structure complexe de type tuple.

Modèle Objet ©

Module 3

page

92

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

(cohabitation: objet avec technologie relationnelle)

Une table relationnelle peut maintemant contenir aussi un objet-colonne ((OC). Le tuple de la table
Une table relationnelle peut maintemant contenir aussi un objet-colonne ((OC). Le
tuple de la table qui contient un OC n’est cependant pas un objet!
Table-objet (table typée):
Create Type bourse_t as Object (noB int, nomB varchar2(50))
Objet- colonne
/
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 n’a 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 l’objet en préservant
l’acquis relationnel!

Modèle Objet ©

Module 3

page

93

Différentes initialisation des objets de table (Oracle) M o d è l e O b
Différentes initialisation des objets de table (Oracle)
Différentes initialisation des objets de table (Oracle)

Modèle Objet ©

Module 3

page

94

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Insertion d’un objet OT et OC avec Oracle
Insertion d’un objet OT et OC avec Oracle
Objet de table (OT) créé et initialisé dans un Insert en utilisant d’un constructeur. Cas
Objet de table (OT) créé et initialisé dans un Insert en utilisant d’un constructeur.
Cas 1: Un objet de table (OT) a le type d’une classe du Mnav
Insert into Employe values
(employe_t(‘Dupont’, 35, ‘Québec’, 4000.00));
*** Le type de la table doit être défini au préalable:
Cas 2: Incluant un objet de colonne (OC):
Insert into Employe values (employe_t
(‘Dupont’, 35, salaire_t( ’ Québec’, 4000.00)));
Même info rangée dans la table mais structurée différemment.

Modèle Objet ©

Module 3

page

95

Interface OT et OC
Interface OT et OC
Quelle est la différence entre les deux insertions précédentes? Dans les deux cas, la même
Quelle est la différence entre les deux insertions précédentes?
Dans les deux cas, la même information est insérée dans des tables objets mais
avec des structures différentes.
1 er cas: l’objet peut être traité que par les méthodes de l’interface de OT
2 ème cas: l’objet de table ajouté comporte un objet–colonne. Une manipulation
particulière de cet OC pourra se faire par son interface propre. Les méthodes
OT demeurent toujours disponibles pour les objets de la table.
Exemple :
Pour mettre à jour les nom et salaire des employés. L’interface de la classe n’offre
pas de méthode adéquate pour modifier le salaire tandis que l’interface de la classe
interne ou OC a une telle méthode.

Modèle Objet ©

Module 3

page

96

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Procédure PL/SQL d’initialisation d'un objet de table (OT)
Procédure PL/SQL d’initialisation d'un objet de table (OT)
Create type employe_t as Object (no int, nom varchar(45), adresse varchar(60) /  Un objet
Create type employe_t as Object (no int, nom varchar(45), adresse varchar(60)
/
 Un objet est initialisé à sa création soit:
 Par des valeurs fournies au constructeur d'objet ou au NEW de PL/SQL
Ex. employe_t (‘Delphine’, 35, 45000) -- création avec le constructeur
 Soit par défaut selon les valeurs formulées dans le schéma objet
 Si aucune valeur n'est fournie, il y a erreur.
Declare
v_emp
emp_t; -- ce type est connu car présent dans le DD
begin
v_emp := NEW employe_t( );
-- le constructeur n’a pas de valeur par défaut.
insert into Employe values (v_emp);
End;
PLS-00306: nombre ou types d'arguments erronés dans appel à ‘EMPL_T‘
v_emp := NEW employe_t(345, ‘Gustave’, null); L’employé 345 n’a pas encore d’adresse.
N.B. En Java un objet de travail est cependant créé avec des valeurs implicites par défaut.

Modèle Objet ©

Module 3

page

97

Méthode de l'objet OC
Méthode de l'objet OC
 Un objet-colonne peut avoir ses propres méthodes. Le partage du type, avec la création
 Un objet-colonne peut avoir ses propres méthodes. Le partage du type,
avec la création d'une autre table-objet ayant le même type de l'OC est
possible et les méthodes de OC du type deviennent alors celles de la
classe interne ou de la sous-table imbriquée.
 Les méthodes
de l’interface d’un OC ne s'appliquent pas à un objet nil ,
mais s’appliquent aux objets NULL (ceux qui peuvent pas être mis à jour
par la suite).

Modèle Objet ©

Module 3

page

98

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Création et initialisation par défaut des objets de table (OT) et des objets-colonnes (OC) Important
Création et initialisation par défaut des objets de table (OT) et des objets-colonnes (OC)
Création et initialisation par défaut des objets de table (OT) et des
objets-colonnes (OC)

Important En mode exploitation, les création, suppression et mise à jour seront réalisées par des méthodes et non directement avec les DML comme dans les exemples qui suivent.

Modèle Objet ©

Module 3

page

99

Objet null et nil (atomically null)
Objet null et nil (atomically null)
Create type adr_t as object (no int , rue varchar(40)) / Create type emp_t as
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

Modèle Objet ©

Module 3

page

100

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Exemple de mise à jour des objets nils et nulls
Exemple de mise à jour des objets nils et nulls
Mise à jour des objets nil et null Create type adr_t as object (no int
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.

Modèle Objet ©

Module 3

page

101

Affichage des objets de la table-objet et de ses valeurs
Affichage des objets de la table-objet et de ses valeurs
Affichage des objets OT dépourvus de leur oid mais avec leur constructeur: Select value(e) From
Affichage des objets OT dépourvus de leur oid mais avec leur constructeur:
Select value(e) From Emp e ;
** La fonction value() fournit l’objet sans oid. Le constructeur est affiché avec sqpplus pour rappeler que c’est un objet qui est
affiché. Normalement, les objets étant lus et manipulés 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 spécial: affichage avec SQLPlus:
Affichage des valeurs des objets OT sans leur constructeur.
Pour la mise au point des clauses SQL, il est possible d’afficher que les valeurs:
SQL> Select * From EmployeSup;
MAT
ADR(NO, RUE, VILLE)
1
---objet nil
2
ADR_T(NULL, NULL)

Modèle Objet ©

Module 3

page

102

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Création et initialisation des objets: null et nil dans PL/SQL
Création 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
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 création:
 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 paramètres.
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 d’un 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.

Modèle Objet ©

Module 3

page

103

Cas particulier: mise à jour de l'objet-colonne (OC)
Cas particulier: mise à jour de l'objet-colonne (OC)
Avec Création de l’OC: Update EmployeSup p SET p.adr = adr_t (99, null, null) Where
Avec Création de l’OC:
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 création de l’objet 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
101 Desbiens
ADR_T(99, NULL, NULL)
ADR_T(88, null, null)

Modèle Objet ©

Module 3

page

104

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Indexation et persistance des OT et OC (Oracle)
Indexation et persistance des OT et OC (Oracle)
 Objet de table: indexation automatique avec les oids dérivés SYSTEM. Création avec le INSERT
 Objet de table: indexation automatique avec les oids dérivés SYSTEM.
Création avec le INSERT et un constructeur de type approprié.
 Indexation de l’objet-colonne par valeur:
 Insertion de l'objet hôte 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 l’OC

Modèle Objet ©

Module 3

page

105

Les triggers (Oracle) associés à une table-objet: ses limites
Les triggers (Oracle) associés à une table-objet: ses limites
Un trigger Oracle peut-être associé à une table-objet mais il y a des limites: 1-
Un trigger Oracle peut-être associé à une table-objet mais il y a des limites:
1- Un trigger ne peut pas définir normalement une transaction (donc se terminer par
un commit).
2- Un trigger ne peut pas être associé à une table imbriquée (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 n’est pas reporté (DEFERRABLE ) comme peut l’être les contraintes de
table et d’attributs.
Leur usage est aussi restreint car il hypothèque la performance du SGBD recherchée
dans le cadre du paradigme objet.

Modèle Objet ©

Module 3

page

106

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Suppression d'objets : plusieurs approches
Suppression d'objets : plusieurs approches
 Via la suppression d'une table : DROP Table Employe; Entraîne la suppression des objets,
 Via la suppression d'une table : DROP Table Employe;
Entraîne la suppression des objets, du containeur, des privilèges et des index
éventuels définis sur cette table Employe.
Rend aussi inopérant les composants dépendants : déclencheurs (triggers), vues.
TRUNCATE TABLE Employe [DROP | REUSE STORAGE ]
Supprime que les objets sans supprimer le containeur ni créer de
segments de rollback. N’enregistre aucune entrée dans une vue matérialisée ….
Les objets sont supprimés mais l’espace peut-être conservé (REUSE
STORAGE).
 Invalidation des objets par la suppression forcée d'un type
DROP TYPE employe_t FORCE;
Suppression, même si d’autres objets utilisent le type!!! Les objets restent dans la
base et sont temporairement invalides!!!

Modèle Objet ©

Module 3

page

107

Quelques infos rangées dans le dictionnaire M o d è l e O b j
Quelques infos rangées dans le dictionnaire
Quelques infos rangées dans le dictionnaire

Modèle Objet ©

Module 3

page

108

André Gamache professeur associé, Département d'informatique et de génie logiciel Faculté des sciences et de génie, Université Laval. Québec, Qc, Canada, G1K 7P4

Dictionnaire Oracle des objets (DD)
Dictionnaire Oracle des objets (DD)
 Le dictionnaire est composé de tables-objets don’t chaque objet décrit notamment les types. Celles-ci
 Le dictionnaire est composé de tables-objets don’t chaque objet décrit
notamment les types. Celles-ci sont accessibles via les vues statiques
suivantes :
USER_COLL_TYPES
USER_INDEXTYPES
USER_TRIGGERS
USER_TYPES
USER_TYPE_ATTRS
USER_TYPE_METHODS
USER_TYPE_VERSIONS
USER_SOURCE
: pour décrire les collections (sous-tables)
: pour décrire les index
: pour obtenir le texte d’un trigger
: pour décrire les types
: pour décrire les attributs des types
: pour décrire les méthodes des types
: pour décrire les versions des types
: décrit notamment le texte des types d’un utilisateur;
USER_TYPES
Select * from User_Types;
Select * From
type_name, attributes, methods
from User_Types;