ODMG Copyright Serge Miranda Part III Introduction à l ODMG Professeur Serge Miranda...
-
Upload
ferrand-martel -
Category
Documents
-
view
118 -
download
0
Transcript of ODMG Copyright Serge Miranda Part III Introduction à l ODMG Professeur Serge Miranda...
ODMG Copyright Serge Miranda Part III
Introduction à l’ Introduction à l’ ODMGODMG
Professeur Serge Miranda
Master2 STIC « MBDS »
www.mbds-fr.org
« Bases de données : architectures, modèles relationnels et objets, SQL3 , ODMG» Dunod 2002
ODMG Copyright Serge Miranda Part III
Un peu de PUB …Un peu de PUB …Iivre de référence…Iivre de référence…
ODMG Copyright Serge Miranda Part III
Consortium ODMGConsortium ODMG
Créé en 1991 par Rick Cattell (SUN, Javasoft) comme Créé en 1991 par Rick Cattell (SUN, Javasoft) comme sous groupe de l’ OMG (sous groupe de l’ OMG (Object Management Group) Object Management Group) avec les éditeurs suivants: 02 Tech., Objectivity, Object avec les éditeurs suivants: 02 Tech., Objectivity, Object Design, Ontos, VersantDesign, Ontos, Versant
OMG : CORBA,…OMG : CORBA,…
plus de 50 organisations de l’industrie et de plus de 50 organisations de l’industrie et de l’informatique en 2000l’informatique en 2000
(Lucent, Lockheed, CA, Microsoft, Baan, ...)(Lucent, Lockheed, CA, Microsoft, Baan, ...)
Objectifs:Objectifs: Promouvoir les OO DBMS,Promouvoir les OO DBMS, FUD FUD , au delà des , au delà des
niches et standard avant …SQL3 !niches et standard avant …SQL3 ! Créer un standard pour garantir l’indépendance Créer un standard pour garantir l’indépendance
entre OODBMS (entre OODBMS (Portability)Portability)
ODMG Copyright Serge Miranda Part III
Historique du Historique du standard « OO »standard « OO »
Objectif « portabilité Objectif « portabilité Code »Code »
Première réunion à l’initiative de Rick Première réunion à l’initiative de Rick Catell chez Sun en Sept 91Catell chez Sun en Sept 91
ODMG 1.0 (1993) : 5 EditeursODMG 1.0 (1993) : 5 Editeurs ODL, OQL, Interface C++, SmalltalkODL, OQL, Interface C++, Smalltalk
ODMG 2.0 (1996) : 10 Editeurs (Poet, ODMG 2.0 (1996) : 10 Editeurs (Poet, Lucent, Windward, American Man, Barry)Lucent, Windward, American Man, Barry)
Interface JavaInterface Java (Java Binding) (Java Binding) , , Meta Model, OIFMeta Model, OIF
ODMG 3.0 (2000)ODMG 3.0 (2000) enrichissement interface Javaenrichissement interface Java Accent sur intégration avec OMG et X3H2 ( SQL3)Accent sur intégration avec OMG et X3H2 ( SQL3)
ODMG Copyright Serge Miranda Part III
Composants du standard ODMG 3.0Composants du standard ODMG 3.0
SGBDOO
OQL OML C++ OML Smalltalk
Adaptation du modèle objet de l'OMGAdaptation du modèle objet de l'OMG Interfaces d'accès à un SGBD OOInterfaces d'accès à un SGBD OO
OML Java
ODL
OIF
ODMG Copyright Serge Miranda Part III
Composants du standard Composants du standard ODMG 3.0ODMG 3.0
Modèle de données Objet dérivé de Modèle de données Objet dérivé de l’OMGl’OMG
Langages de spécificationsLangages de spécifications ODL : langage de définition d’objetsODL : langage de définition d’objets OIF (OIF (object Interchange Formatobject Interchange Format) : ) :
import/exportimport/export Langage de requête : OQL (avec Langage de requête : OQL (avec
retour sur base SQL)retour sur base SQL) OML (avec Liaisons)OML (avec Liaisons)
C++, SMALLTALK et JAVAC++, SMALLTALK et JAVA
ODMG Copyright Serge Miranda Part III
Modèle ODMG : Modèle ODMG : modèle « OBJET-VALEUR modèle « OBJET-VALEUR
»»CLASSE d’OBJETSCLASSE d’OBJETS (OBJECT CLASS) (OBJECT CLASS) ? ?
- OID invariant (pour « objet ») et - OID invariant (pour « objet ») et CP pour classeCP pour classe- « - « VALUE » de l ensemble des objets VALUE » de l ensemble des objets ((extensionextension))- - ATTRIBUTESATTRIBUTES- METHODS- METHODS- liens - liens bidirectionnelsbidirectionnels binaires entre classes binaires entre classes (REF, INVERSE)(REF, INVERSE)
Note : pas de chemin inverse pas d’intégrité référentielleNote : pas de chemin inverse pas d’intégrité référentielleManipulation : Manipulation : NAVIGATION via des pointeursNAVIGATION via des pointeurs Héritage : d’état et de comportement Héritage : d’état et de comportement
ODMG Copyright Serge Miranda Part III
Modèle ODMG : Modèle ODMG : modèle OBJET-VALEURmodèle OBJET-VALEUR
Extension du modèle de l'OMGExtension du modèle de l'OMG– l'OMG a proposé un modèle standard pour les objetsl'OMG a proposé un modèle standard pour les objets– le modèle est supporté par le langage IDL (def. le modèle est supporté par le langage IDL (def.
interface)interface)– les BD objets nécessitent des adaptations/extensions les BD objets nécessitent des adaptations/extensions
TIPSTIPS» instances de classes, collections, associationsinstances de classes, collections, associations
» Persistance, transactionsPersistance, transactions
ODMG Copyright Serge Miranda Part III
ODMG et propriétés RICE ODMG et propriétés RICE
RR * * HERITAGE MULTIPLEHERITAGE MULTIPLE (C++) (C++)
II * * OIDOID
CC * STRUCTURE* STRUCTURE
* * COLLECTIONSCOLLECTIONS : :
SET, BAG, LIST, ARRAY, DictionarySET, BAG, LIST, ARRAY, Dictionary
* pointeurs bidirect. * pointeurs bidirect. REFREF et et INVERSEINVERSE
EE * « Types » avec méthodes* « Types » avec méthodes
ODMG Copyright Serge Miranda Part III
Type
Object Literal
Atomic Obj. Structured Obj.Collection Obj Atomic Lit.
LongShortUlongUshortFloatDoubleCharacterBooleanstringoctetenum<>
DateTimeTimestampInterval
Set <>Bag <>List <>Array <>Dictionary<>
Structured Lit.Collection Lit.
Structure<>DateTimeTimestampInterval
Set <>Bag <>List <>Array <>Dictionary<>
Hiérarchie de « Types »Hiérarchie de « Types »
<VALEUR>
ODMG Copyright Serge Miranda Part III
Meta MODELEMeta MODELE
• Principe de Base
• Description du modèle Objet
• Les Meta ObjetsModules, Operations, Exceptions,
Constants, Properties (relationship et Attributes), TypeDefinitions, Interfaces, Classes, Collections, Specifiers, Operands
ODMG Copyright Serge Miranda Part III
Instantiate
has
Property
support
2 define
extends
*
* *
1
1
Relationship
add_memberremove_member
ObjectOIDhas_name?namesclasscreatedeleteexistsame_has?
key_listextent_namesuper_class
Attributeattr_nameattr_typeset_valueget_value
Traversal path
path_nameto_cardinalityto_typetraversecreator_iterator
Operation
signatureinvokereturnreturn_abnormally
Class
*
+ Type, littéraux, interface, ....
1
Méta-modèle du modèle ODMGMéta-modèle du modèle ODMG
ODMG Copyright Serge Miranda Part III
OQL OQL (F.Bancilhon, Dasfaa 95)(F.Bancilhon, Dasfaa 95)
requêtes ad-hoc interactives type « SQL »requêtes ad-hoc interactives type « SQL » - simplification de programmation via des - simplification de programmation via des
requêtes imbriquéesrequêtes imbriquées- optimisation de requêtes- optimisation de requêtes- indépendance de données- indépendance de données- opérateurs d'enrichissement des données- opérateurs d'enrichissement des données- Support TIPS - Support TIPS
Navigation et .. "Surf" via des expressions de Navigation et .. "Surf" via des expressions de chemin et des suivis de pointeurs ( tout en chemin et des suivis de pointeurs ( tout en préservant les interrogations associatives)préservant les interrogations associatives)
ODMG Copyright Serge Miranda Part III
1. Expression de chemin mono-valuée dans SELECT/WHERE
- Séquence d'attributs ou associations (« relationship ») mono-valués de la forme X1.X2…Xn telle que chaque Xi à l'exception du dernier contienne une référence à un objet ou un litéral unique sur lequel le suivant s'applique.
- Utilisable en place d'un attribut SQL dans SELECT ou WHERE
2) Collection dépendante <Multivaluée> dans FROM
- Collection obtenue à partir d'un objet, soit parce qu'elle est imbriquée dans l'objet ou pointée par l'objet.
- Imbrication de COLLECTIONS dans FROM
OQL (nouveautés « SQL »)
ODMG Copyright Serge Miranda Part III
Forme des RequêtesForme des Requêtes Forme générale d'une requêteForme générale d'une requête
– Bloc « SELECT » étenduBloc « SELECT » étendu
» Select [<type résultat>] (<Select [<type résultat>] (<expressionexpression> [, <> [, <expressionexpression>] ...)>] ...)
» From x in <From x in <collectioncollection> [, y in <> [, y in <collectioncollection>]...>]...
» Where <formule avec Where <formule avec expressionsexpressions>> Type résultatType résultat
– automatiquement inféré par le SGBDautomatiquement inféré par le SGBD
– toute toute collectioncollection est possible (bag par défaut) est possible (bag par défaut)
– création possible d’ objets en résultatscréation possible d’ objets en résultats Syntaxe très libre, fort contrôle de typeSyntaxe très libre, fort contrôle de type
ODMG Copyright Serge Miranda Part III
Concepts de base par Concepts de base par l’exemplel’exemple
Définition du schéma Définition du schéma
- soit en ODL (Extension IDL), soit - soit en ODL (Extension IDL), soit OIF OIF
- soit en C++/Smalltalk/java- soit en C++/Smalltalk/java
LIENS :LIENS :
- REF : pointeur C++ persistant - REF : pointeur C++ persistant
- INVERSE : extension pour - INVERSE : extension pour intégrité référentielleintégrité référentielle
ODMG Copyright Serge Miranda Part III
Exemple ODLExemple ODL
Liaison C++Liaison C++
CLASS employe { CLASS employe {
E# INT,E# INT,
Nom STRING,Nom STRING,
Adresse ADDRESS <Adresse ADDRESS <autre classeautre classe>>
//méthodes...}//méthodes...}
ODMG Copyright Serge Miranda Part III
Exemple ODLExemple ODL
CLASS CLASS pilote : employepilote : employe { {Nbre-H-Vol# INT,Nbre-H-Vol# INT,salaire FLOAT,salaire FLOAT,SET REF <vol> assure INVERSE est-SET REF <vol> assure INVERSE est-assuré_parassuré_par //méthodes...}//méthodes...}
CLASS vol {CLASS vol {V# STRING,…V# STRING,…REF <pilote> est_assuré_par INVERSE REF <pilote> est_assuré_par INVERSE assure,assure,REF <avion> utilise INVERSE est_utilisé_dansREF <avion> utilise INVERSE est_utilisé_dans,.,.VD...}VD...}
ODMG Copyright Serge Miranda Part III
Exemple ODLExemple ODL
CLASS avion : {CLASS avion : {av# INT,av# INT,
avnom STRING,avnom STRING,
……
SET REF <vol> est_utilisé_dans SET REF <vol> est_utilisé_dans INVERSE utiliseINVERSE utilise
……}}
ODMG Copyright Serge Miranda Part III
Notes Notes
FAIRE TABLEAU DES LIENS FAIRE TABLEAU DES LIENS ENTRE CLASSES pour traiter les ENTRE CLASSES pour traiter les questionsquestions
Les liens entre classe (« jointures ») Les liens entre classe (« jointures ») se feront se feront EXCLUSIVEMENTEXCLUSIVEMENT par par suivi de pointeurs (bidirectionnels) suivi de pointeurs (bidirectionnels) définis définis EXPLICITEMENT EXPLICITEMENT dans le dans le schéma (par défaut dans clauses schéma (par défaut dans clauses FROM imbriquées)FROM imbriquées)
ODMG Copyright Serge Miranda Part III
Exemple OQLExemple OQLQuels sont les numéros des vols Quels sont les numéros des vols
assurés par un pilote de nom assurés par un pilote de nom 'Serge' ?'Serge' ?
ODMG Copyright Serge Miranda Part III
Exemple OQLExemple OQLQuels sont les numéros des vols assurés par Quels sont les numéros des vols assurés par
un pilote de nom 'Serge' ?un pilote de nom 'Serge' ?
1) 1) SELECT v.v#SELECT v.v#FROM FROM
v IN vol v IN vol <IN collection><IN collection>
p IN v.est_assure_parp IN v.est_assure_par
WHERE p.Nom = 'Serge' ;WHERE p.Nom = 'Serge' ;
ODMG Copyright Serge Miranda Part III
Exemple OQLExemple OQLQuels sont les numéros des vols Quels sont les numéros des vols
assurés par un pilote de nom assurés par un pilote de nom 'Serge' ?'Serge' ? 2 2 Select v.v# Select v.v#
from v IN volfrom v IN volwherewhere
v.est_assure_parv.est_assure_par.Nom.Nom=‘Serge’;=‘Serge’;
<<Expression monovaluéeExpression monovaluée X1.X2.X3X1.X2.X3>>
ODMG Copyright Serge Miranda Part III
Exemple OQLExemple OQL Quels sont les noms des avions Quels sont les noms des avions
conduits par un pilote Niçois ?conduits par un pilote Niçois ?<Parcours d’ associations multivaluées <Parcours d’ associations multivaluées
en utilisant des collections en utilisant des collections dépendantes>dépendantes>
ODMG Copyright Serge Miranda Part III
Exemple OQLExemple OQL Quels sont les noms des avions conduits Quels sont les noms des avions conduits
par un pilote Niçois ?par un pilote Niçois ?<Parcours d’ associations multivaluées en <Parcours d’ associations multivaluées en
utilisant des collections dépendantes>utilisant des collections dépendantes>1) 1) SELECT SELECT a.avnoma.avnomFROMFROM a in avion a in avion <in COLLECTION<in COLLECTION>>
v in a.est_utilisé_dans v in a.est_utilisé_dans <in COLLECTION><in COLLECTION>
p in v.est_assuré_parp in v.est_assuré_parWHEREWHERE p.adr = ‘ Nice ’ ;p.adr = ‘ Nice ’ ;
ODMG Copyright Serge Miranda Part III
Exemple OQLExemple OQL Quels sont les noms des avions Quels sont les noms des avions
conduits par un pilote Niçois ?conduits par un pilote Niçois ?<Parcours d’ associations multivaluées en <Parcours d’ associations multivaluées en
utilisant des collections dépendantes>utilisant des collections dépendantes>2)2)SELECT SELECT a.avnoma.avnomFROMFROM a in avion a in avion <in COLLECTION<in COLLECTION>>
v in a.est_utilisé_dans v in a.est_utilisé_dans <in COLLECTION><in COLLECTION>
WHEREWHERE v.est_assuré_par.adrv.est_assuré_par.adr= ‘Nice’= ‘Nice’ <Expression><Expression>
ODMG Copyright Serge Miranda Part III
ExercicesExercices
Q1 : Noms des pilotes Niçois qui Q1 : Noms des pilotes Niçois qui assurent un vol au départ de Nice assurent un vol au départ de Nice avec un avion localisé à Nice ?avec un avion localisé à Nice ?
Q2 :Noms des pilotes qui habitent Q2 :Noms des pilotes qui habitent dans la ville de localisation d’un dans la ville de localisation d’un Airbus ?Airbus ?
ODMG Copyright Serge Miranda Part III
RéponsesRéponses
Q1Q1
SELECT p.plnomSELECT p.plnom
From From p in PILOTEp in PILOTE
v in p.assurev in p.assure
a in v.utilisea in v.utilise
WhereWhere p.adr = ‘Nice’ and a.loc = ‘Nice’ and p.adr = ‘Nice’ and a.loc = ‘Nice’ and v.VD= ‘Nice’;v.VD= ‘Nice’;
(ou Where p.adr= ‘Nice’ and (ou Where p.adr= ‘Nice’ and v.utilise.locv.utilise.loc= ‘Nice ‘ = ‘Nice ‘ and v.VD = ‘Nice’ ;and v.VD = ‘Nice’ ;
ODMG Copyright Serge Miranda Part III
RéponsesRéponses
Q2Q2 Créer liens multivalués HABITE inverse EST-Créer liens multivalués HABITE inverse EST-
LOCALISE-DANS entre Pilote et AvionLOCALISE-DANS entre Pilote et Avion
SELECT SELECT p.plnomp.plnom
From From p in PILOTEp in PILOTE
a in p.HABITE <collection>a in p.HABITE <collection>
WhereWhere a.avnom = ‘Airbus’ ;a.avnom = ‘Airbus’ ;
ODMG Copyright Serge Miranda Part III
OQLOQL Expression de chemin monovaluéeExpression de chemin monovaluée à la place à la place
d’un attribut SQL de la forme X1.X2.X3 : chaque d’un attribut SQL de la forme X1.X2.X3 : chaque Xi contient une référence à un objet uniqueXi contient une référence à un objet unique
SELECT imbriqués possibles, SELECT imbriqués possibles, méthodes dans where ou selectméthodes dans where ou select
Quantificateur dans FROMQuantificateur dans FROM universel (for all x in collection: prédicat) universel (for all x in collection: prédicat)
Exemple : Exemple : « for all a in Avions: « for all a in Avions: a.cap<350 »a.cap<350 »existentiel (exists x in collection..)existentiel (exists x in collection..)
GROUP BY possibleGROUP BY possible
ODMG Copyright Serge Miranda Part III
Exemple quantificateur Exemple quantificateur universeluniversel
Quels sont les noms des pilotes Quels sont les noms des pilotes qui conduisent TOUS les Airbus qui conduisent TOUS les Airbus localisés à Nice ?localisés à Nice ?
ODMG Copyright Serge Miranda Part III
Exemple quantificateur Exemple quantificateur universeluniversel
Quels sont les noms des pilotes qui Quels sont les noms des pilotes qui conduisent TOUS les Airbus localisés conduisent TOUS les Airbus localisés à Nice ?à Nice ?
Select p.plnomSelect p.plnomFrom p in piloteFrom p in pilote
V in p.assureV in p.assureFor all a in V.utilise : a.avnom = For all a in V.utilise : a.avnom =
‘airbus ‘airbus ’ ’ and and a.loc = ‘Nice’;a.loc = ‘Nice’;
ODMG Copyright Serge Miranda Part III
Exemple GROUP BYExemple GROUP BY
Partitionner les instances de la classe Partitionner les instances de la classe VOL en 2 groupes : les vols avant VOL en 2 groupes : les vols avant 9H (nom partition : TOT) et les vols 9H (nom partition : TOT) et les vols après 18H (nom : TARD )après 18H (nom : TARD )
Select v Select v
from v in VOL from v in VOL
group by (tot : v.HD<9, tard : group by (tot : v.HD<9, tard : v.HD>18) v.HD>18)
ODMG Copyright Serge Miranda Part III
OQLOQL
Join exprimé Join exprimé EXCLUSIVEMENT EXCLUSIVEMENT par une par une expression de chemin sur expression de chemin sur lien.PTR lien.PTR prédéfini de manière symétriqueprédéfini de manière symétrique
( notation '.')( notation '.') : : "le programmeur redevient "le programmeur redevient un navigateur (un Surfeur ?)« un navigateur (un Surfeur ?)«
Langage de requête très Langage de requête très COMPLET/COMPLEXE ‘double COMPLET/COMPLEXE ‘double paradigme) paradigme) difficile à implanterdifficile à implanter
notenote : amélioration cosmétique SQLà : amélioration cosmétique SQLà partir de la version ODMG 2.0partir de la version ODMG 2.0
"from c IN class1" remplacé par "from c IN class1" remplacé par "from class1 c""from class1 c"
ODMG Copyright Serge Miranda Part III
OIFOIF
Langage de spécifications pourLangage de spécifications pour ImporterImporter ExporterExporter
Echanger des objets entre 2 Echanger des objets entre 2
basesbases Fournir une documentationFournir une documentation Piloter les « tests suites »Piloter les « tests suites »
ODMG Copyright Serge Miranda Part III
OIFOIF
OIF doit supporter tous les états OIF doit supporter tous les états des objets d ’une BD ODMGdes objets d ’une BD ODMG
OIF est un langage de OIF est un langage de spécificationspécification
OIF respecte au mieux les OIF respecte au mieux les standards ANSI et STEPstandards ANSI et STEP
Mot clé OIF : Mot clé OIF : typetype, , attributattribut, et , et identifiant identifiant d’une relation d’une relation
ODMG Copyright Serge Miranda Part III
OIF ExempleOIF Exemple
Prenons par exemple la définition ODL :Interface Person {
attribute string Name;relationship Employer
inverse Company : : Employees ;relationship Property
inverse Company : :Owner ;} ;Interface Company {
relationship set<Person> Employeesinverse Person : : Employer ;
relationship Person Ownerinverse Person : :Property ;
} ;
Dans le fichier OIF les objets seront créés ainsi :Personne1 Person{Name «Julio»}Personne2 Person{«Pedro»}Entreprise1 Company {Employees {Personne1,Personne2}}
ODMG Copyright Serge Miranda Part III
OIF (Commandes)OIF (Commandes)
Pour exporter les objets d ’une base : Pour exporter les objets d ’une base :
odbdump <database name>odbdump <database name>
Pour IMporter des objets depuis un ou Pour IMporter des objets depuis un ou plusieurs fichiers OIF : plusieurs fichiers OIF :
odbload <database name> <file odbload <database name> <file 1>…<file n>1>…<file n>
ODMG Copyright Serge Miranda Part III
INTEGRATION à C++, Java, Smal.INTEGRATION à C++, Java, Smal. Implémentation du modèle abstraitImplémentation du modèle abstrait
– mapping des concepts mapping des concepts – mapping des typesmapping des types– mapping des collectionsmapping des collections
Nécessité d'adapter le modèleNécessité d'adapter le modèle– certains concepts n’existent pas dans le langagecertains concepts n’existent pas dans le langage
interfaceinterface en C++ ==> en C++ ==> classeclasse
association association en C++ et Java ==> attributs roles de type en C++ et Java ==> attributs roles de type Ref Ref <T> <T>
clés ==> pas de clés !clés ==> pas de clés !
Nécessité d’intégrer OQLNécessité d’intégrer OQL
ODMG Copyright Serge Miranda Part III
Java BindingJava Binding(OML Java)(OML Java)
Système de Types de Données Système de Types de Données UniquesUniques
Syntaxe de Java à respecterSyntaxe de Java à respecter
Gestion automatique de Stockage Gestion automatique de Stockage ((Persistence By ReachabilityPersistence By Reachability))
ODMG Copyright Serge Miranda Part III
JAVA ODL JAVA ODL
Types Simples d’ODL -> types simples Types Simples d’ODL -> types simples JavaJava
Types Complexes (Collections) ->Types Complexes (Collections) ->
Interfaces des Collections Interfaces des Collections
(Dset, Dbag, etc. de Java 1.2)(Dset, Dbag, etc. de Java 1.2)
Pas de Gestion Automatique des Pas de Gestion Automatique des LIENS BIDIRECTIONNELSLIENS BIDIRECTIONNELS
ODMG Copyright Serge Miranda Part III
JAVA OML/OQLJAVA OML/OQL
JAVA OMLJAVA OML
Déclaration Opérations en JavaDéclaration Opérations en Java Des Classes Pour Des Classes Pour
Database, Transaction, CollectionsDatabase, Transaction, Collections
Java OQLJava OQL Méthode query() de DCollectionMéthode query() de DCollection Classe OQLQueryClasse OQLQuery
ODMG Copyright Serge Miranda Part III
JAVA OML/OQLJAVA OML/OQL
Persistance par atteignabilité (Persistance par atteignabilité (reachabilityreachability))
– classes connues du SGBDOOclasses connues du SGBDOO– objets capables de persisterobjets capables de persister– nommage par objets «database»nommage par objets «database»
-opérations bind, unbind, lookup-opérations bind, unbind, lookup
-tout objet nommé est racine de persistance-tout objet nommé est racine de persistance
– tout objet référencé par un objet persistant est tout objet référencé par un objet persistant est persistantpersistant
Mapping des typesMapping des types Package collections ODMG :Package collections ODMG :set, bag, list, varray : set, bag, list, varray :
collectioncollection
ODMG Copyright Serge Miranda Part III
Gestion de transactionsGestion de transactions Objet Transaction créé par FactoryObjet Transaction créé par Factory
– begin() pour ouvrir une transaction ;begin() pour ouvrir une transaction ;– commit() pour valider les mises à jour de la transaction ;commit() pour valider les mises à jour de la transaction ;– abort() pour défaire les mises à jour de la transaction ; abort() pour défaire les mises à jour de la transaction ; – checkpoint() = commit() + begin(), sans relâcher verrous checkpoint() = commit() + begin(), sans relâcher verrous – join() pour récupérer l'objet transaction dans la thread ;join() pour récupérer l'objet transaction dans la thread ;– leave() pour dissocier un objet transaction de la thread ;leave() pour dissocier un objet transaction de la thread ;– Possibilités d'imbriquer des transactionsPossibilités d'imbriquer des transactions– Contrôle de concurrence niveau objet (explicite ou Contrôle de concurrence niveau objet (explicite ou
défaut) ;défaut) ; Ouverture et fermeture des basesOuverture et fermeture des bases
ODMG Copyright Serge Miranda Part III
VerrouillageVerrouillage Verrouillage Verrouillage ImpliciteImplicite ( (pendant traversée pendant traversée
graphe objets)graphe objets) ou ou ExpliciteExplicite ( (LOCK ou LOCK ou TRY_LOCK dans Interface Objet) TRY_LOCK dans Interface Objet) avec avec isolation niveau 3 de SQL2isolation niveau 3 de SQL2 (qui évite (qui évite lectures lectures salessales, , fantômesfantômes et lectures et lectures non non reproductiblesreproductibles) et ) et transactions ACIDtransactions ACID Interface Interface TransactionFactoryTransactionFactory
Transaction..Transaction..Transaction..…Transaction..…
LOCKLOCK ReadRead WriteWrite Upgrade (Upgrade (avant Read ou Write pour éviter livelock)avant Read ou Write pour éviter livelock)
ODMG Copyright Serge Miranda Part III
ExemplesExemples
2D2D ThésaurusThésaurus
Avec SGBD POETAvec SGBD POET
ODMG Copyright Serge Miranda Part III
Exemple 2DExemple 2D//classe qui représente un pointimport COM.POET.odmg.*;import COM.POET.odmg.collection.*;
class Point2D{ int x; int y; Point2D(){ } Point2D(int pi_x, int pi_y){
x = pi_x;y = pi_y;
} void move(int pi_x, int pi_y){
x = pi_x;y = pi_y;
} void moveRelative(int pi_x, int pi_y){
x += pi_x;y += pi_y;
}}
ODMG Copyright Serge Miranda Part III
Exemple 2DExemple 2D// Classe qui représente un polygone 2D// Classe qui représente un polygone 2Dimport COM.POET.odmg.*;import COM.POET.odmg.*;import COM.POET.odmg.collection.*;import COM.POET.odmg.collection.*;class Polygone2D {class Polygone2D { SetOfObject pointsSetOfObject points; //les points du polygone; //les points du polygone public Polygone2D() { //Constructeurpublic Polygone2D() { //Constructeur
points = new SetOfObject();points = new SetOfObject(); }} public void ajoutePoint(Point2D pr_point){ //rajouter un Point2Dpublic void ajoutePoint(Point2D pr_point){ //rajouter un Point2D
points.add(pr_point);points.add(pr_point); }} public int public int nombreDeCotenombreDeCote() throws () throws PolygoneExceptionPolygoneException { {
if (points.size() > 2)if (points.size() > 2) return points.size();return points.size();else else throw new PolygoneException("Ce n'est pas un polygone");throw new PolygoneException("Ce n'est pas un polygone");
}}}}
ODMG Copyright Serge Miranda Part III
Exemple 2D (OQL)Exemple 2D (OQL) //combien d'hexagone existent-ils dans notre base//combien d'hexagone existent-ils dans notre baseSELECT COUNT(*)SELECT COUNT(*)FROM FROM Polygone2DExtentPolygone2DExtent h hWHERE h.nombreDeCote = 6WHERE h.nombreDeCote = 6
//tous les points qui forment des octagones//tous les points qui forment des octagonesSELECT pSELECT pFROM FROM
pol IN Polygone2DExtent,pol IN Polygone2DExtent,p IN p IN pol.pointspol.points
WHERE pol.WHERE pol.nombreDeCotenombreDeCote = 8 = 8
//tous les point qui sont dans des cercles d'un rayon superieure à 10//tous les point qui sont dans des cercles d'un rayon superieure à 10SELECT pSELECT pFROM (SELECT c FROM Cercle2DExtent c WHERE c.rayon > 10) FROM (SELECT c FROM Cercle2DExtent c WHERE c.rayon > 10) AS xAS x,, Point2DExtent pPoint2DExtent pWHEREWHERE
x.x.contientcontient(p)(p)
ODMG Copyright Serge Miranda Part III
Exemple Thésaurus Exemple Thésaurus CompletComplet
ODLODLINTERFACEINTERFACE document document( ( extentextent documents documentskey key doc#) : doc#) : persistentpersistent{attribute integer doc#,{attribute integer doc#, attribute string titre ;attribute string titre ; attribute string editeur ;attribute string editeur ; attribute date date-publi ;attribute date date-publi ;attribute integer nb_pages ;attribute integer nb_pages ;}}
ODMG Copyright Serge Miranda Part III
Exemple ThésaurusExemple Thésaurus
relationshiprelationship LIST<auteur> LIST<auteur>
est_ecrit_par INVERSE a_ecrit;est_ecrit_par INVERSE a_ecrit;
relationshiprelationship SET <mot_cle> contient SET <mot_cle> contient INVERSE est_dans ;INVERSE est_dans ;
ODMG Copyright Serge Miranda Part III
Exemple ThésaurusExemple Thésaurus
INTERFACE mot_cle (extent mots-cleINTERFACE mot_cle (extent mots-cle key ident ) : persistentkey ident ) : persistent{attribute string ident ;{attribute string ident ;}}relationship SET<document>est_dans relationship SET<document>est_dans
INVERSE contientINVERSE contientrelationship SET <mot_cle> relationship SET <mot_cle> est_pere_de INVERSE est_fils_deest_pere_de INVERSE est_fils_derelationship SET<mot_cle> est_synonyme relationship SET<mot_cle> est_synonyme
ODMG Copyright Serge Miranda Part III
Exemple ThésaurusExemple Thésaurus
INVERSE est_synonymeINVERSE est_synonyme... est_voisin_de...... est_voisin_de...
INTERFACE auteur: personne (extent INTERFACE auteur: personne (extent auteurs)auteurs)
relationship LIST<document> a_ecritrelationship LIST<document> a_ecritINVERSE est_ecrit_parINVERSE est_ecrit_par
INTERFACE personne …. INTERFACE personne ….
ODMG Copyright Serge Miranda Part III
Exemple ThésaurusExemple Thésaurus
Liaison C++ Liaison C++ CLASSCLASS document document{ integer doc#,{ integer doc#, string titre;string titre; string editeur ;string editeur ; date date_de_publi;date date_de_publi; integer nb_pages;integer nb_pages;}}
ODMG Copyright Serge Miranda Part III
Exemple ThésaurusExemple Thésaurus
list list Ref Ref <auteur> a_ete_ecrit_par <auteur> a_ete_ecrit_par inverse a_ecrit ;inverse a_ecrit ; set set Ref Ref <mot_cle>contient<mot_cle>contientinverse est_dans;inverse est_dans; CLASS auteur : personne CLASS auteur : personne List Ref<document>a_ecritList Ref<document>a_ecritinverse a-ete_ecrit_par ;inverse a-ete_ecrit_par ;
ODMG Copyright Serge Miranda Part III
Exemple ThésaurusExemple Thésaurus
<thesaurus ; liaison C++ ><thesaurus ; liaison C++ >
CLASS mot_cleCLASS mot_cle
{ string ident };{ string ident };
Set Ref <document> est_dansSet Ref <document> est_dans
inverse contient;inverse contient;
ODMG Copyright Serge Miranda Part III
Exemple ThésaurusExemple ThésaurusList REF<mot_cle>est_synonyme_deList REF<mot_cle>est_synonyme_deinverse est_synonyme_de;inverse est_synonyme_de;Set REF< mot_cle>est_pere_de Set REF< mot_cle>est_pere_de inverse est_fils_de;inverse est_fils_de;Set REF<mot_cle>est_fils_deSet REF<mot_cle>est_fils_deinverse est_pere_de;inverse est_pere_de;Set REF<mot_cle>est_voisin_de Set REF<mot_cle>est_voisin_de inverse est_voisin_de;inverse est_voisin_de;Set REF<document>documents; Set REF<document>documents; Set REF<mot_cle>mots_cle; Set REF<mot_cle>mots_cle; Set REF<auteur>auteurs;Set REF<auteur>auteurs;
ODMG Copyright Serge Miranda Part III
Ex Thésaurus (OQL)Ex Thésaurus (OQL)
Documents concernant le "software"?Documents concernant le "software"?Select dSelect dFrom From
m in mots_clem in mots_cled in m.est_dansd in m.est_dans
Where m.ident = 'software' ;Where m.ident = 'software' ;OuOu
Select D fromSelect D fromD in documentsD in documentsM in D. contientM in D. contient
Where M.ident = « software Where M.ident = « software »; »;
ODMG Copyright Serge Miranda Part III
Exemple Thésaurus Exemple Thésaurus (OQL)(OQL)
Documents concernant le "software" dont Documents concernant le "software" dont le titre commence par "concepts" ?le titre commence par "concepts" ?Select dSelect dFrom From
m in mots_cle m in mots_cle ?… ?…
ODMG Copyright Serge Miranda Part III
Exemple Thésaurus Exemple Thésaurus (OQL)(OQL)
Documents concernant le "software" dont le titre Documents concernant le "software" dont le titre commence par "concepts" ?commence par "concepts" ?Select dSelect dFrom From
m in mots_clem in mots_clec in m.est_voisin_de c in m.est_voisin_de s in m.est_synonyme_des in m.est_synonyme_def in m.est_fils_def in m.est_fils_ded in set (m.est_dans, c.est_dans, d in set (m.est_dans, c.est_dans,
s.est_dans, f.est_dans) s.est_dans, f.est_dans) Where m.ident = 'software" and d.titre = Where m.ident = 'software" and d.titre =
Concepts%; Concepts%;
ODMG Copyright Serge Miranda Part III
Exemple Thésaurus Exemple Thésaurus (SGBD Poet)(SGBD Poet)
import COM.POET.odmg.*;import COM.POET.odmg.collection.*;
class Document { int num_doc; String titre; String editeur; java.util.Date date_de_publication; int nb_pages; ListOfObject est_ecrit_par; // liste des auteurs SetOfObject contient; // ensemble des mots clés
public Document(int num_doc, String titre, String editeur, java.util.Date date_de_publication, int nb_pages){
this.num_doc = num_doc; this.titre = titre; this.editeur = editeur; this.date_de_publication = date_de_publication; this.nb_pages = nb_pages;
}
public void ajouteAuteur(Auteur auteur){est_ecrit_par.add(auteur);
}
public void ajouteMotCle(MotCle motCle){contient.add(motCle);
}}
ODMG Copyright Serge Miranda Part III
Exemple Thésaurus Exemple Thésaurus (SGBD Poet)(SGBD Poet)
import COM.POET.odmg.*;import COM.POET.odmg.collection.*;
class MotCle{ String ident; SetOfObject est_dans; // liste des documents qui contiennt ce mot clé ListOfObject est_synonyme_de; // liste des synonymes de ce mot clé SetOfObject est_pere_de; // ensemble des mots clé père SetOfObject est_fils_de; // ensemble des mots clé fils SetOfObject est_voisin_de; // ensemble des mots clé voisin
public MotCle(String ident){this.ident = ident;
} public void ajouteSynonyme(MotCle synonyme){
est_synonyme_de.add(synonyme); } public void ajouteVoisin(MotCle voisin){
est_voisin_de.add(voisin); } public void ajoutePere(MotCle pere){
est_pere_de.add(pere); } public void ajouteFils(MotCle fils){
est_fils_de.add(fils); } public void ajouteDocument(Document document){
est_dans.add(document); }}
ODMG Copyright Serge Miranda Part III
Exemple Thésaurus avec Exemple Thésaurus avec Poet (OQL)Poet (OQL)
// tous les documents concernant le software et// dont l'auteur est Serge Miranda
SELECT dFROM
m IN MotCleExtent,c IN m.est_voisin_de,s IN m.est_synonyme_de,f IN m.est_fils_de,d IN SET(m.est_dans, c.est_dans, s.est_dans, f.est_dans),aut IN d.est_ecrit_par
WHERE m.ident = 'software' AND aut.nom = 'Miranda' AND aut.prenom='Serge'