Vous êtes sur la page 1sur 26

Bases de donnes orientes objets

SGBD relationnels-objets un exemple : ORACLE

BDA10.1

SQL3
n SQL3

= SQL2 pour BD relationnelles + des extensions


u orient-objet u multi-media u spatial u sries u

temporelles

n Ce

chapitre porte sur l'extension OO : le relationnel-objet est compatible avec SQL2


u Les

n SQL3

BD et applications existantes en SQL2 marchent avec SQL3 u => passage facile du relationnel au relationnel-objet BDA9.2

Comment tendre le relationnel l'OO


n Concept n Nouveau
u les

de table quasi inchang concept, TYPE, qui dcrit :

structures complexes et multivalues u le format des objets u les mthodes


n hirarchie n Un

d'hritage des types

nouveau constructeur de domaine : REF pour dfinir les liens de composition de 3 sortes
u tables

n Tables

"normales" de tuples en 1re forme normale u tables de tuples en non 1FN : tables de valeurs structures u tables d'objets

BDA9.3

LES TYPES
n Domaines
u CHAR,

usuels de SQL :

VARCHAR, NUMBER, DATE

n Nouveaux
u un

domaines dfinis par l'utilisateur, propres la BD, pour dcrire :


multivalu l TYPE VARRAY : vecteur l TYPE nested TABLE : table insre la place d'une valeur u un complexe ventuellement avec oid (!) l valeur complexe l objet (oid, valeur complexe)
BDA9.4

Type VARRAY
n CREATE

TYPE nom-type AS VARRAY(nbmax) OF nom-type2

u nom-type2

: l type usuel de SQL (CHAR, VARCHAR, NUMBER) l type dfini par l'utilisateur valeur multivalue de type vecteur

n CREATE

TYPE Tprnoms AS VARRAY(4) OF VARCHAR(20)


u Exemple

de valeur : ('Marc', 'Pierre')

n CREATE

TABLE Personne (AVS CHAR(11), nom VARCHAR(20), prnoms Tprnoms)


BDA9.5

Type TABLE insre (nested TABLE)


n

CREATE TYPE nom-type AS TABLE OF nom-type2


u

nom-type2 : l type usuel de SQL (CHAR, VARCHAR, NUMBER) l type dfini par l'utilisateur valeur multivalue de type table 021 456 55 99 l pas de nombre maximum de valeurs 021 456 66 77 021 691 55 77 l pas d'ordre 022 555 66 88 l indexable

n n

CREATE TYPE Ttlphones AS TABLE OF CHAR(10) CREATE TABLE Personne (AVS CHAR(11), nom VARCHAR(20), tel Ttlphones) NESTED TABLE tel STORE AS TableTel L'utilisateur doit donner un nom la table qui contiendra les tlphones de toutes les personnes
BDA9.6

Type OBJECT
n

Deux fonctions :
u u

constructeur de valeur complexe (monovalue) constructeur d'objet = (oid , valeur complexe)

CREATE TYPE nom-type AS OBJECT ( nom1 nom-type1 , nom2 nom-type2 , <dfinition de mthodes> )
u

nom-typei : l type usuel de SQL (CHAR, VARCHAR, NUMBER) l type dfini par l'utilisateur

Utilisation comme constructeur de valeur complexe


u

CREATE TYPE Tadresse AS OBJECT ( rue VARCHAR(20), numro VARCHAR(4), localit VARCHAR(20), NPA CHAR(4) ) CREATE TABLE Personne (AVS CHAR(11), nom VARCHAR(20), prnoms Tprnoms, adr Tadresse )
BDA9.7

Type OBJECT - constructeur d'objet


n

CREATE TYPE Tpersonne AS OBJECT ( AVS CHAR(11), nom VARCHAR(20), prnoms Tprnoms, adr Tadresse ) CREATE TABLE LesPersonnes OF Tpersonne
u u

u u

cration d'une table d'objets de format Tpersonne l NB On peut crer plusieurs tables d'objets de format Tpersonne INSERT INTO LesPersonnes VALUES (12345123451, 'Rochat', ) => cration d'un objet (oid + valeur), permanent, stock dans LesPersonnes La table LesPersonnes a une colonne supplmentaire invisible, gre par le SGBD qui contient l'oid de chaque objet Cette colonne est automatiquement indexe l recherche de l'objet de tel oid plus rapide

BDA9.8

Trois sortes de tables


n Table

du relationnel classique

u ensemble

de tuples en premire forme normale (1FN) u CREATE TABLE Personne ( AVS CHAR(11) , nom VARCHAR(20), prnom VARCHAR(20) , rue VARCHAR(20), numro VARCHAR(4) , localit VARCHAR(20), NPA CHAR(4) )

n Table

de valeurs structures

u ensemble

de tuples en non premire forme normale u CREATE TABLE Personne ( AVS CHAR(11) , nom VARCHAR(20) , prnoms Tprnoms , adr Tadresse )

BDA9.9

Trois sortes de tables (2)


n Table

d'objets

u ensemble

d'objets u CREATE TYPE Tpersonne AS OBJECT ( AVS CHAR(11), nom VARCHAR(20), prnoms Tprnoms, adr Tadresse ) u CREATE TABLE LesPersonnes OF Tpersonne
n On

peut associer aux tables quelle que soit leur sorte les contraintes usuelles de SQL :
u PRIMARY

KEY (nom-col*) u UNIQUE (nom-col*) u FOREIGN KEY (nom-col*) REFERENCES nom-table [(nom-col*)] [action] u CHECK ( condition)

BDA9.10

Types structurs plusieurs niveaux


n

SQL permet de dcrire des attributs complexes et multivalus plusieurs niveaux, en crant un type par constructeur
u u

complexe (TYPE OBJECT) multivalu (TYPE VARRAY ou TABLE insre)

n n n n

Exemple : Table d'objets personnes avec leurs enfants (prnoms et date de naissance) CREATE TYPE Tenfant AS OBJECT (prnoms Tprnoms , dateN DATE) CREATE TYPE Tenfants AS VARRAY(12) OF Tenfant CREATE TYPE Tpersonne2 AS OBJECT ( AVS CHAR(11) , nom VARCHAR(20), prnoms Tprnoms , adr Tadresse , enfants Tenfants ) CREATE TABLE LesPersonnes2 OF Tpersonne2
BDA9.11

Cration de valeurs structures


n n

Chaque type a un constructeur de nom, le nom du type CREATE TYPE Tprnoms AS VARRAY(4) OF VARCHAR(20) CREATE TYPE Ttlphones AS TABLE OF CHAR(10) Ttlphones ('021 333 44 55' , '022 444 66 77') CREATE TYPE Tadresse AS OBJECT ( rue VARCHAR(20), numro VARCHAR(4), localit VARCHAR(20), NPA CHAR(4) ) Tadresse (rue : 'rue du lac', numro : '22A', localit : 'Lausanne', NPA : '1007' )
BDA9.12

Tprnoms ('Marc' , 'Alain')


n

Accs aux valeurs complexes (type OBJECT)


n Accs

aux composants via la notation pointe

TYPE Tadresse AS OBJECT ( rue VARCHAR(20), numro VARCHAR(4), localit VARCHAR(20), NPA CHAR(4) ) u CREATE TABLE Personne ( AVS CHAR(11) , nom VARCHAR(20), prnoms Tprnoms , adr Tadresse ) u SELECT p.adresse.localit FROM Personne p WHERE p.AVS = 12345123451

u CREATE

BDA9.13

Accs aux valeurs multivalues (Types VARRAY et TABLE)


n

oprateurs usuels de SQL


u u

condition lmentaire : lment IN collection condition lmentaire : EXIST collection SELECT FROM nom-table t , TABLE (t.attribut-multivalu) v

Nouveau : dclaration d'une variable sur une collection


u

=> accs et mise jour soit de toute la collection, soit d'un de ses lments
n

Exemples
u

u u u

CREATE TABLE Personne ( AVS CHAR(11) , nom VARCHAR(20) , prnoms Tprnoms , adr Tadresse ) Personnes dont un prnom est Annie : SELECT p FROM Personne p, TABLE(p.prnoms) pr WHERE pr.COLUMN_VALUE = 'Annie' SELECT p FROM Personne p WHERE 'Annie' IN (SELECT * FROM TABLE (p.prnoms))
BDA9.14

Accs aux valeurs multivalues (Types VARRAY et TABLE) - suite


n n

Accs toute la collection CREATE TABLE Personne ( AVS CHAR(11) , nom VARCHAR(20) , prnoms Tprnoms , adr Tadresse ) Noms et prnoms des personnes : SELECT p.nom, p.prnoms FROM Personne p
'Muller' 'Rochat' Tprnoms('Annie', 'Marie') Tprnoms('Philippe', 'Marc')

n n

BDA9.15

IDENTITE - ATTRIBUTS REFERENCE


n

Type OBJECT : constructeur de :


u u

valeurs structures objets (si CREATE TABLE nom-table OF ce-type)

CREATE TYPE Tlogement AS OBJECT ( type VARCHAR(15), surface NUMBER(4), nbpices NUMBER(3,2)) CREATE TABLE Habitant1 (AVS CHAR(11), nom VARCHAR(20) , prnoms Tprnoms, habite Tlogement)
u

habite : valeur structure

CREATE TABLE Habitant2 (AVS CHAR(11), nom VARCHAR(20) , prnoms Tprnoms, habite REF Tlogement)
u u

habite : oid de Tlogement => CREATE TABLE LesLogements OF Tlogement


BDA9.16

Deux types d'attributs rfrence !


n EXTERNAL
u non

KEY : valeur de la cl

orient u CREATE TABLE Anctre (num NUMBER(3) PRIMARY KEY, nom VARCHAR(20) , prnoms Tprnoms , pre NUMBER(3) REFERENCES Anctre , mre NUMBER(3) REFERENCES Anctre)
n REF

nom-type : lien de composition objet (oid)

u orient u pas

d'inverse gr par le SGBD u pas de mise jour faite par le SGBD lors des suppressions d'objets composants => Attention aux rfrences invalides !
BDA9.17

Attribut rfrence objet (suite)


n CREATE

TYPE Tanctre AS OBJECT ( num NUMBER(3), nom VARCHAR(20) , prnoms Tprnoms , pre REF Tanctre , mre REF Tanctre ) TABLE LesAnctres OF Tanctre (PRIMARY KEY(num))

n CREATE

BDA9.18

Manipulation des att. rfrence objet


n Trois

nouveaux oprateurs permettent de rcuprer l'oid ou la valeur d'un objet


u REF(objet)

=> l'oid de l'objet u VALUE(objet) => valeur structure sous la forme nom-type(valeur) u DEREF(oid) => valeur structure sous la forme nom-type(valeur)

BDA9.19

Manipulation des att. rfrence objet (2)


n

Rappel : CREATE TYPE Tanctre AS OBJECT (num NUMBER(3), nom VARCHAR(20) , prnoms Tprnoms , pre REF Tanctre , mre REF Tanctre) Insrer dans LesAnctres une nouvelle personne : (12, Philippe Michel Rochat, de pre le numro 10 et de mre le numro 11) INSERT INTO LesAnctres VALUES ( 12 , 'Rochat' , Tprnoms('Philippe', 'Michel') , (SELECT REF(x) FROM LesAnctres x WHERE x.num=10) , (SELECT REF(x) FROM LesAnctres x WHERE x.num=11) )
BDA9.20

METHODES
n Chaque

type OBJECT peut avoir des mthodes

n CREATE

TYPE nom-type AS OBJECT ( dclaration des attributs , dclaration des signatures des mthodes ) d'une mthode
u MEMBER

n Signature

FUNCTION nom-mthode ( nom-paramtre1 [ IN / OUT ] type1 , .) RETURN typen u MEMBER PROCEDURE nom-mthode ( nom-paramtre1 [ IN / OUT ] type1 , .)

BDA9.21

Corps d'un type OBJECT


n Contient

le code de ses mthodes

Le code peut contenir des : l instructions PL/SQL (ou JAVA) l instructions SQL l appels de mthodes
n CREATE

TYPE BODY nom-type AS

MEMBER FUNCTION / PROCEDURE nom-mthode1 ( nom-paramtre11 [ IN / OUT ] type11 , .) BEGIN code de-la-mthode1 END MEMBER FUNCTION / PROCEDURE nom-mthode2 ( nom-paramtre21 [ IN / OUT ] type21 , .) BEGIN code de-la-mthode2 END .
BDA9.22

HIERARCHIE DES TYPES OBJECT


n On

peut crer des sous-types d'un type OBJECT

u =>

hritage des attributs et mthodes u avec possibilit de redfinir le code des mthodes dans les sous-types
n Pas

d'hritage multiple : Pas de hirarchie des tables

n ATTENTION n Mais

une table d'objets de format un sur-type peut contenir des objets du sur-type et de ses soustypes

BDA9.23

Exemple de hirarchie
n CREATE

TYPE Tpersonne AS OBJECT (AVS CHAR(11), nom VARCHAR(20) , prnoms Tprnoms, conjoint REF TPersonne) NOT FINAL
u NOT

FINAL : mot cl obligatoire si le type a des soustypes

n CREATE

TYPE Ttudiant UNDER Tpersonne (facult VARCHAR(18), cycle VARCHAR(18)) TABLE LesPersonnes OF Tpersonne TABLE LesEtudiants OF Ttudiant

n CREATE n CREATE

n Attention

: Il n'y a pas inclusion de population entre LesEtudiants et LesPersonnes. Les tables sont indpendantes l'une de l'autre. BDA9.24

Exemple de hirarchie (suite)


n LesPersonnes
u INSERT

peut contenir des objets de type Tpersonne et Ttudiant


INTO LesPersonnes VALUES(11111, 'Rochat', Tprnoms('Philippe'), NULL) => cration d'un objet de type Tpersonne et insertion dans la table LesPersonnes u INSERT INTO LesPersonnes VALUES(Ttudiant(22222, 'Muller', Tprnoms('Annie', 'Marie'), NULL, 'HEC', 'Master') => cration d'un objet de type Ttudiant et insertion dans la table LesPersonnes

n De

mme, l'attribut rfrence conjoint peut contenir un oid d'objet de type Tpersonne ou Ttudiant
BDA9.25

Nouvelle condition lmentaire


n VALUE(objet) n condition

IS OF nom-sous-type

vraie ssi l'objet est du type "nom-sous-

type"
n Exemple

: SELECT p FROM LesPersonnes p WHERE VALUE(p) IS OF Ttudiant => rend les objets de LesPersonnes qui sont de type Ttudiant

BDA9.26

Vous aimerez peut-être aussi