SGBD relationnels-objets un exemple : ORACLE

Transcription

SGBD relationnels-objets un exemple : ORACLE
Bases de données orientées 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 séries
temporelles
u…
n Ce
chapitre porte sur l'extension OO :
le relationnel-objet
n SQL3
u Les
est compatible avec SQL2
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
de table quasi inchangé
concept, TYPE, qui décrit :
u les
structures complexes et multivaluées
u le format des objets
u les méthodes
n hiérarchie
d'héritage des types
n Un
nouveau constructeur de domaine : REF
pour définir les liens de composition
n Tables
de 3 sortes
u tables
"normales" de tuples en 1ère forme normale
u tables de tuples en non 1FN : tables de valeurs
structurées
u tables d'objets
BDA9.3
LES TYPES
n Domaines
u CHAR,
usuels de SQL :
VARCHAR, NUMBER, DATE…
n Nouveaux
domaines définis par l'utilisateur,
propres à la BD, pour décrire :
u un
multivalué
l TYPE VARRAY : vecteur
l TYPE nested TABLE : table insérée à 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 défini par l'utilisateur
⇒ valeur multivaluée de type vecteur
n CREATE
TYPE Tprénoms AS VARRAY(4) OF
VARCHAR(20)
u Exemple
de valeur : ('Marc', 'Pierre')
n CREATE
TABLE Personne (AVS CHAR(11), nom
VARCHAR(20), prénoms Tprénoms)
BDA9.5
Type TABLE insérée (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 défini par l'utilisateur
valeur multivaluée 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
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
BDA9.6
Type OBJECT
n
Deux fonctions :
u
u
n
CREATE TYPE nom-type AS OBJECT
( nom1 nom-type1 , nom2 nom-type2 , …
<définition de méthodes> )
u
n
constructeur de valeur complexe (monovaluée)
constructeur d'objet = (oid , valeur complexe)
nom-typei :
l type usuel de SQL (CHAR, VARCHAR, NUMBER…)
l type défini par l'utilisateur
Utilisation comme constructeur de valeur complexe
u
u
CREATE TYPE Tadresse AS OBJECT
( rue VARCHAR(20), numéro VARCHAR(4), localité
VARCHAR(20), NPA CHAR(4) )
CREATE TABLE Personne (AVS CHAR(11), nom VARCHAR(20),
prénoms Tprénoms, adr Tadresse )
BDA9.7
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
u
u
u
création d'une table d'objets de format Tpersonne
l NB On peut créer plusieurs tables d'objets de format Tpersonne
INSERT INTO LesPersonnes VALUES (12345123451, 'Rochat', …)
=> création d'un objet (oid + valeur), permanent, stocké dans
LesPersonnes
La table LesPersonnes a une colonne supplémentaire invisible,
gérée par le SGBD qui contient l'oid de chaque objet
Cette colonne est automatiquement indexée
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 première forme normale (1FN)
u CREATE 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ées
u ensemble
de tuples en non première forme normale
u CREATE TABLE Personne ( AVS CHAR(11) ,
nom VARCHAR(20) , prénoms Tprénoms ,
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),
prénoms Tprénoms, 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 structurés à plusieurs niveaux
n
SQL permet de décrire des attributs complexes et
multivalués à plusieurs niveaux, en créant un type par
constructeur
u
u
complexe (TYPE OBJECT)
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.11
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.12
Accès aux valeurs complexes
(type OBJECT)
n Accès
aux composants via la notation pointée
u 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 )
u SELECT p.adresse.localité
FROM Personne p
WHERE p.AVS = 12345123451
BDA9.13
Accès aux valeurs multivaluées
(Types VARRAY et TABLE)
n
opérateurs usuels de SQL
u
u
n
condition élémentaire : élément IN collection
condition élémentaire : EXIST collection
Nouveau : déclaration d'une variable sur une collection
u
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
Exemples
u
u
u
u
CREATE TABLE Personne
( AVS CHAR(11) , nom VARCHAR(20) ,
prénoms Tprénoms , adr Tadresse )
Personnes dont un prénom est Annie :
SELECT p FROM Personne p, TABLE(p.prénoms) pr
WHERE pr.COLUMN_VALUE = 'Annie'
SELECT p FROM Personne p
WHERE 'Annie' IN (SELECT * FROM TABLE (p.prénoms))
BDA9.14
Accès aux valeurs multivaluées
(Types VARRAY et TABLE) - suite
n
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'
'Rochat'
…
Tprénoms('Annie', 'Marie')
Tprénoms('Philippe', 'Marc')
BDA9.15
IDENTITE - ATTRIBUTS REFERENCE
n
Type OBJECT : constructeur de :
u
u
valeurs structurées
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
n
habite : valeur structurée
CREATE TABLE Habitant2 (AVS CHAR(11), nom
VARCHAR(20) , prénoms Tprénoms, habite REF
Tlogement)
u
u
habite : oid de Tlogement
=> CREATE TABLE LesLogements OF Tlogement
BDA9.16
Deux types d'attributs référence !
n EXTERNAL
KEY : valeur de la clé
u non
orienté
u CREATE 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)
n REF
nom-type : lien de composition objet (oid)
u orienté
u pas
d'inverse géré par le SGBD
u pas de mise à jour faite par le SGBD lors des
suppressions d'objets composants
=> Attention aux références invalides !
BDA9.17
Attribut référence objet (suite)
n 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 CREATE
TABLE LesAncêtres OF Tancêtre
(PRIMARY KEY(num))
BDA9.18
Manipulation des att. référence objet
n Trois
nouveaux opérateurs permettent de
récupérer l'oid ou la valeur d'un objet
u REF(objet)
=> l'oid de l'objet
u VALUE(objet) => valeur structurée
sous la forme nom-type(valeur)
u DEREF(oid) => valeur structurée
sous la forme nom-type(valeur)
BDA9.19
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.20
METHODES
n Chaque
type OBJECT peut avoir des méthodes
n CREATE
TYPE nom-type AS OBJECT
( déclaration des attributs ,
déclaration des signatures des méthodes )
n Signature
d'une méthode
u MEMBER
FUNCTION nom-méthode
( nom-paramêtre1 [ IN / OUT ] type1 , ….)
RETURN typen
u MEMBER PROCEDURE nom-méthode
( nom-paramêtre1 [ IN / OUT ] type1 , ….)
BDA9.21
Corps d'un type OBJECT
n Contient
le code de ses méthodes
Le code peut contenir des :
l instructions PL/SQL (ou JAVA)
l instructions SQL
l appels de méthodes
n CREATE
TYPE BODY nom-type AS
MEMBER 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.22
HIERARCHIE DES TYPES OBJECT
n On
peut créer des sous-types d'un type OBJECT
u =>
héritage des attributs et méthodes
u avec possibilité de redéfinir le code des méthodes dans
les sous-types
n Pas
d'héritage multiple
n ATTENTION
: Pas de hiérarchie des tables
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 hiérarchie
n CREATE
TYPE Tpersonne AS OBJECT
(AVS CHAR(11), nom VARCHAR(20) , prénoms
Tprénoms, conjoint REF TPersonne)
NOT FINAL
u NOT
FINAL : mot clé obligatoire si le type a des soustypes
n CREATE
TYPE Tétudiant UNDER Tpersonne
(faculté VARCHAR(18), cycle VARCHAR(18))
n CREATE
TABLE LesPersonnes OF Tpersonne
n CREATE
TABLE LesEtudiants OF Tétudiant
n Attention
: Il n'y a pas inclusion de population
entre LesEtudiants et LesPersonnes. Les tables
sont indépendantes l'une de l'autre.
BDA9.24
Exemple de hiérarchie (suite)
n LesPersonnes
peut contenir des objets de type
Tpersonne et Tétudiant
u INSERT
INTO LesPersonnes VALUES(11111, 'Rochat',
Tprénoms('Philippe'), NULL)
=> création d'un objet de type Tpersonne et insertion
dans la table LesPersonnes
u 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
n De
même, l'attribut référence conjoint peut contenir
un oid d'objet de type Tpersonne ou Tétudiant
BDA9.25
Nouvelle condition élémentaire
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 Tétudiant
=> rend les objets de LesPersonnes qui sont de
type Tétudiant
BDA9.26