Programmation SQLM4
Programmation SQLM4
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,…
➢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 »
REFERENCE : http://www.odbms.org/odmg-standard/reading-room/odmg-2-0-a-
standard-for-object-storage/
3
Composants du standard ODMG 3.0
ODL
OIF
SGBDOO
4
Composants du standard ODMG 3.0
5
Modèle ODMG : modèle « OBJET-VALEUR »
6
Modèle ODMG : modèle « OBJET-VALEUR »
7
ODMG et propriétés RICE
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)
12
OQL (nouveautés « SQL »)
15
Exemple ODL
Liaison C++
CLASS employe {
E# INT,
Nom STRING,
Adresse ADDRESS <autre classe>
//méthodes...}
16
Exemple ODL
CLASS avion : {
av# INT,
avnom STRING,
…
SET REF <vol> est_utilisé_dans INVERSE utilise
…}
18
Notes :
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
1. SELECT v.v#
FROM
v IN vol <IN collection>
p IN v.est_assure_par
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’;
23
Exercice : Exemple OQL
➢Quels sont les noms des avions conduits par un pilote Niçois ?
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
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
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
Select v
from v in VOL
group by (tot : v.HD<9, tard : v.HD>18)
33
OQL
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 ;
36
Exemple Thésaurus
➢INTERFACE THESAURUS
➢Relationship PEREde <thesaurus> inverse FILSde
➢Relationship VOISIN…
➢Relationship SYNONYMIE…
➢INTERFACE personne…
37
Exemple Thésaurus
38
Exemple Thésaurus
39
Exemple Thésaurus
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)
Select D
from
D in documents
M in D. contient
Where M.ident = « software »;
42
Exemple Thésaurus (OQL)
Select d
From
m in mots_cle
?…
43
Exemple Thésaurus (OQL)
44
Illustration du Thésaurus (avec le SGBD Poet)
46
Exemple Thésaurus avec Poet (OQL)
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
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)
52
INTEGRATION à C++, Java, Smalltalk
53
Java Binding (OML Java)
54
JAVA ODL
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
57
Gestion de transactions
58
Verrouillage
60
Exemple 2D
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
62
Exemple 2D (OQL)
//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