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