Vous êtes sur la page 1sur 33

Modèle objet-relationnel

une introduction
Objectif
 Présenter les techniques objet-
relationnel proposées par Oracle 10i.
 Seulement Oracle 10i.
 L’exposé n’est pas exhaustif.
 Au préalable, quelques remarques.

2
Modèle O-R : quel niveau ?
 Modèle objet-relationnel au même titre
que le modèle relationnel.
 Niveau logique/physique (et non pas
conceptuel, comme un modèle de
classes UML)
 Correspond à l’introduction de concepts
des bases de données objets dans le
modèle relationnel.
3
Bases de données objet
 Concept de SGBDO précisé au tout
début des années 90.
 Un SGBDO doit pouvoir supporter des
fonctionnalités d’un SGBD et des
fonctionnalités « objet ».
 ODMG pour la normalisation (ODL,
OQL, OML…)
 Noms de SGBDO : O2, ObjectStore, …
4
Fonctionnalités SBGD (obligatoires)
 Persistance des objets : tout objet doit
pouvoir persister sur le disque au delà du
programme qui le crée.
 Concurrence d’accès : la base d’objets doit
pouvoir être partagée par différentes
transactions qui la consultent et la modifient.
 Fiabilité des objets : restauration de l’objet
dans l’état précédent la panne.
 Facilité d’interrogation : possibilité de
retrouver un objet « facilement »
5
Fonctionnalités objet (obligatoires)
 Support d’objets atomiques et complexes
 Identifiant d’objets : chaque objet a un
identifiant unique.
 Héritage simple : possibilité d’exprimer la
spécialisation d’une classe et l’héritage.
 Polymorphisme : code d’une méthode choisi
en fonction de ses paramètres instanciés.

6
Objet-relationnel
 Le modèle : permet de conserver la
compatibilité avec le modèle relationnel tout
en utilisant des concepts « objet » ;
 Un SGBD O-R permet d’utiliser des techniques
objet en même temps que des techniques
purement relationnelles.
 Norme SQL3 : extension de SQL2 pour
prendre en compte le modèle objet-
relationnel ; tous les SGBD O-R ne sont pas
conformes SQL3.
7
O-R : concepts de base
 Type de données utilisateur : type de
données définissable par l’utilisateur. Ce
dernier peut définir les attributs et les
méthodes associées au type.
 Collections : types de données
permettant de supporter des attributs
multi-valués et de les organiser suivant
le type de collection.
8
Objet-relationnel : les concepts
 Identificateur d’objet (OID), référence :
Type de données particulier, permettant
de mémoriser l’adresse invariante d’un
objet (pour référencer l’objet)
 Héritage de type : forme d’héritage
permettant de définir un sous-type d’un
type existant, avec héritage de la
structure et des opérations (under).
9
Oracle 8i et l’objet-relationnel
 Définition de type
 Table objet-relationnelle et référence
 Collections :
 tables imbriquées
 tableaux
 Méthodes associées à un type.
 (pas d’héritage dans la version 8)
10
Définition d’un type
 Syntaxe
create [or replace] type <nom_type>
as object
(<attr> <type> [,<attr> <type>]*);
<type> : type standard ou un type « objet ».
 Exemple
création d’un type tadresse, puis d’un type
tlabo.
11
Utilisation
 Création de tables :
utilisé comme un autre type.
 Insertion de lignes :
dans la clause « values », le nom du type doit
précéder les valeurs
<nom_type>(val1, … valn)
 Sélection/Modification de lignes :
il faut préfixer par le nom de la colonne, pour
obtenir la valeur d’un attribut d’un objet.
12
Exemple

 Création d’une table robots


 Insertion dans la table robots
 Obtention de la ville du robot ‘Tom’.

13
Table objet-relationnelle
 La table est définie à partir d’un type unique.
 Les colonnes de la table correspondent aux
attributs définis dans le type.
 Caractéristique majeure (par rapport à une
table relationnelle) : chaque tuple est
considéré comme un objet.
 Chaque tuple possède un identificateur
d’objet (OID). Il peut donc être référencé par
d’autres objets de la base via la clause REF.

14
Table 0-R : utilité
Les tuples d’une table R2 peuvent être
référencés directement (pointeur) par
les tuples d’une table R1.

 l’accès se fait directement (et non


plus par jointure) ; il est beaucoup plus
rapide.

15
Table O-R : définition
 Syntaxe :
create table <nom_table> of
<nom_type>
 Exemple : table O-R « Labos ».
 Définition d’un type tlabo.
 Définition de la table Labos à partir de
tlabo.

16
Référence (pointeur)
 Les références permettent de
représenter les liaisons entre les objets.
 Déclaration :
<nom_attr> REF <nom_type>

 Exemple : Nouvelles définitions d’une


table Robots.
17
Tables Robots et Labos
Robots (table relationnelle maître)
nomr labo cat poids
Tom leger 50

Pok lourd 300


Labos (table O-R liée)
… … … …
noml adrl
SRI …

Navigation entre les 2 INRIA …


tables sans utiliser de jointure … …
18
Sélection de lignes
 Select
m.<attr_tablemaître>.<attr_tableliée>
from <tablemaître> m
where …
 Fonction DEREF() : permet d’afficher les
valeurs des attributs de l’objet
référencé.

19
Insertion de lignes
 Utilisation de la fonction REF() qui
renvoie l’OID de l’objet référencé. On
recherche dans la table liée l’OID du
tuple que l’on veut référencer.
 Exemple : insertion du robot Toc créé
au labo de nom SRI.

20
Suppression de lignes
 Dans une table liée on peut supprimer
un tuple référencé par une table maître
« sans que cela pose problème ».
-> Ce qui n'est pas géré par le SGBD doit
l'être par le programmeur

21
Collections : utilité
 La table que l’on veut implémenter n’est
pas en 1e forme normale.
 Pour un tuple donné, un attribut peut
prendre plusieurs valeurs ; il est multi-
valué.
 Exemple : Associer à un labo l’ensemble
des robots qui lui appartiennent, à un
robot l’ensemble de ses résultats.

22
Collections : mise en oeuvre
Deux cas :
 L’attribut est composé d’un seul
élément
 Utilisation d’un tableau
 L’attribut est composé de plusieurs
éléments
 Utilisation d’une table imbriquée.
23
Table imbriquée
nomr labo résultats cat poids
Tom nomc sess pts léger 50
Vers la table
superc 3 140
labos
cnul 4 100
… … …

Pok nomc sess pts lourd 300


Vers la table
labos
cnul 2 180
… … …

24
Table imbriquée : définition
 Définition relative au type de la table
imbriquée
create type <nom_type_table> as table of
<nom_type>
 Définition de la table principale
create table <nom_table_pri> (<attr>
<nom_ty>, …, <attri> <nom_type_table>,
<liste_contraintes>)
nested table <attri> strore as <tab_interne>;
25
Table imbriquée : définition
 <attri> est un attribut de type table.
 <tab-interne> est le nom de la structure
interne qui stocke les enregistrements de la
table imbriquée.
 C’est le SGBD qui maintient
(automatiquement) des pointeurs entre les
deux tables.
 Exemple : définitions pour les tables
précédentes.

26
Table imbriquée : utilisation
 Insertion dans la table principale
insert into <nom_table_pri> values (v1, …,
<nom_type_table>(
<nom_type> (…),
<nom_type> (…),…
<nom_type> (…) ) );

Exemple : insertion d’un robot.


27
Table imbriquée : utilisation
 Insertion d’un tuple dans une table
imbriquée. Il faut sélectionner la ligne de la
table principale par une sous-requête.
insert into the <sous_requ> values (…);
Ex : insertion d’un nouveau résultat pour Pok.
 Même principe pour la modification d’un tuple
dans une table imbriquée.
update the <sous_requ> set …
[where <cond>]
28
Table imbriquée : utilisation
 Sélection sur la table principale :
Se fait de manière standard.
 Sélection sur les colonnes d’une table
imbriquée
select <liste_attributs>
from the <sous_requ>
[where <cond>]
29
Tableau : définition
 create type <nom_type> as varray
(<limite>) of <type>
 limite = nbremax d’éléments du tableau.
 <type> peut être un type prédéfini (number, char,
varchar, date), une référence, un objet.
 Exemple : table compétitions où l’on mémorise les
sponsors de chaque compétition, ou liste de
pointeurs vers des objets robots.

30
Tableau : utilisation
 Ajout de lignes dans la table principale
se fait comme précédemment (en
utilisant le nom du type pour donner la
valeur de la collection)
 Sélection classique ok
 Pour manipuler un élément du tableau
ou le sélectionner, il faut utiliser un
programme PL/SQL.

31
Modèle Obj-Rel : notations

 Types
 Collection
<nom_type> {<nom_type'>}
 Pointeur

<nom_type> @<nom_type'>
 Type structuré

<nom_type>(<nom_attr1> <nom_type1>, ...


<nom_attri> <nom_typei>)
32
Modèle Obj-Rel : notations

 Relations
 table relationnelle
<nom_rel>(<nom_attr1> <nom_type1>, ...
<nom_attrj> <nom_typej>)
 table objet_relationnelle

<nom_rel><nom_type>O

33

Vous aimerez peut-être aussi