sgbd relationnels-objets un exemple : oracle · sgbd relationnels-objets un exemple : oracle bases...

26
BDA10.1 SGBD relationnels-objets un exemple : ORACLE Bases de données orientées objets

Upload: vodien

Post on 13-Sep-2018

227 views

Category:

Documents


0 download

TRANSCRIPT

BDA10.1

SGBD relationnels-objets

un exemple : ORACLE

Bases de données orientées objets

BDA9.2

SQL3

n SQL3 = SQL2 pour BD relationnelles+ des extensions uorienté-objetumulti-mediau spatialu séries temporellesu…

nCe chapitre porte sur l'extension OO : le relationnel-objet

n SQL3 est compatible avec SQL2uLes BD et applications existantes en SQL2 marchent

avec SQL3u=> passage facile du relationnel au relationnel-objet

BDA9.3

Comment étendre le relationnel à l'OO

nConcept de table quasi inchangé

nNouveau concept, TYPE, qui décrit :u les structures complexes et multivaluéesu le format des objetsu les méthodes

n hiérarchie d'héritage des types

nUn nouveau constructeur de domaine : REFpour définir les liens de composition

n Tables de 3 sortesu tables "normales" de tuples en 1ère forme normaleu tables de tuples en non 1FN : tables de valeurs

structuréesu tables d'objets

BDA9.4

LES TYPES

nDomaines usuels de SQL : uCHAR, VARCHAR, NUMBER, DATE…

nNouveaux domaines définis par l'utilisateur, propres à la BD, pour décrire :uun multivalué

l TYPE VARRAY : vecteurl TYPE nested TABLE : table insérée à la place d'une

valeuruun complexe … éventuellement avec oid (!)

l valeur complexel objet (oid, valeur complexe)

BDA9.5

Type VARRAY

nCREATE TYPE nom-typeAS VARRAY(nbmax) OF nom-type2unom-type2 :

l type usuel de SQL (CHAR, VARCHAR, NUMBER…)l type défini par l'utilisateur

⇒ valeur multivaluée de type vecteur

nCREATE TYPE Tprénoms AS VARRAY(4) OF VARCHAR(20)uExemple de valeur : ('Marc', 'Pierre')

nCREATE TABLE Personne (AVS CHAR(11), nom VARCHAR(20), prénoms Tprénoms)

BDA9.6

Type TABLE insérée (nested TABLE)

n CREATE TYPE Ttéléphones AS TABLE OF CHAR(10)

n CREATE TABLE Personne (AVS CHAR(11), nom VARCHAR(20), tel Ttéléphones)NESTED TABLE tel STORE AS TableTel

n L'utilisateur doit donner un nom à la table qui contiendra les téléphones de toutes les personnes

021 456 55 99021 456 66 77021 691 55 77022 555 66 88

n CREATE TYPE nom-typeAS TABLE OF nom-type2u nom-type2 :

l type usuel de SQL (CHAR, VARCHAR, NUMBER…)l type défini par l'utilisateur

⇒ valeur multivaluée de type tablel pas de nombre maximum de valeursl pas d'ordrel indexable

BDA9.7

Type OBJECT

n Deux fonctions :u constructeur de valeur complexe (monovaluée)u constructeur d'objet = (oid , valeur complexe)

n CREATE TYPE nom-type AS OBJECT( nom1 nom-type1 , nom2 nom-type2 , …<définition de méthodes> )u nom-typei :

l type usuel de SQL (CHAR, VARCHAR, NUMBER…)l type défini par l'utilisateur

n Utilisation comme constructeur de valeur complexeu CREATE TYPE Tadresse AS OBJECT

( rue VARCHAR(20), numéro VARCHAR(4), localité VARCHAR(20), NPA CHAR(4) )

u CREATE TABLE Personne (AVS CHAR(11), nom VARCHAR(20), prénoms Tprénoms, adr Tadresse )

BDA9.8

Type OBJECT - constructeur d'objet

n CREATE TYPE Tpersonne AS OBJECT( AVS CHAR(11), nom VARCHAR(20),prénoms Tprénoms, adr Tadresse )

n CREATE TABLE LesPersonnes OF Tpersonne u création d'une table d'objets de format Tpersonne

l NB On peut créer plusieurs tables d'objets de format Tpersonneu INSERT INTO LesPersonnes VALUES (12345123451, 'Rochat', …)

=> création d'un objet (oid + valeur), permanent, stocké dans LesPersonnes

u La table LesPersonnes a une colonne supplémentaire invisible, gérée par le SGBD qui contient l'oid de chaque objet

u Cette colonne est automatiquement indexéel recherche de l'objet de tel oid plus rapide

BDA9.9

Trois sortes de tables

n Table du relationnel classiqueuensemble de tuples en première forme normale (1FN)uCREATE TABLE Personne ( AVS CHAR(11) ,

nom VARCHAR(20), prénom VARCHAR(20) ,rue VARCHAR(20), numéro VARCHAR(4) , localité VARCHAR(20), NPA CHAR(4) )

n Table de valeurs structuréesuensemble de tuples en non première forme normaleuCREATE TABLE Personne ( AVS CHAR(11) ,

nom VARCHAR(20) , prénoms Tprénoms ,adr Tadresse )

BDA9.10

Trois sortes de tables (2)

n Table d'objetsuensemble d'objetsuCREATE TYPE Tpersonne AS OBJECT

( AVS CHAR(11), nom VARCHAR(20),prénoms Tprénoms, adr Tadresse )

uCREATE TABLE LesPersonnes OF Tpersonne

nOn peut associer aux tables quelle que soit leur sorte les contraintes usuelles de SQL :uPRIMARY KEY (nom-col*) uUNIQUE (nom-col*)uFOREIGN KEY (nom-col*) REFERENCES nom-table

[(nom-col*)] [action]uCHECK ( condition)

BDA9.11

Types structurés à plusieurs niveauxn SQL permet de décrire des attributs complexes et

multivalués à plusieurs niveaux, en créant un type par constructeuru complexe (TYPE OBJECT)u multivalué (TYPE VARRAY ou TABLE insérée)

n Exemple : Table d'objets personnes avec leurs enfants (prénoms et date de naissance)

n CREATE TYPE Tenfant AS OBJECT(prénoms Tprénoms , dateN DATE)

n CREATE TYPE Tenfants AS VARRAY(12) OF Tenfant

n CREATE TYPE Tpersonne2 AS OBJECT( AVS CHAR(11) , nom VARCHAR(20),prénoms Tprénoms , adr Tadresse , enfants Tenfants )

n CREATE TABLE LesPersonnes2 OF Tpersonne2

BDA9.12

Création de valeurs structurées

n Chaque type a un constructeur de nom, le nom du type

n CREATE TYPE Tprénoms AS VARRAY(4) OF VARCHAR(20)

Tprénoms ('Marc' , 'Alain')

n CREATE TYPE Ttéléphones AS TABLE OF CHAR(10)

Ttéléphones ('021 333 44 55' , '022 444 66 77')

n CREATE TYPE Tadresse AS OBJECT( rue VARCHAR(20), numéro VARCHAR(4), localité VARCHAR(20), NPA CHAR(4) )

Tadresse (rue : 'rue du lac', numéro : '22A', localité : 'Lausanne', NPA : '1007' )

BDA9.13

Accès aux valeurs complexes(type OBJECT)n Accès aux composants via la notation pointéeuCREATE TYPE Tadresse AS OBJECT

( rue VARCHAR(20), numéro VARCHAR(4), localité VARCHAR(20), NPA CHAR(4) )

uCREATE TABLE Personne( AVS CHAR(11) , nom VARCHAR(20),prénoms Tprénoms , adr Tadresse )

uSELECT p.adresse.localitéFROM Personne p WHERE p.AVS = 12345123451

BDA9.14

Accès aux valeurs multivaluées(Types VARRAY et TABLE)n opérateurs usuels de SQL

u condition élémentaire : élément IN collectionu condition élémentaire : EXIST collection

n Nouveau : déclaration d'une variable sur une collectionu SELECT … FROM nom-table t , TABLE (t.attribut-multivalué) v …

=> accès et mise à jour soit de toute la collection, soit d'un de ses éléments

n Exemplesu CREATE TABLE Personne

( AVS CHAR(11) , nom VARCHAR(20) ,prénoms Tprénoms , adr Tadresse )

u Personnes dont un prénom est Annie :u SELECT p FROM Personne p, TABLE(p.prénoms) pr

WHERE pr.COLUMN_VALUE = 'Annie'u SELECT p FROM Personne p

WHERE 'Annie' IN (SELECT * FROM TABLE (p.prénoms))

BDA9.15

Accès aux valeurs multivaluées(Types VARRAY et TABLE) - suiten Accès à toute la collection

n CREATE TABLE Personne( AVS CHAR(11) , nom VARCHAR(20) ,prénoms Tprénoms , adr Tadresse )

n Noms et prénoms des personnes :

n SELECT p.nom, p.prénoms FROM Personne p 'Muller' Tprénoms('Annie', 'Marie')'Rochat' Tprénoms('Philippe', 'Marc')…

BDA9.16

IDENTITE - ATTRIBUTS REFERENCE

n Type OBJECT : constructeur de :u valeurs structuréesu objets (si CREATE TABLE nom-table OF ce-type)

n CREATE TYPE Tlogement AS OBJECT( type VARCHAR(15), surface NUMBER(4), nbpièces NUMBER(3,2))

n CREATE TABLE Habitant1 (AVS CHAR(11), nom VARCHAR(20) , prénoms Tprénoms, habite Tlogement)u habite : valeur structurée

n CREATE TABLE Habitant2 (AVS CHAR(11), nom VARCHAR(20) , prénoms Tprénoms, habite REF Tlogement)u habite : oid de Tlogementu => CREATE TABLE LesLogements OF Tlogement

BDA9.17

Deux types d'attributs référence !

n EXTERNAL KEY : valeur de la cléunon orientéuCREATE TABLE Ancêtre

(num NUMBER(3) PRIMARY KEY,nom VARCHAR(20) , prénoms Tprénoms ,

père NUMBER(3) REFERENCES Ancêtre ,mère NUMBER(3) REFERENCES Ancêtre)

nREF nom-type : lien de composition objet (oid)uorientéupas d'inverse géré par le SGBDupas de mise à jour faite par le SGBD lors des

suppressions d'objets composants=> Attention aux références invalides �!

BDA9.18

Attribut référence objet (suite)

nCREATE TYPE Tancêtre AS OBJECT ( num NUMBER(3), nom VARCHAR(20) , prénoms Tprénoms , père REF Tancêtre , mère REF Tancêtre )

nCREATE TABLE LesAncêtres OF Tancêtre (PRIMARY KEY(num))

BDA9.19

Manipulation des att. référence objet

n Trois nouveaux opérateurs permettent de récupérer l'oid ou la valeur d'un objetuREF(objet) => l'oid de l'objetuVALUE(objet) => valeur structurée

sous la forme nom-type(valeur)uDEREF(oid) => valeur structurée

sous la forme nom-type(valeur)

BDA9.20

Manipulation des att. référence objet (2)

n Rappel : CREATE TYPE Tancêtre AS OBJECT (num NUMBER(3), nom VARCHAR(20) , prénoms

Tprénoms , père REF Tancêtre , mère REF Tancêtre)

n Insérer dans LesAncêtres une nouvelle personne :(12, Philippe Michel Rochat, de père le numéro 10 et de

mère le numéro 11)

n INSERT INTO LesAncêtres VALUES ( 12 , 'Rochat' , Tprénoms('Philippe', 'Michel') ,(SELECT REF(x) FROM LesAncêtres x WHERE x.num=10),(SELECT REF(x) FROM LesAncêtres x WHERE x.num=11) )

BDA9.21

METHODES

nChaque type OBJECT peut avoir des méthodes

nCREATE TYPE nom-type AS OBJECT( déclaration des attributs ,

déclaration des signatures des méthodes )

n Signature d'une méthodeuMEMBER FUNCTION nom-méthode

( nom-paramêtre1 [ IN / OUT ] type1 , ….)RETURN typen

uMEMBER PROCEDURE nom-méthode ( nom-paramêtre1 [ IN / OUT ] type1 , ….)

BDA9.22

Corps d'un type OBJECT

nContient le code de ses méthodesLe code peut contenir des :

l instructions PL/SQL (ou JAVA)l instructions SQLl appels de méthodes

nCREATE TYPE BODY nom-type ASMEMBER FUNCTION / PROCEDURE nom-méthode1( nom-paramêtre11 [ IN / OUT ] type11 , ….)BEGIN code de-la-méthode1 END

MEMBER FUNCTION / PROCEDURE nom-méthode2( nom-paramêtre21 [ IN / OUT ] type21 , ….)BEGIN code de-la-méthode2 END

….

BDA9.23

HIERARCHIE DES TYPES OBJECT

nOn peut créer des sous-types d'un type OBJECTu=> héritage des attributs et méthodesuavec possibilité de redéfinir le code des méthodes dans

les sous-types

n Pas d'héritage multiple

nATTENTION : Pas de hiérarchie des tables

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

BDA9.24

Exemple de hiérarchie

nCREATE TYPE Tpersonne AS OBJECT(AVS CHAR(11), nom VARCHAR(20) , prénoms Tprénoms, conjoint REF TPersonne)NOT FINALuNOT FINAL : mot clé obligatoire si le type a des sous-

types

nCREATE TYPE Tétudiant UNDER Tpersonne(faculté VARCHAR(18), cycle VARCHAR(18))

nCREATE TABLE LesPersonnes OF Tpersonne

nCREATE TABLE LesEtudiants OF Tétudiant

nAttention : Il n'y a pas inclusion de population entre LesEtudiants et LesPersonnes. Les tables sont indépendantes l'une de l'autre.

BDA9.25

Exemple de hiérarchie (suite)

n LesPersonnes peut contenir des objets de type Tpersonne et Tétudiantu INSERT INTO LesPersonnes VALUES(11111, 'Rochat',

Tprénoms('Philippe'), NULL)=> création d'un objet de type Tpersonne et insertion

dans la table LesPersonnesu INSERT INTO LesPersonnes VALUES(Tétudiant(22222,

'Muller', Tprénoms('Annie', 'Marie'), NULL, 'HEC', 'Master')

=> création d'un objet de type Tétudiant et insertion dans la table LesPersonnes

nDe même, l'attribut référence conjoint peut contenir un oid d'objet de type Tpersonne ou Tétudiant

BDA9.26

Nouvelle condition élémentaire

n VALUE(objet) IS OF nom-sous-type

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

n Exemple : SELECT p FROM LesPersonnes pWHERE VALUE(p) IS OF Tétudiant

=> rend les objets de LesPersonnes qui sont de type Tétudiant