La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Relationnel - Objet Le modèle de données Relationnel – Objet avec Oracle 8i.

Présentations similaires


Présentation au sujet: "Relationnel - Objet Le modèle de données Relationnel – Objet avec Oracle 8i."— Transcription de la présentation:

1 Relationnel - Objet Le modèle de données Relationnel – Objet avec Oracle 8i

2 2 Motivations n Modèle relationnel : Première forme normale, Types complexes et collections : INTERDITS, Apparition des modèles de données : Orientés objet, NF2 (non first normal form).

3 3 Le relationnel Points faibles u Structure de données trop simple u Pas de niveau conceptuel (1èreFN) u Pas dintégration avec les langages de programmation objets u Pas de gestion des fonctions spécifiques à certaines données (multimédia) (ajout de fonctions spécifiques dans Oracle 8) Objet Complexe (NF2) méthode Solutions Oracle8i :

4 4 Les performances du rel. n Sur un SGBDR deux opérations u Jointure (lent) u Selection (rapide) n Cas des objets complexes u Répartis sur plusieurs tables Beaucoup de jointures u Mauvaises performances

5 5 Programmation avec un SGBDR n Hors du SGBD (pas dencapsulation) n Cf. embedded SQL (Pro C, JDBC, …) n LMD déclaratif orienté ensemble n Chargement des n-uplets via curseur

6 6 Modèle de données NF2 n Structure des objets complexes dans un contexte relationnel. n Cohabitation des notions de table (données en 1 ère FN) et de données de type complexe (ou objet). n Une table en NF2 peut contenir un attribut composé dune liste de valeurs et/ou un attribut composé de plusieurs attributs. Meilleur niveau conceptuel, Moindre besoin d applatir le monde modélisé, Moins de jointures.

7 7 Exemple : la table Personnes nom{prenoms}Date_naissance{voitures} … prenommodeleanneeno DuranPierre ch Paul Mégane Jacques PionaMarie Twingo Jeanne

8 8 Le modèle relationnel objet dOracle 8i n Concepts NF2 : structure complexe avec collection, Plus n Possibilité de référencer les données (simili oid), n Programmation incluse dans le SGBD avec les méthodes (langage : PL/SQL), attention, langage non complet …. Moins de jointure, références directes, Meilleures performances ! (en théorie)

9 9 Concepts SGBDOO vs SGBDRO (Oracle 8i) Objet (+ou-) encapsulation (+ou-) objet complexe identité dobjet classe héritage redéfinition Persistance Gestion du disque Partage des données Fiabilité Sécurité Langages de requête Indépendance Logique / Physique n Persistance des objets complexes Gestion de large collection de données (+ou-) n Langage de requête pour les objets Concepts SGBD Concepts objets

10 10 Le SGBDRO de Oracle 8i n Pas de classe. u Il faut créer un type abstrait de données (TAD), puis une table ayant ou utilisant ce type. u Implémentation des méthodes liée au TAD n Pas dhéritage. n Surcharge des noms de méthodes possible u 2 méthodes d1 TAD avec le même nom et des paramètres différents => Oracle choisit la bonne à lexécution. u Surcharge des opérateurs Oracle interdite. n Encapsulation simulable à travers un package PL/SQL.

11 11 Concrètement 2 extensions par rapport au modèle relationnel : TAD u I - Les TAD (types abstraits de données), 1. Composition de types, 2. Collections, 3. Références, 4. Méthodes. oid u II - Les oid via les pointeurs. Types complexes

12 12 I – Les TAD n Dans tout TAD peuvent être ajoutées des méthodes (procédures ou fonctions PL/SQL) pour manipuler les objets du TAD, mais pas de contraintes. n Impossible de créer une instance dun TAD directement, il faut passer par une table ! => Initialisation des instances impossible (pas de valeur par défaut associée à un TAD). n Navigation à travers les instances des TAD avec la notation pointée et un alias sur chaque table.

13 13 Instances de TAD n Une table dun TAD est une table dobjets. create tableof u Uniquement créable avec la commande : create table nom_table of nom_TAD; u Toute instance dune telle table possède un oid unique, ce sont des n-uplets objet. u La portée de cet oid est globale. n Attention, u Les autres tables (non directement construite sur un TAD) ne sont pas des tables dobjets.

14 14 I - Les TAD : 1 – Composition de types n Un TAD en RO peut être perçu comme : u A- Un nouveau type dattribut simple défini par lutilisateur (concerne 1 seul attribut), Ou u B- Une structure de données partagées.

15 15 A- TAD perçu comme un nouveau type dattribut n Cela concerne un seul attribut, n Créé à partir dun type dOracle, n Permet denrichir les types prédéfinis doracle, CREATE TYPE, u En ajoutant des méthodes de manipulation, avec la commande CREATE TYPE, SUBTYPEISNOT NULL u En ajoutant des contraintes de domaines, exemple : SUBTYPE typemot IS varchar [NOT NULL] create table code (mot typemot(8), code typemot(25));

16 16 B- TAD perçu comme une structure partagée n Types utilisables par 1 ou plusieurs autres types (composition) et par 1 ou plusieurs tables. n Permet de construire une structure complexe, u Soit directement, u Soit indirectement.

17 17 TAD perçu comme une structure partagée n Construction directe : 1. Création dun type, 2. Création dune table de ce type (=> table dobjets). n Construction indirecte : 1. Création dun type t ayant au moins 1 attribut de type composé défini par lutilisateur (i.e. : t utilise un TAD dans sa définition), 2. Création dune table de type t (=> table dobjets). Ou 1. Création dune table ayant au moins 1 attribut de type composé défini par lutilisateur (=> pas table dobjets).

18 18 Composition directe de types Create typeas object Create type tvoiture as object (modele varchar2(15), annee date, no integer) / -- Remarque : après la création dun TAD et uniquement dans ce cas, / remplace le ; pour terminer un ordre SQL. Create table Create table voitures of tvoiture; -- voitures est une table dobjets. TAD Tvoiture : Tvoiture ModeleAnneeNo

19 19 Exemple de composition directe de TAD TAD Tvoiture : Linsertion des données peut se faire comme dhabitude en SQL : Insert intovalues Insert into voitures values (2ch, 1975, 128); Table voitures : (ordre SLQ : select * from voitures) Tvoiture ModeleAnneeNo ModeleAnneeNo 2ch Mégane

20 20 Composition indirecte de types Create typeas object Create type Tpersonne as object (nom varchar2(15), prenom varchar2(15), date_naissance date, voiture Tvoiture) / Create table Create table personnes of Tpersonne; -- personnes est une table dobjets. Tpersonne NomprenomDate_naissanceVoiture modeleanneeNo TAD Tpersonne :

21 21 Exemple de composition indirecte de TAD constructeur A chaque TAD créé est associé un constructeur (même fonctionnement quen BDOO) du même nom que le TAD (obligation de valuer tous les attributs). Insertion des données dans une table avec TAD : Insert intovalues Insert into personnes values ( Tpersonne ( Duran, Pierre, , Tvoiture (2ch, 1975, 12) ) ); NomprenomDate_naissanceVoiture modeleanneeNo DuranPierre ch PionaMarie Twingo Table personnes : (ordre SQL : select * from personnes) facultatif obligatoire

22 22 Construction indirecte de table Création dune table utilisant un TAD : Create table Create table personnes (nom varchar2(15), prenom varchar2(15), date_naissance date, voiture Tvoiture) / -- personnes nest pas une table dobjets. Insertion de données dans une table utilisant un TAD : Insert intovalues Insert into personnes values (Duran, Pierre, , Tvoiture (2ch, 1975, 12) ) );

23 23 TAD interdépendants n Si types inter-dépendants, impossible de créer un TAD complet et correct sans que lautre ne soit dejà crée => problème. n Exemple : TAD Tpersonne utilise Tvoiture, et TAD Tvoiture utilise Tpersonne. create type n Solution de Oracle 8i : définition de TAD incomplet. Syntaxe : create type nom_type / -- ni attribut, ni méthode déclarés. n TAD complété plus tard, mais dores et déjà utilisable dans dautres TAD.

24 24 Les TAD : 2 – Les collections n Exprimer quune personne possède plusieurs prénoms ou plusieurs voitures dans une même table. n 2 possibilités de stocker des collections : 1. Varray : dans une valeur 2. Nested Table : dans une table séparée Personnes Nomliste-prénomsagevoitures Liera(Pierre,Paul)32Id1 Liera(Zoé,Marie)27Id2 1 valeur 1 table IDTvoiture Id1 2ch Id Id2 2ch Id

25 25 Varray vs. Nested Table n Lien ou ordre entre les éléments de la collection n Stockage n Type des éléments n Requête n Manipulation n Optimisation n Imbrication de collections *types prédéfinis Oracle, y compris REF nonoui Type objet ou scalaire* TABLE avec lopérateur TABLE nonoui non (mais ruse possible, avec Références) nonindex 1 valeur ou BLOB 1 table Varray Nested Table

26 26 Stocker des collections liées u Construction dun Varray : create typeas Varrayof 1. Création du type de la collection, avec : create type nom as Varray (nb_max) of type_elt, 2. Création du type contenant la collection, Tpersonne par exemple (ou création directe de la table) 3. Création de la table de ce dernier type. u Manipulation dun Varray : Stocké et manipulé comme une valeur atomique En 1 ère forme normale Manipulation de la liste, pas des éléments Pas de jointure

27 27 Exemple de collections liées Plusieurs prénoms pour une personne : Create typeas Varrayof Create type liste-prenom as Varray(10) of varchar(15) -- Varray(10) : Varray est le mot-clé pour définir une collection et 10 le nombre maximum déléments de cette liste. -- type des éléments de la collection indiqué après le mot-clé of. / Create type or replaceas object Create type or replace Tpersonne as object (nom varchar(15), Date_n Date, prenoms liste_prenom, voiture Tvoiture) / Create table Create table personnes of Tpersonne; -- personnes est une table dobjets.

28 28 Exemple de table avec collections liées n La encore on utilise le constructeur pour les listes : Insert intovalues Insert into personnes values (Tpersonne(Duran, liste_prenom(Pierre, Paul, Jacques), , Tvoiture(2ch, 1975, 12) ) ); Nom{prenoms}Date_naissanceVoiture Liste_prenommodeleanneeNo DuranPierre ch Paul Jacques PionaMarie ch Jeanne Table personnes : (ordre SQL : select * from personnes)

29 29 Et moins simple n Une personne peut avoir plusieurs voitures. nom{liste_prenoms}Date_naissance{voitures} … prenommodeleanneeno DuranPierre ch Paul Mégane Jacques PionaMarie Twingo Jeanne

30 30 Stocker des collections libres Construction dune Nested Table : create typeas Table of 1. Création du type de la collection, avec : create type nom as Table of type_elt, 2. Création du type contenant la collection puis 3, ou création directe de la table, par exemple Personnes. 3. Création de la table de ce dernier type (sil y a lieu). Génération automatique dun identifiant superficiel Nested_Table_Id pour chaque collection Possibilité de créer un index dans la Nested Table Attention : Une Nested Table nest pas une table objet Pas doid associé à un élément de collection

31 31 Créer des collections libres Create typeas object Create type tvoiture as object (modele varchar(15), annee date, no integer) / Create typeas Table of Create type ens_voiture as Table of Tvoiture / Create table Nested tableStore As Create table Personnes (nom varchar2(15), prenoms liste_prenom, date_naissance Date, voitures ens_voiture); -- pas table dobjets Nested table voitures Store As ToutesVoitures Personnes Nomliste-prénomsagevoitures Liera(Pierre,Paul)32Id1 Liera(Zoé,Marie)27Id2 Nested_table_Id Tvoiture Id1 2ch Id Id2 2ch Id index

32 32 Manipuler des collections libres Une collection dans une Nested Table peut être u Insérée, u Supprimée, u Mise à jour : les éléments dans la nested table peuvent être insérés, supprimés ou maj insert into Personnes values(mila, liste_prenom(Karim, Amin), , ens_voiture(Tvoiture(2ch, 1975, 128), Tvoiture(Mégane, 1998, 179))); insert into Table(select p.voitures from Personnes p where p.nom= mila) values (206, 2000, 3)

33 33 Manipuler ses éléments n Supprimer une collection libre : Update Personnes SET voitures = NULL where nom= mila n Re-créer : avec le constructeur (sinon, aucune opération possible) u Créer un ensemble vide : Update Personnes SET voitures = ens_voiture() where nom= mila u Créer un singleton : Update Personnes SET voitures = ens_voiture(Tvoiture (Mégane, 1998, 179)) where nom= mila n Attention : une opération sur 1 élément d1 collection dans une Nested Table pose un verrou sur son propriétaire => 1 opération à la fois dans une collection !!!!!!

34 34 Requête avec collections n Create type liste_voiture as Varray(10) of Tvoiture / Create table personnes (nom varchar2(15), prenoms liste_prenom, date_naissance Date, voitures liste_voiture); -- idem avec ens_voiture -- personnes nest pas une table dobjets. insert into personnes values(mila, liste_prenom(Karim, Amin), , liste_voiture(Tvoiture(2ch, 1975, 128), Tvoiture(Mégane, 1998, 179))); n On veut exécuter des requêtes sur les collections de voitures, telle No des voitures des personnes.

35 35 Parcourir une collection n Pour parcourir des collections libres ou liées : voir une collection comme une table. TABLE Utilisation de lopérateur TABLE (liste ou sous-table -> table). Puis utilisation dun alias pour parcourir les tables ainsi obtenues. Parcours de chaque collection de chaque n-uplet. Ici, parcours (sélection) de chaque collection prénoms et voitures de chaque personne de la table personnes.

36 36 Exemple de parcours de listes n Numéro des voitures des personnes : Select fromTable Select v.No from personnes p, Table (p.voitures) v; n Numéro des voitures de Piona : Select fromTable where Select v.No from personnes p, Table (p.voitures) v where p.nom = Piona;

37 37 Les TAD : 3 – Les références n Référencer une voiture dans une table sans lexpliciter à chaque fois. u Attention, impossible de référencer une collection ! n Possibilité de référencer des données via des pointeurs. u Créer le TAD t dont on veut référencer les instances, u Créer la table contenant ces instances de t, u Puis : REF F Créer le TAD qui référence t (mot-clé REF), F Créer la table associée. ou F Créer directement la table.

38 38 Exemple de références Référencer la voiture dune personne : Create typeas object Create type Tvoiture as object (modele varchar(15), annee date, No integer) / Create table Create table voitures of Tvoiture; Create or replace typeas object REF Create or replace type Tpersonne as object (nom varchar(15), prenoms liste_prenom, -- Rq : impossible de référencer une collection ! -- prenoms REF liste_prenom est illégal. date_naissance Date, voiture REF Tvoiture) / Create table Create table personnes of Tpersonne;

39 39 Insertion avec références n Pour insérer un n-uplet dans la table personnes, il faut référencer la voiture de cette personne dans la table voitures Récupérer ladresse de cette voiture pour la placer dans la table pesonne. Utilisation de lopérateur REF qui renvoie ladresse dun n- uplet dans une table (REF : n-uplet -> pointeur). Insert intovalues Insert into personnes values (Duran, liste_prenom(Pierre, Paul, Jacques), , (select REF(v) from voitures v where v.modele = 2ch));

40 40 Liste_prenom DuranPierre Paul Jacques PionaMarie Jeanne Tpersonne Liste_prenom Tvoiture modele annee No modeleanneeNo 2ch Mégane Table voitures : Table Personnes :

41 41 Requêtes avec références n Résultat de la requête : select * from personnes; n Pour obtenir la valeur référencée : Utilisation de lopérateur DEREF (pointeur -> valeur) Select DEREFfrom Select DEREF(p.voiture), p.nom from personnes p where p.voiture.année < 1990; Liste_prenom DuranPierre F A39847C… -- adresse du pointeur. Ne veut rien dire ! Paul Jacques

42 42 Exemple – suite : Création directe de la table Référencer la voiture dune personne : Create typeas object Create type Tvoiture as object (modele varchar(15), annee date, No integer) / Create table Create table voitures of Tvoiture; -- voitures est une table dobjets. Create table REF Create table personnes (nom varchar(15), prenoms liste_prenom, date_naissance Date, voiture REF Tvoiture); -- personnes nest pas directement construite avec un TAD, donc nest pas une table dobjets.

43 43 Mise à jour avec références Create typeas object Create table REF n Soit la table suivante : Create type Tadresse as object (ville varchar(15), rue varchar(15)) / Create table personnes (nom varchar(15), prenoms liste_prenom, adresse Tadresse, date_naissance Date, voiture REF Tvoiture); updateset where n Modifier ladresse : update personnes p set p.adresse.rue = Comédie where p.adresse.ville = Montpellier; updateset fromwhere n Changer de voiture : update personnes p set p.voiture = (select REF(v) from voitures v where v.modele = Mégane) where p.voiture.annee = 1975; n Attention : modifier une voiture à travers une personne est impossible !

44 44 Référencer du vide n Pour tester lexistence dune instance référencée : Utilisation du prédicat IS DANGLING. updateset WhereIS DANGLING n Exemple : update Personnes set voiture = NULL Where voiture IS DANGLING

45 45 Les TAD : 4 – Les méthodes n Déclaration des méthodes (signature) insérée après les attributs dans la déclaration des TAD (private/public). Create typeas object MEMBER STATIC Create type [or replace] nom_type as object (att1 type1, …, atti typei, MEMBER signature_methode1, …, STATIC signature_methodej), Avec u MEMBER : méthode invoquée sur les instances du TAD, u STATIC : méthode invoquée sur le TAD, u signature_methodel : nom_méthode (var1 type_var1, …). F typel ou type_varl défini par lutilisateur ou prédéfini F nom_ méthode différent de celui du TAD et de ses attributs.

46 46 Corps des méthodes n Code des méthodes dans le corps du TAD. Create or replace type bodyas … n Syntaxe : Create or replace type body nom_type as … n Contient uniquement le corps des méthodes. n Si il ny a que des attributs dans un TAD, corps inutile. n Possibilité dutiliser le paramètre SELF dans le corps des méthodes (idem quen OO) u Implicitement ou explicitement déclaré, u Si déclaration implicite : IN pour les procédures, IN OUT pour les fonctions.

47 47 Exemple de méthode Create or replace typeas object REF MEMBER Create or replace type Tpersonne as object (nom varchar2(15), prenoms liste_prenom, date_naissance Date, voiture REF Tvoiture, MEMBER procedure ajoute_prenom (prenom_sup IN OUT Tprenom) ) / Create or replace type bodyas MEMBER Create or replace type body Tpersonne as MEMBER procedure ajoute_prenom (prenom_sup IN OUT Tprenom) IS Begin ….. End; End /

48 48 Appel de méthode n Avec notation pointée (comme pour les attributs) n Chainage des appels de méthodes possible u Exécution des méthodes de gauche à droite, Pas dappel à droite dun appel de procédure Si chainage, la 1ère fonction doit renvoyer un objet pouvant être passé à la 2nde. n Exemple : Updateset where Update personnes p set p.prenoms = p.ajoute_prenom(Clémentine) where p.nom = Piona;

49 49 II – Les oid n Chaque instance dune table dobjets possède un identificateur dobjet qui : u Identifie lobjet stocké dans ce n-uplet de façon unique, u Sert à référencer lobjet (seuls oid de portée globale). n Ainsi quen OO, utilisation des chemins (notation pointée) pour naviguer à travers les objets référencés. n Rappel : create tableof u Table dobjets : uniquement créée avec la commandecreate table nom_table of nom_tad;.

50 50 Rappel : Extraction dun oid REF n Utilisation de la primitive REF. n Exemple (avec 1 voiture par personne): n Update personnes p SET p.voiture = (select REF(v) from voitures v where v.modele=2ch) where p.nom = Piona; n Utilisation identique dans les requêtes, insertions et suppressions. n Permet dassurer lintégrité référentielle.

51 51 Sélection dun objet n Avec select : récupération densemble de valeurs des attributs dune table. n Si on veut récupérer un ensemble dobjet : u Utilisation de lopérateur VALUE u Exemple : Selectfrom F SQL> Select * from voitures; 2ch¦ 1975¦ 128 Mégane¦ 1998¦ 371 Selectvaluefrom F SQL> Select value(v) from voitures v; Tvoiture(2ch, 1975, 128) Tvoiture(Mégane, 1998, 371) u Idem avec insert et update (valeur/objet).

52 52 LMD et TAD n Comme dhabitude en SQL, u Insert, Update, Delete, Select. n Avec en plus les fonctions : u VALUE, u REF, u DEREF n Le constructeur associé à chaque TAD, n Le prédicat IS DANGLING, Returning ref() into n La clause RETURNING pour ESQL et PL/SQL, ajout à la fin dun insert ou update de la clause : Returning ref(alias_table) into nom_var n Lopérateur TABLE.

53 53 LDD et TAD n Créer : deja vu …. Alter type n Modifier : Alter type Seules modifications possibles : les méthodes (insertions, suppressions, modifications) Drop type n Supprimer : Drop type n Rien nest changé pour la modification et suppression des tables (y compris les tables dobjets).

54 54 Conclusion Oracle 8i versus SQL3 : Oracle 8i basé sur SQL, F Lexistant et F RO TAD utilisateur, Collections, Référence d objet, - Héritage (TAD ou table)


Télécharger ppt "Relationnel - Objet Le modèle de données Relationnel – Objet avec Oracle 8i."

Présentations similaires


Annonces Google