0% ont trouvé ce document utile (0 vote)
50 vues63 pages

Programmation SQLM4

Transféré par

Alicia Rakotomamonjy
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
50 vues63 pages

Programmation SQLM4

Transféré par

Alicia Rakotomamonjy
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 63

Introduction à l’ODMG et OQL

Professeur Serge Miranda

Département Informatique
Université Côte d’Azur (Master MBDS)
Et Estia (Master BIHAR)
Consortium ODMG

➢Créé en 1991 par Rick Cattell (SUN, Javasoft) comme sous groupe de
l’OMG (Object Management Group) avec les éditeurs suivants :
02 Tech., Objectivity, Object Design, Ontos, Versant

➢OMG : CORBA,…

➢plus de 50 organisations de l’industrie et de l’informatique en 2000


(Lucent, Lockheed, CA, Microsoft, Baan, ...)

➢Objectifs :
➢Promouvoir les OO DBMS, FUD, au delà des niches et standard avant …SQL3 !
➢Créer un standard pour garantir l’indépendance entre OODBMS (Portability)
2
Historique du standard « OO »
Objectif « portabilité Code »

➢Première réunion à l’initiative de Rick Catell chez Sun en Sept 91


➢ODMG 1.0 (1993) : 5 Editeurs
➢ODL, OQL, Interface C++, Smalltalk
➢ODMG 2.0 (1996) : 10 Editeurs
(Poet, Lucent, Windward, American Man, Barry)
➢Interface Java (Java Binding), Meta Model, OIF
➢ODMG 3.0 (2000)
➢enrichissement interface Java
➢accent sur intégration avec OMG et X3H2 (SQL3)

REFERENCE : http://www.odbms.org/odmg-standard/reading-room/odmg-2-0-a-
standard-for-object-storage/
3
Composants du standard ODMG 3.0

Adaptation du modèle objet de l'OMG


Interfaces d'accès à un SGBD OO

OQL OML C++ OML Java OML Smalltalk

ODL

OIF
SGBDOO

4
Composants du standard ODMG 3.0

➢Modèle de données Objet dérivé de l’OMG


➢Langages de spécifications
➢ ODL : langage de définition d’objets
➢ OIF (object Interchange Format) : import/export
➢Langage de requête : OQL (avec évolution vers SQL)
➢ OML (avec Liaisons)
➢ C++, SMALLTALK et JAVA

5
Modèle ODMG : modèle « OBJET-VALEUR »

➢CLASSE d’OBJETS (OBJECT CLASS) ?


➢OID invariant (pour « objet ») et CP (Clé Primaire) pour classe
➢« VALUE » de l’ensemble des objets (extension)
➢ATTRIBUTES
➢METHODS
➢pointeurs bidirectionnels binaires entre classes
(REF, INVERSE)
➢Manipulation : NAVIGATION via des pointeurs
➢Héritage : d’état et de comportement

6
Modèle ODMG : modèle « OBJET-VALEUR »

Extension du modèle de l'OMG


➢l'OMG a proposé un modèle standard pour les objets
➢le modèle est supporté par le langage IDL (def. interface)
➢les BD objets nécessitent des adaptations/extensions TIPS
➢instances de classes, collections, associations
➢persistance, transactions

7
ODMG et propriétés RICE

R * HERITAGE MULTIPLE (C++)


I * OID
C * STRUCTURE
* COLLECTIONS :
SET, BAG, LIST, ARRAY, Dictionary
* pointeurs bidirect. REF et INVERSE
E * « Types » avec méthodes

8
Hiérarchie de « Types »

Type

Object Literal

Atomic Obj. Collection Obj. Structured Obj. Atomic Lit. Collection Lit. Structured Lit.

Long Structure
Date Short Set <> <>
Set <> Time Ulong Bag <> DateTime
Bag <> Timestamp Ushot List <> Timestamp
List <> Interval Float Array<> Interval
Array<> Double Dictionary
Dictionary Character <>
<> Boolean
string
octet
enum <>
9
« Meta MODELE » de l’ODMG

➢Principe de Base
➢Description du modèle Objet
➢Les Meta Objets
➢Modules, Operations, Exceptions, Constants,
➢Properties (relationship et Attributes),
➢TypeDefinitions, Interfaces, Classes, Collections,
➢Specifiers, Operands

10
Méta-modèle du modèle ODMG

support
Instantiate 1
Class *
* extends Operation
key-list 1
extent_nam
* e signature
super_class
Object invoke
has return
OID * return_abnormal
has_name? ly
names Property
class
create
delete
exist Attribute Traversal path
same_as?
attr_name path_name
attr_type to_cardinality
to_type
set-value traverse
Relationship
get_value creator_iterator

2 define add_member
+ Type, littéraux, interface ... remove_member

11
OQL (F.Bancilhon, Dasfaa 95)

➢requêtes ad-hoc interactives type « SQL »


➢simplification de programmation via des requêtes imbriquées
➢optimisation de requêtes
➢indépendance de données
➢opérateurs d'enrichissement des données
➢Support TIPS
➢Navigation et...
« Surf » via des expressions de chemin et de suivi de pointeurs
(tout en préservant les interrogations associatives)

12
OQL (nouveautés « SQL »)

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
13
Format des Requêtes

➢Forme générale d'une requête


➢Bloc « SELECT » étendu :
Select [<type résultat>] (<expression> [, <expression>] ...)
From x in <collection> [, y in <collection>]...
Where <formule avec expressions>
➢Type résultat
➢ automatiquement inféré par le SGBD
➢ toute collection est possible (bag par défaut)
➢ création possible d’objets en résultats
Syntaxe très libre, fort contrôle de type
14
Concepts de base par l’exemple

➢Définition du schéma Objet :


➢soit en ODL (Extension IDL), soit OIF
➢soit en C++/Smalltalk/java

➢avec les LIENS bidirectionnels :


➢REF : pointeur C++ persistant
➢INVERSE : extension pour intégrité référentielle

15
Exemple ODL

Liaison C++
CLASS employe {
E# INT,
Nom STRING,
Adresse ADDRESS <autre classe>
//méthodes...}

16
Exemple ODL

CLASS pilote : employe {


Nbre-H-Vol# INT,
salaire FLOAT,
SET REF <vol> assure INVERSE est-assuré_par
//méthodes...}
CLASS vol {
V# STRING,…
REF <pilote> est_assuré_par INVERSE assure,
REF <avion> utilise INVERSE est_utilisé_dans,.
VD...}
17
Exemple ODL

CLASS avion : {
av# INT,
avnom STRING,

SET REF <vol> est_utilisé_dans INVERSE utilise
…}

18
Notes :

➢FAIRE TABLEAU DES LIENS ENTRE CLASSES


pour traiter les questions

➢Les liens entre classes (« jointures ») se feront


EXCLUSIVEMENT par suivi de pointeurs (bidirectionnels) définis
EXPLICITEMENT dans le schéma
(par défaut dans clauses FROM imbriquées)

19
Schéma avec POINTEURS entre Classes

VOL
Est-Assuré-par Utilise

Assure* EST-UTILISE-DS*

PILOTE AVION
20
Exemple OQL

➢ Quels sont les numéros des vols assurés par un pilote de nom
'Serge' ?

21
Exemple OQL

➢ Quels sont les numéros des vols assurés par un pilote de


nom 'Serge’ ?

1. SELECT v.v#
FROM
v IN vol <IN collection>
p IN v.est_assure_par

WHERE p.Nom = 'Serge' ;

22
Exemple OQL

➢ Quels sont les numéros des vols assurés par un pilote de nom
'Serge’ ?

2. Select v.v#
from v IN vol
where v.est_assure_par.Nom=‘Serge’;

<Expression monovaluée X1.X2.X3>

23
Exercice : Exemple OQL

➢Quels sont les noms des avions conduits par un pilote Niçois ?

<Parcours d’associations multivaluées en utilisant des


collections dépendantes>

24
Exemple OQL

➢Quels sont les noms des avions conduits par un pilote Niçois ?

SELECT a.avnom
FROM a in avion <in COLLECTION>
v in a.est_utilisé_dans <in COLLECTION>
p in v.est_assuré_par
WHERE p.adr = ‘ Nice ’ ;

25
Exemple OQL

➢Quels sont les noms des avions conduits par un pilote Niçois ?

SELECT a.avnom
FROM a in avion <in COLLECTION>
v in a.est_utilisé_dans <in COLLECTION>
WHERE v.est_assuré_par.adr= ‘Nice’
<Expression>

26
Exercices

➢Q1 : Noms des pilotes Niçois qui assurent un vol au départ de


Nice avec un avion localisé à Nice ?

➢Q2 : Noms des pilotes qui habitent dans la ville de localisation


d’un Airbus ?

27
Réponses

➢Q1
SELECT p.plnom
From p in PILOTE
v in p.assure
a in v.utilise
Where p.adr = ‘Nice’ and a.loc = ‘Nice’ and v.VD= ‘Nice’;
ou
Where p.adr= ‘Nice’ and v.utilise.loc= ‘Nice ‘ and v.VD = ‘Nice’;

28
Réponses

➢Q2
1. Créer liens multivalués HABITE inverse EST-LOCALISE-DANS
entre Pilote et Avion
2. SELECT p.plnom
From p in PILOTE
a in p.HABITE <collection>
Where a.avnom = ‘Airbus’ ;

29
OQL

➢Expression de chemin monovaluée à la place d’un attribut SQL de la


forme X1.X2.X3 : chaque Xi contient une référence à un objet unique
➢SELECT imbriqués possibles
➢méthodes dans where ou select

➢Quantificateur dans FROM


➢universel (for all x in collection: prédicat)
➢Exemple : « for all a in Avions: a.cap<350 »
➢existentiel (exists x in collection..)
➢GROUP BY possible

30
Exemple quantificateur universel

➢Quels sont les noms des pilotes qui conduisent TOUS les
Airbus localisés à Nice ?

31
Exemple quantificateur universel

➢Quels sont les noms des pilotes qui conduisent TOUS les
Airbus localisés à Nice ?
Select p.plnom
From p in pilote
V in p.assure
For all a in V.utilise : a.avnom = ‘airbus ’ and a.loc = ‘Nice’;

32
Exemple GROUP BY

➢Partitionner les instances de la classe VOL en 2 groupes :


les vols avant 9H (nom partition : TOT) et
les vols après 18H (nom : TARD ).

Select v
from v in VOL
group by (tot : v.HD<9, tard : v.HD>18)

33
OQL

➢Join exprimé EXCLUSIVEMENT par une expression de chemin sur


lien/PTR prédéfini de manière symétrique
(notation '.') : le programmeur redevient un navigateur
(un Surfeur ?)

➢Langage de requête très COMPLET/COMPLEXE (double paradigme)


difficile à implanter

➢note : amélioration cosmétique SQL à partir de la version ODMG 2.0

➢"from c IN class1" remplacé par


➢"from class1 c"
34
Exemple Thésaurus Complet

En ODL
INTERFACE document
(extent documents key doc#) : persistent
{attribute integer doc#,
attribute string titre ;
attribute string editeur ;
attribute date date-publi ;
attribute integer nb_pages ;
}

35
Exemple Thésaurus

➢relationship LIST<auteur>
est_ecrit_par INVERSE a_ecrit ;

➢relationship SET <mot_cle>


contient INVERSE est_dans ;

36
Exemple Thésaurus

➢INTERFACE THESAURUS
➢Relationship PEREde <thesaurus> inverse FILSde
➢Relationship VOISIN…
➢Relationship SYNONYMIE…

➢INTERFACE auteur : personne (extent auteurs)


➢relationship LIST<document> a_ecrit INVERSE est_ecrit_par

➢INTERFACE personne…

37
Exemple Thésaurus

Avec Liaison C++


CLASS document
{ integer doc#,
string titre;
string editeur ;
date date_de_publi;
integer nb_pages;
}

38
Exemple Thésaurus

list Ref <auteur> a_ete_ecrit_par inverse a_ecrit ;


set Ref <mot_cle>contient inverse est_dans ;

CLASS auteur : personne


List Ref<document>a_ecrit inverse a-ete_ecrit_par ;

39
Exemple Thésaurus

<thesaurus ; liaison C++ >

CLASS personne,…

CLASS mot_cle
{ string ident } ;
Set Ref <document> est_dans inverse contient ;

40
Exemple Thésaurus

List REF<mot_cle>est_synonyme_de
inverse est_synonyme_de;
Set REF< mot_cle>est_pere_de
inverse est_fils_de;
Set REF<mot_cle>est_fils_de
inverse est_pere_de;
Set REF<mot_cle>est_voisin_de
inverse est_voisin_de;

41
Exemple Thésaurus (OQL)

Documents indexés par « software » ?

Select D
from
D in documents
M in D. contient
Where M.ident = « software »;

42
Exemple Thésaurus (OQL)

➢Documents concernant le « software » dont le titre commence par


« concepts » ?

Select d
From
m in mots_cle
?…

43
Exemple Thésaurus (OQL)

➢Documents concernant le « software » dont le titre commence par


« concepts » ?
Select d
From
m in mots_cle
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)
Where m.ident = 'software" and d.titre = Concepts%;

44
Illustration du Thésaurus (avec le SGBD Poet)

import COM.POET.odmg.*; public Document(int num_doc, String titre, String editeur,


import COM.POET.odmg.collection.*; java.util.Date date_de_publication, int
nb_pages){
class Document { this.num_doc = num_doc;
int num_doc; this.titre = titre;
String titre; this.editeur = editeur;
String editeur; this.date_de_publication = date_de_publication;
java.util.Date date_de_publication; this.nb_pages = nb_pages;
int nb_pages; }
ListOfObject est_ecrit_par; // liste des auteurs
SetOfObject contient; // ensemble des mots clés public void ajouteAuteur(Auteur auteur){
est_ecrit_par.add(auteur);
}

public void ajouteMotCle(MotCle motCle){


contient.add(motCle);
}
}
45
Exemple Thésaurus (SGBD Poet)

import COM.POET.odmg.*; public MotCle(String ident){


import COM.POET.odmg.collection.*; this.ident = ident;
}
public void ajouteSynonyme(MotCle synonyme){
class MotCle{
est_synonyme_de.add(synonyme);
String ident; }
SetOfObject est_dans; // liste des documents qui public void ajouteVoisin(MotCle voisin){
contiennt ce mot clé est_voisin_de.add(voisin);
ListOfObject est_synonyme_de; // liste des synonymes de ce }
mot clé public void ajoutePere(MotCle pere){
est_pere_de.add(pere);
SetOfObject est_pere_de; // ensemble des mots clé
}
père
public void ajouteFils(MotCle fils){
SetOfObject est_fils_de; // ensemble des mots clé fils est_fils_de.add(fils);
SetOfObject est_voisin_de; // ensemble des mots clé }
voisin public void ajouteDocument(Document document){
est_dans.add(document);
}
}

46
Exemple Thésaurus avec Poet (OQL)

➢// tous les documents concernant le software et


➢// dont l'auteur est Serge Miranda

SELECT d
FROM
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';
47
Extra slides
OIF

➢Langage de spécifications pour


➢Importer
➢Exporter

➢Echanger des objets entre 2 bases


➢Fournir une documentation
➢Piloter les « tests suites »

49
OIF

➢OIF doit supporter tous les états des objets d’une BD ODMG
➢OIF est un langage de spécification
➢OIF respecte au mieux les standards ANSI et STEP
➢Mot clé OIF : type, attribut, et identifiant d’une relation

50
OIF Exemple

Prenons par exemple la définition ODL : Dans le fichier OIF les objets seront créés ainsi :
Interface Person { Personne1 Person{Name «Julio»}
attribute string Name; Personne2 Person{«Pedro»}
relationship Employer Entreprise1 Company {Employees
{Personne1,Personne2}}
inverse Company : : Employees ;
relationship Property
inverse Company : :Owner ;
};
Interface Company {
relationship set<Person> Employees
inverse Person : : Employer ;
relationship Person Owner
inverse Person : :Property ;
};

51
OIF (commandes)

➢Pour exporter les objets d’une base :


odbdump <database name>

➢Pour importer des objets depuis un ou plusieurs fichiers OIF :


odbload <database name> <file 1>…<file n>

52
INTEGRATION à C++, Java, Smalltalk

➢Implémentation du modèle abstrait


➢mapping des concepts
➢mapping des types
➢mapping des collections
➢Nécessité d'adapter le modèle
➢certains concepts n’existent pas dans le langage
➢interface en C++ ==> classe
➢association en C++ et Java ==> attributs roles de type Ref <T>
➢clés ==> pas de clés !
➢Nécessité d’intégrer OQL

53
Java Binding (OML Java)

➢Système de Types de Données Uniques

➢Syntaxe de Java à respecter

➢Gestion automatique de Stockage


(Persistence By Reachability)

54
JAVA ODL

➢Types Simples d’ODL -> types simples Java

➢Types Complexes (Collections)


➢Interfaces des Collections (Dset, Dbag, etc. de Java 1.2)

➢Pas de Gestion Automatique des LIENS BIDIRECTIONNELS

55
JAVA OML/OQL

JAVA OML
➢Déclaration Opérations en Java
➢Des Classes Pour Database, Transaction, Collections

Java OQL
➢Méthode query() de DCollection
➢Classe OQLQuery

56
JAVA OML/OQL

➢Persistance par atteignabilité (reachability)


➢classes connues du SGBDOO
➢objets capables de persister
➢nommage par objets « database »
➢opérations bind, unbind, lookup
➢tout objet nommé est racine de persistance
➢tout objet référencé par un objet persistant est persistant
➢Mapping des types
➢Package collections ODMG : set, bag, list, varray : collection

57
Gestion de transactions

➢Objet Transaction créé par Factory


➢begin() pour ouvrir une transaction ;
➢commit() pour valider les mises à jour de la transaction ;
➢abort() pour défaire les mises à jour de la transaction ;
➢checkpoint() = commit() + begin(), sans relâcher verrous
➢join() pour récupérer l'objet transaction dans la thread ;
➢leave() pour dissocier un objet transaction de la thread ;
➢possibilités d'imbriquer des transactions
➢contrôle de concurrence niveau objet (explicite ou défaut) ;

58
Verrouillage

➢Verrouillage Implicite (pendant traversée graphe objets) ou


Explicite (LOCK ou TRY_LOCK dans Interface Objet) avec
isolation niveau 3 de SQL2 (qui évite lectures sales, fantômes
et lectures non reproductibles) et transactions ACID
➢Interface TransactionFactory
➢Transaction…
➢Transaction..…
➢LOCK
➢ Read
➢ Write
➢ Upgrade (avant Read ou Write pour éviter livelock)
59
Exemple

➢Exemple 2D avec SGBD POET

60
Exemple 2D

//classe qui représente un point


import 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;
}
}
61
Exemple 2D

// Classe qui représente un polygone 2D


import COM.POET.odmg.*;
import COM.POET.odmg.collection.*;
class Polygone2D {
SetOfObject points; //les points du polygone
public Polygone2D() { //Constructeur
points = new SetOfObject();
}
public void ajoutePoint(Point2D pr_point){ //rajouter un Point2D
points.add(pr_point);
}
public int nombreDeCote() throws PolygoneException {
if (points.size() > 2)
return points.size();
else
throw new PolygoneException("Ce n'est pas un polygone");
}
}

62
Exemple 2D (OQL)

//combien d'hexagone existent-ils dans notre base


SELECT COUNT(*)
FROM Polygone2DExtent h
WHERE h.nombreDeCote = 6

//tous les points qui forment des octagones


SELECT p
FROM
pol IN Polygone2DExtent,
p IN pol.points
WHERE pol.nombreDeCote = 8

//tous les point qui sont dans des cercles d'un rayon superieure à 10
SELECT p
FROM (SELECT c FROM Cercle2DExtent c WHERE c.rayon > 10) AS x,
Point2DExtent p
WHERE
x.contient(p)

63

Vous aimerez peut-être aussi