Vous êtes sur la page 1sur 9

Modèle objet - relationnel

SQL3 Introduction

Université de Nice Sophia-Antipolis


Version 0.9.3 – 21/10/05
Richard Grin

R. Grin Objet-relationnel page 2

Modèle objet-relationnel Pourquoi étendre


le modèle relationnel ?
‰ Le modèle objet-relationnel (OR) reprend le
modèle relationnel en ajoutant quelques ‰ La reconstitution d’objet complexes éclatés en
notions qui comblent les plus grosses tables relationnelles est très coûteuse car elle
lacunes du modèle relationnel occasionne de nombreuses jointures
‰ La compatibilité est ascendante : les ‰ Pour échapper aux éclatements-jointures, l'OR
anciennes applications relationnelles réhabilite
fonctionnent dans le monde OR n les références qui permettent d'implanter des

‰ La norme SQL99 (SQL3) reprend beaucoup structures complexes


d'idées du modèle OR n les attributs multivaluées (tableaux, ensembles
ou listes)
R. Grin Objet-relationnel page 3 R. Grin Objet-relationnel page 4

Pourquoi étendre Pourquoi étendre


le modèle relationnel ? le modèle relationnel ?
‰ L’impossibilité de créer de nouveaux types
‰ L'utilisation de références facilite aussi
implique un manque de souplesse et une
l'utilisation des données très volumineuses du
interface difficile avec les applications orientées
multimédia en permettant leur partage
objet
simplement et à moindre coût (sans jointure)
‰ L'OR permet de définir de nouveaux types
utilisateur simples ou complexes (User data
type), avec des fonctions ou procédures
associées comme dans les classes des
langages objet

R. Grin Objet-relationnel page 5 R. Grin Objet-relationnel page 6

1
Pourquoi étendre Pourquoi ne pas passer
le modèle relationnel ? directement aux SGBD Objet ?
‰ L'OR supporte l'héritage de type pour profiter ‰ Le relationnel a ses avantages, en particulier
du polymorphisme et faciliter la réutilisation n sa grande facilité et efficacité pour effectuer
des recherches complexes dans des grandes
bases de données
n la facilité de spécifier des contraintes
d’intégrité sans programmation
n il s'appuie sur une théorie solide et des
normes reconnues

R. Grin Objet-relationnel page 7 R. Grin Objet-relationnel page 8

Pourquoi ne pas passer Les nouvelles possibilités de l’OR


directement aux SGBD Objet ?
‰ Définir de nouveaux types complexes avec
‰ Inertie de l'existant : de très nombreuses des fonctions pour les manipuler
bases relationnelles en fonctionnement ‰ Colonnes qui contiennent des collections
‰ Il est difficile de réécrire les applications pour (ensembles, sacs, listes)
s’appuyer sur le modèle objet ‰ Ligne considérée comme un objet, avec un
‰ Peu d'informaticiens formés aux SGBDO identificateur (Object Identifier OID)
‰ Manque de normalisation pour les SGBDO ; ‰ Utilisation de références aux objets
trop de solutions propriétaires ‰ Extensions du langage SQL (SQL3 ou SQL-
‰ Le modèle OR peut permettre un passage en 99) pour la recherche et la modification des
douceur données
R. Grin Objet-relationnel page 9 R. Grin Objet-relationnel page 10

Les problèmes de l'OR SQL99 (SQL3)


‰ Cette partie du cours s’appuiera autant que
‰ Ne s'appuie pas sur une théorie solide
possible sur les spécifications de SQL99
comme le modèle relationnel
‰ Par rapport à SQL92, le langage de
‰ Manque de standard de fait : implantations
programmation SQL99 possède en plus des
différentes, et encore partielles, dans les
variables et instructions de contrôle pour en
divers SGBD
faire un langage procédural complet ; ce
cours ne portera pas sur ces extensions
‰ Des exemples concrets seront donnés dans
le langage SQL de la version 9i d’Oracle ; les
différences avec SQL3 seront signalées
R. Grin Objet-relationnel page 11 R. Grin Objet-relationnel page 12

2
Les différents types
‰ L’utilisateur (le programmeur) peut créer ses
propres types de données :
n types « distinct »

Types définis par l’utilisateur n types structurés

R. Grin Objet-relationnel page 13 R. Grin Objet-relationnel page 14

Type « distinct » Types structurés


‰ Ces types permettent de mieux différencier les ‰ Ces types correspondent aux classes des
domaines des colonnes ; ils sont formés à partir langages objets
des types de base : ‰ Ils peuvent contenir des constructeurs, attributs
CREATE TYPE codePays as char(2); (≈ variables d’instances), fonctions et
CREATE TYPE matricule as integer; procédures (≈ méthodes)
‰ Par exemple, pour différencier le domaine des ‰ Les membres peuvent être public, protected ou
colonnes matricule et numDept private
‰ Ces types s’utilise exactement avec les mêmes ‰ Les fonctions et procédures peuvent être écrites
instructions que le type de base sous-jacent en SQL ou en un autre langage ; attention, on
passe le « this » en paramètre
R. Grin Objet-relationnel page 15 R. Grin Objet-relationnel page 16

Création d’un type de données Fonctions dans les types


CREATE TYPE departement_type AS OBJECT
‰ La syntaxe est semblable à celle de la création (numDept integer,
d’une table : nomD varchar(30),
lieu varchar(30),
CREATE TYPE departement_type AS OBJECT
MEMBER FUNCTION getLieu RETURN varchar);
(numDept integer,
nomD varchar(30), CREATE TYPE BODY departement_type AS
lieu varchar(30)); MEMBER FUNCTION getLieu RETURN varchar IS
‰ Un type ne peut contenir de contrainte d’intégrité begin
‰ La commande « create or replace type » return lieu;
end;
permet de redéfinir un type s’il existe déjà
end;

R. Grin Objet-relationnel page 17 R. Grin Objet-relationnel page 18

3
Héritage Ajout d’un attribut dans un type
‰ Les types supportent l’héritage multiple avec
le mot-clé UNDER : alter type employe_type
create type employe_type as object add attribute date_naissance date
(matr integer, nom varchar(30), cascade;
sal numeric(8,2))
not final; Propage aux
create type commercial_type tables construites
under employe_type à partir du type
(comm numeric(8,2))
not final;
‰ Un type est final par défaut
R. Grin Objet-relationnel page 19 R. Grin Objet-relationnel page 20

Ajout d’une méthode/fonction Type de ligne


à un type
‰ SQL99 possède aussi la notion de type de
alter type employe_type ligne qui correspond aux structures du C :
add member c’est un ensemble non encapsulé d’attributs
‰ Le type peut être nommé ou non
function age return integer
cascade;

R. Grin Objet-relationnel page 21 R. Grin Objet-relationnel page 22

Type de ligne non nommé Type de ligne nommé


‰ create table EMP ‰ CREATE ROW TYPE adresse_t
(nomE varchar(3), (numero Integer,
adresse ROW(numero Integer, rue varchar(15),…)
rue varchar(15),…)) ‰ On peut ensuite utiliser ce type pour une
déclaration d’attribut ou même pour créer une
table à partir de ce type (comme pour les
autres types)

R. Grin Objet-relationnel page 23 R. Grin Objet-relationnel page 24

4
Vues du dictionnaire des données
‰ USER_TYPES pour les types (et les collections)
‰ USER_TYPE_ATTRS pour attributs des types
‰ USER_TYPES_METHODS pour les méthodes des
types Tables
‰ USER_OBJECT_TABLES pour les tables objet-
relationnelles
‰ Sous sqlplus :
describe departement_type

R. Grin Objet-relationnel page 25 R. Grin Objet-relationnel page 26

Création d’une table Création d’une table


à partir d’un type à partir d’un type
‰ Les données d’un type ne sont persistantes ‰ Soit le type employe_type :
que si elles sont rangées dans une table CREATE TYPE employe_type AS OBJECT
(matricule integer,
‰ On peut créer des tables comme en SQL92 nom varchar(30),
‰ On peut aussi créer des tables à partir d’un . . .
type de données dept integer);
‰ On peut créer une table à partir de ce type et
indiquer des contraintes d’intégrité :
create table employe OF employe_type
(primary key (matricule));

R. Grin Objet-relationnel page 27 R. Grin Objet-relationnel page 28

Héritage de tables Création de table à partir


d’un type dérivé
‰ Une table peut hériter d’une ou plusieurs
tables create table commerciaux
‰ Pas supporté par Oracle 9i of commercial_type
(constraint pk_com primary key(matr));

R. Grin Objet-relationnel page 29 R. Grin Objet-relationnel page 30

5
Caractéristiques d’une table Vues du dictionnaire des données
objet-relationnelle
‰ USER_OBJECT_TABLES pour les tables objet-
relationnelles
‰ Une table est une table objet-relationnelle si
elle a été construite à partir d’un type
(create table … OF)
‰ Les lignes de ces tables sont considérées
comme des objets avec un identifiant (OID)
‰ On peut utiliser des références pour désigner
les lignes de ces tables

R. Grin Objet-relationnel page 31 R. Grin Objet-relationnel page 32

Insertion de données Insertion avec constructeur

‰ On ajoute des données comme avec une table ‰ On peut aussi utiliser le « constructeur du type »
normale : avec lequel la table a été construite :
insert into commerciaux insert into employe values (
(matr, nom, sal, comm) employe_type(125, 'Dupond', ...));
values (234, 'TITI', 3200, 600); ‰ Si le type est un type utilisé par un autre type,
l’utilisation du constructeur du type est obligatoire

R. Grin Objet-relationnel page 33 R. Grin Objet-relationnel page 34

Modifications Appel de procédure ou fonction


‰ On utilise la notation pointée comme en
SQL92 : ‰ select e.nom, age(e) Le « this » est passé
update employe from employe e en paramètre
set employe.salaire = 12000 where age(e) < 40
where employe.nom = 'Dupond';
‰ Sous Oracle :
‰ SQL99 fournit aussi la notation « .. » pour select e.nom, e.age()
désigner un attribut d’une colonne de type from employe e
structuré : where e.age() < 40
update employe
set employe.adresse..numero = 12
where employe.nom = 'Dupond';

R. Grin Objet-relationnel page 35 R. Grin Objet-relationnel page 36

6
Références
‰ On peut indiquer dans la définition d’un type
qu’un attribut contient des références (et non des
valeurs) à des données d’un autre type ; la
syntaxe est « REF nom-du-type » :
Références create type employe_type as object
(matricule integer,
nom varchar(30),
. . .
dept REF dept_type);

R. Grin Objet-relationnel page 37 R. Grin Objet-relationnel page 38

Exemple de select avec référence Insertions avec référence


insert into employe values ( pointeur
‰ La notation pointée permet de récupérer les NULL
attributs d’un type dont on a un pointeur 1230, 'Durand', …, NULL);
‰ Lieu de travail des employes (avec Oracle) :
select nom, e.dept.lieu insert into employe(matricule, nom, dept)
from employe e select 1240, 'Dupond', REF(d)
‰ En SQL3 : from dept d
select nom, e.dept->lieu where dept.numDept = 10;
from employe e
‰ Attention, l’alias e est indispensable référence
vers le dept
de numéro 10
R. Grin Objet-relationnel page 39 R. Grin Objet-relationnel page 40

Modifications avec référence


update employe
set dept =
(select REF(d)
from dept d
where numDept = 10)
Collections
where matricule = 7500;

R. Grin Objet-relationnel page 41 R. Grin Objet-relationnel page 42

7
Types de collections Exemple de collection
‰ Pour représenter une colonne multivaluée, on create type employe_type
peut utiliser les collections : (matricule integer,
n ensembles (au sens mathématiques ; pas nom varchar(30),
de doublons) prenoms LIST(varchar(15)),
n sacs (avec des doublons) enfants SET(personne),
n listes (ordonnées et indexées par un . . .);
entier)
‰ D’autres types de collections peuvent être
ajoutées par les SGBD

R. Grin Objet-relationnel page 43 R. Grin Objet-relationnel page 44

Utilisation d’une collection Les collections avec Oracle 9i


‰ On peut utiliser une collection comme une ‰ Oracle 9i n’offre que 2 types de collections :
table en la faisant précéder par le mot-clé n table imbriquée (NESTED TABLE) qui
TABLE : correspond à une collection non ordonnée
select nom from employe E
et non limitée en nombre d’éléments
where nom in
(select * n tableau prédimensionné (VARRAY) qui
from TABLE(E.prenoms)) correspond à une collection d’éléments de
‰ On peut aussi faire afficher une collection même type, ordonnée et limitée en taille
comme un tout :
select nom, prenoms from employe

R. Grin Objet-relationnel page 45 R. Grin Objet-relationnel page 46

Tables imbriquées Tableaux dimensionnés


‰ Une table relationnelle (pas nécessairement ‰ Un VARRAY est une collection ordonnée et
OR) peut contenir une ou plusieurs tables limitée en nombre, d’éléments d’un même
imbriquées type
‰ On peut imbriquer plusieurs tableaux
dimensionnés en utilisant des pointeurs sur
des tableaux

R. Grin Objet-relationnel page 47 R. Grin Objet-relationnel page 48

8
Exemples de VARRAY
create type telephones_type as
VARRAY(3) OF varchar(10);

insert into personne (nom,


telephones)
values('Dupond',

telephones_type('0492077987',

'0492074567'));
R. Grin Objet-relationnel page 49

Vous aimerez peut-être aussi