Académique Documents
Professionnel Documents
Culture Documents
(v. 2005-07-02)
Représentation LINÉAIRE du modèle NF2
➢ Représentation linéaire :
R (A1( A11, A12), A2, A3, A4(A41, A42(A421, A422, A423, A424)))
où
A2, A3 sont des attributs à valeur atomique
2 sur 94
Représentation ARBORESCENTE du modèle NF2 avec attributs complexes
R Niveau 0
A1 A2 A3 A4 Niveau 1
Niveau 2
A11 A12 A41 A42
3 sur 94
Rappel sur le Modèle étendu de NF2
4 sur 94
Modèle objet-relationnel (OR)
Le modèle géré par Oracle 10g est OR parce qu'il peut gérer simultanément
les modèles relationnel et objet.
Avantages:
- Gère aussi les bases relationnelles très nombreuses (le legacy);
- Conserve les notions de tables qui sont bien comprises en terme de logique et de
physique;
- Permet l'encapsulation des données : implémentation des opérateurs
- Implémente les principaux mécanismes de l'objet : méthode, héritage, redéfinition
et surcharge;
- Capitalise sur les acquis par une évolution du SGBD relationnel en service;
Inconvénients :
- N'utilise pas la notion de classe et implémente une extension (container) de
structure unique (soit la structure de table);
- N'implémente pas l'héritage multiple;
- N'est pas conforme à la norme ODMG;
- Utilise la notion explicite de REF qui est en quelque sorte un pointeur logique
5 sur 94
Quelques définitions: Structure, type et opération
➢ Structure complexe : structure de données (différente de celles dites
atomiques : entier, float, chaîne, …) pour stocker des données en
conservant (sauf exception) une relation d'ordre entre elles:
Exemples: vecteur, tableau, ensemble, liste, arbre AVL, arbre-B, …
6 sur 94
Conventions d'écriture des types
1. Atomique ou de base : int, number, string, varchar(), carchar2(),… (15 en R,
indéfini en OR).
5. Un attribut primaire est marqué par l'astérisque *. Avec un seul attribut primaire
dans une classe, il en constitue la clé primaire.
Exemple: Personne: [nom*: string, age*: int,
histoSal: { [annee:string, montant:float] }, ville: ville_t]
7 sur 94
Constructeur de type
➢ Les types simples ou d'usager peuvent être combinés pour former des types plus
complexes.
➢ Passage du navigationnel à l'objet-relationnel :
Les structures ou classes (interne et externe) du Mnav sont des types OR:
La structure externe instantie un type objet de table, tandis que celle interne
objet colonne.
➢ Un objet est produit (généré) avec un type lorsque le constructeur de type est
appelé implicitement (par le NEW) ou explicitement par le constructeur de type:
Le tuple de valeurs est transformé en objet (doté d'un oid), et devient persistant
en OR dès son insertion dans une table. Le constructeur est souvent utile pour
initialiser un objet dès sa création.
v_employe_t := NEW employe_t ( 123, 'Jacques', 55); -- PL/SQL
8 sur 94
Objet et valeur typée
oid est l'identifiant unique d'un objet (Object Identifier); généré par le
système et marquant l'objet qui en principe ne change pas durant le
cycle de vie d'un objet.
** La valeur d'un objet peut être aussi vue comme un objet non persistant,
i.e. sans oid.
9 sur 94
Relationnel-Objet (OR)
Une table OR typée a des tuples (qualifiés d'objets persistants, avec pour
chacun, un OID)
10 sur 94
Suite… Nouveau type : REF (OR)
Navigation possible entre les tables d'une base OR en utilisant le type REF:
formulation d'une requête plus simple et éventuellement accès plus rapide;
Employe Domicile Create type employe_tAs Object (noE
noE:int int, nomE varchar2(50),
no
rue refAdresse REF domicile_t);
nomE: string
refAdresse telD
Select E.nomE, E.refAdresse.telD
From Employe E
Where E.refAdresse.rue = 'desPignes';
refAdresse est un attribut de Employe de type REF référant à une autre table typée
Domicile
11 sur 94
OID de l'objet
➢ L'oid peut être généré par le système ou dérivé des données selon la
spécification définie pour chaque table objet.
A. Gamache Objet-Relationnel
13 sur 94
Différences entre table typée et non typée du OR
➢Table typée réfère à un stock non ordonné d'objets (avec oid). Chaque
objet peut avoir en sus une ou plusieurs colonnes d'objets (objets-colonnes).
2 tables possibles:
Objet de colonne : instance de adresse_t dans un tuple (non typé) de Employe n'a pas de oid propre
mais est persistant via l'objet hôte. C'est une caractéristique de OR et non pas de OO.
14 sur 94
Persistance d'un objet
Un objet persistant n'a pas besoin d'être écrit explicitement dans la BD par
l'applicatif; le SGBB s'en charge automatiquement.
15 sur 94
Les objets OR (Oracle)
➢ Objet de table Oracle typée (OT)
Objet avec oid correspondant à un tuple ou une ligne de la table typée.
16 sur 94
Objet colonne dans une table typée ou non
Exemple:
17 sur 94
Initialisation par défaut des objets-colonnes
18 sur 94
Initialisation de l'OC par défaut dans une table non typée
➢ Create Type adr_t as object (no int, rue varchar2(50), ville varchar2(50));
19 sur 94
Suite …
20 sur 94
Mise à jour dans une table non typée (objet colonne)
21 sur 94
Initialisation d'une table typée avec objet-colonne vide et null
Create Type adr_t as object (no int, rue varchar2(50), ville varchar2(50));
Create Type employe_t as Object (matE int, nomE varchar2(50), adr adr_t);
22 sur 94
Affichage des objets (table typée) et des valeurs
23 sur 94
Mise à jour de l'objet-colonne d'une table typée
Update Employe p SET p.adr = adr_t(99, null, null)
Where p.matE = 103;
SQL> Select * From Employe;
24 sur 94
Création des objets nul et vide
Create type metier_t as Object(metier varchar2(25), classe char(1));
Create type employe_t as Object (mat int, metier metier_t);
➢ Declare
v employe_t ;
n employe_t ;
o employe_t ;
Begin -- le constructeur employe_t() exige une valeur pour tous ses paramètres.
v := NEW employe_t(250, NULL); --objet vide
n := NEW employe_t (500, metier_t(null, null)); -- objet nul
o := NEW employe_t (500, metier_t('technologiste', 'A')); --objet initialisé
Insert into Employe values(o); -- objet o rendu persistant
End;
L'objet v est vide et non modifiable; l'objet n est null et modifiable. L'objet o
est initialisé par le constructeur.
25 sur 94
Méthode de l'objet OC : objet vide et null
26 sur 94
Persistance des objets OR (Oracle)
❑ Insertion de l'objet hôte dans une table rend l'objet de colonne (qui n'a
pas de oid) persistant. Indexation possible des objets colonnes via.
Méthodes possibles avec ces objets.
➢ Objet de table (ligne/tuple) : indexation possible des objets via leur oid
❑ Correspond à un tuple ou à une ligne dans une table et chacun a un
oid.
Ces objets peuvent être indexés et partitionnés.
Création avec le INSERT et les constructeurs de type approprié.
27 sur 94
Persistance des objets OR (Oracle)
Création d'un objet non persistant (dans une procédure PL/SQL) par la
Directive NEW de PL/SQL :
…
v_empl employe_t; -- déclaration d'une var en PL/SQL
v_empl := NEW employe_t (123,…..); -- empl est une variable PL/SQL
28 sur 94
Suppression d'objets / types OR-Oracle
➢ Via la suppression d'une table : DROP table Employe;
Entraîne la suppression des objets, des privilèges et des index éventuels
définis sur cette table.
29 sur 94
Contraintes définies au niveau des tables
30 sur 94
Différences entre table typée et non typée
➢ Table non typée évolue plus facilement : ex. Ajout d'un attribut age dans
la table non typée Employe .
*** âges absents sont alors représentés par des indicateurs de NULL.
31 sur 94
Suite … différences entre table typée et non typée
Plus difficile (?) éventuellement avec table typée:
Ajout de age dans la table typée Employe:
Raison :
Répercussion possible sur d'autres tables partageant le type employe_t ou sur
un autre type défini avec employe_t (sous-type).
Create table Employe of employe_t;
Alter type employe_t ADD attribute age int;
Si le type employe_t est utilisé comme objet de colonne dans les types :
cadreSup_t delegue_t chef_t
L'âge peut ne pas être utile! Le type modifié est marqué Type Evolving.
Doit alors être recompilé. Directive : recompile
32 sur 94
Méthode incluse dans le type
La table typée peut avoir des signatures de méthode de son type (ex. :
Member Procedure via son type): ajout et suppression d'une méthode;
NB : L'évolution d'un type avec le ALTER change le type dans la base mais pas
celui placé dans la cache. Pour voir le changement, il faut vider la cache en se
déconnectant et en créant une nouvelle connexion (nouvelle session).
33 sur 94
Création d'une table OR non typée
NO NUMBER(38)
RUE VARCHAR2(40)
Les objets de cette table OR n'ont pas de oid et non référençables par un REF.
A. Gamache Objet-Relationnel
34 sur 94
Insertion dans une table non typée sans oid et sans REF
35 sur 94
Table OR typée (rangement des objets OR)
36 sur 94
Suite… affichage d'un objet rangé dans une table typée
37 sur 94
Mnav de Employe et sa transposition en OR
Employe Employe
matricule * matricule *
nom nom
Cas B
Cas A histSal histSal
histoSal_t histoSal_t
annee: Date annee
SalNet
salNet : real refSal
montantBrut
chargesSoc
➢Dans le OR, la table est le concept de base pour référer aux données via les
tuples-objets ou les tuples-non-objets : la table est le container d'objets les
rendant persistants.
38 sur 94
Représentation tabulaire avec une table typée et un lien multi et intra
Employe: employe_t
matricule*:int nom:varchar(50) histoSal:{ }
annee salNet
1234 Savoie 2000 45K$ Une 1ère collection
2001 46K$
1456 Lachance 2003 38K$
A. Gamache Objet-Relationnel
39 sur 94
Objet avec Collection (instances)
40 sur 94
Suite… Vision tabulaire du cas B avec table typée et un lien mono externe
50K$ 5K$
49K$ 3K$
1. L'attribut net est un pointeur (type Ref) vers un objet de la table SalNet;
2. L'attribut histoSal est un set de tuples défini par les attributs annee et le lien refSal
3. La sous-table intégrée est une vision logique, pas nécessairement une implantation
physique.
41 sur 94
Représentation graphique d'une table et d'un objet OR
42 sur 94
Exemple de schéma de table non typée (tuples)
Create Table AdresseReg (reg number, adr adr_t) ; Schéma de table non typée
Les instances de cette table OR non typée n'ont pas de oid. Ce sont des tuples
avec un rowid ayant cependant un attribut qui est un objet-colonne (adr).
Le constructeur rappelle que c'est un objet-
Select p.reg, p.adr. p.codePostal colonne et que l'accès aux valeurs doit se
From AdresseReg p; faire par une interface.
43 sur 94
Imbrication des types (partage de types)
Type utilisant un autre type déjà défini. Ce partage est mal représenté avec le
Mnav. Il y a alors dépendance du type etudiant_t sur adr_t
Create type adr_t as Object ( noRue int, ville varchar2(50), codePostal varchar2(6)) /
Create type etudiant_t as Object (reg number, adr adr_t) /
Create type professeur as Object (reg number, adrP adr_t)/
Partage de type
Etudiant: etudiant_t
nas adr : adr_t
noRue rue ville codePost
Les instances de cette table ont un oid, donc sont des objets.
Le type adr_t est imbriqué dans celui de etudiant_t et partagé entre
etudiant_t et professeur_t.
44 sur 94
Vision tabulaire des types partagés par les tables
Exemple : (*** CREATE OR REPLACE***) Table typée pour ranger des objets
CREATE Type adr_t as Object (noRue NUMBER, rue varchar2(30), ville varchar2 (20),
codePost varchar2 (10) ) ; / -- sans méthode
adr_t
Un type
noRue rue ville codePost
A. Gamache Objet-Relationnel
45 sur 94
Création de type incomplet et d'une Référence inverse
Avec Oracle, un type peut utiliser qu'un type déjà existant.
Aucune définition anticipée, shadowed. C ( c1: int , c2: ref)
La référence inverse est définie via un type incomplet. D ( d1:int , d2: ref)
Create or Replace c_t as object ( c1 int, c2 REF d_t); -- mise à jour du type
46 sur 94
Accès à un attribut (idem pour une méthode)
➢ Pour accéder à la valeur d'un attribut (ou à une méthode via un objet) d'un
type, utilisez la notation pointée.
Ex.:
Create Type atelier_t (nomA varchar2(50), adrA varchar2(5), refD REF
description_t)
Atelier Description
nomA* texte
nomObjet.nomAttribut adrA refA
Ex.: Atelier.nomA refD photo
modifAtelier
nomObjet.nomAttributRef.nomAttribut
Navigation via une ref
Ex.: Atelier.refD.texte -- navigation vers l'autre classe
nomObjet.nomMethode() – appel de la méthode de cet objet
Ex.: x.modif où x est un objet de Atelier
47 sur 94
Représentation tabulaire du lien entre implémenté par REF
➢ CREATE type etudiant_t as Object(nas number, refBac REF bac_t, adr adr_t ) ; /
Etudiant: : etudiant_t
adr : adr_t
no:int refBac: Ref
noRue: int ville: codePost:
rue: varchar varchar2
varchar2
Bac:
bac_t Attribut composé
A. Gamache Objet-Relationnel
48 sur 94
Ref avec les données de tables typées : défini dans le type
IFT 1982 75
Gestion 1992 85
Etudiant: : etudiant_t
adr : adr_t
no:int refBac: Ref
noRue: int ville: codePost:
rue: varchar varchar2
varchar2
A. Gamache Objet-Relationnel
49 sur 94
Avantage du REF dans une recherche (jointure implicite)
50 sur 94
Ref déclarée dans une table non typée
51 sur 94
Ref déclarée dans une table typée
nbCr : int
ajoutMail(…)
Constraint c_bac Check(refBac is not null),
Constraint c1_bac refBac REFERENCES Bac)) ;
Insertion d'une référence dans un objet de Pe rsonne:
-Insert into Personne values (personne_t(10, 'Gingas',
(Select Ref(b) From Bac b where b.noB = 'IFT')));
52 sur 94
Opérations avec les types: création, suppression, …
➢ Description d'un type : Directive Describe fournit les attributs et leur type
Desc [ribe] personne_t
53 sur 94
Implémentation de la contrainte référentielle en OR
54 sur 94
Contrainte référentielle en OR
55 sur 94
Cohérence des tables Atelier et Ouvrier
Mnav Ouvrier
Atelier Ouvrier mat*
nomA* mat* nom
1 1..* Atelier
adrA Travaille > nom nomA* ville
ville refA
UML adrA
(parent) (enfant)
A. Gamache Objet-Relationnel
56 sur 94
Contrainte référentielle avec table typée (objet)
57 sur 94
Suite … intégrité référentielle avec les oid et table typée
58 sur 94
Suite … intégrité référentielle avec les oid et table typée
Insert into Ouvrier values ( '123', 'Ferland', 'Québec', (Select Ref(a) From
Atelier a Where a.nomA = 'AtelierQuébec'));
*** Erreur *** l'atelier (parent) recherché n'existant pas.
59 sur 94
Contrainte référentielle avec une table non typée (relationnelle)
Ouvrier
mat*
Atelier nom
nomA* ville
adrA refA
parent enfant
60 sur 94
Cohérence référentielle du parent avec une table typée
A. Gamache Objet-Relationnel
61 sur 94
Cohérence de la table ENFANT avec une table non typée
62 sur 94
Suite …Cohérence de la table PARENT avec une table non typée
63 sur 94
Actions référentielles en OR
A. Gamache Objet-Relationnel
64 sur 94
Action ON DELETE SET NULL
65 sur 94