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