• Aucun résultat trouvé

16 Base de données objet

N/A
N/A
Protected

Academic year: 2022

Partager "16 Base de données objet"

Copied!
54
0
0

Texte intégral

(1)

13/03/22 © Robert Godin. Tous droits réser 1

16 Base de

données objet

(2)

13/03/22 © Robert Godin. Tous droits réser vés.

2

16.1 Le langage de définition de données ODL

 Basé sur IDL (CORBA/OMG)

 Non supporté

– association n-aire n>2

– classe associative

 Types littéraux (valeurs)/objets

(3)

13/03/22 © Robert Godin. Tous droits réser 3

Exemple UML

Personne nom : String

prénom : String

setNomPrénom(n : String, p : String)

Mem bre

téléphoneRésidence : String

$ nbMaxPrêts : Integer = 5

$ duréeMaxPrêts : Integer = 7 nbRetards() : Integer

PrêtEnCours retour(date : Date) PrêtArchivé

dateRetour : Date

{dateRetour >= datePrêt}

{statut = "prêté" ssi PrêtEn Cours de l'Exemplaire est non vide}

{Le nombre de PrêtEnCours d'un Membre <= nbMaxPrêts}

Employé {UNIQUE : codeMatricule}

codeMatricule : String

catégorieEmployé : enum(bibliothécaire, commis) catégorieUtilisateur

Catégorie {UNIQUE: code}

code : String descripteur : String

0..1

* parent 0..1

enfant

* Auteur

Editeur {UNIQUE: nomEditeur}

nomEditeur : String ville : String

Livre {UNIQUE: ISBN}

ISBN : String titre : String

annéeParution : TypeDonnéesAnnée nbExemplairesDisponibles() : Integer

1 ** 1 1..*

1..* 1..*

1..*

1

1..*

1

1..*

Exemplaire {UNIQUE: idExem plaire}

idExem plaire : String dateAchat : Date

statut : enum(prêté, disponible, retiré) 1..*

1

1..*

1 Prêt datePrêt : Date

getEm prunteur() : Utilisateur getExemplaire() : Exem plaire

1

*

1

* Utilisateur

{UNIQUE :idUtilisateur}

idUtilisateur : String motPasse : String setMotPasse(m : String) nbPrêtsEnCours() : Integer

*

1 *

1

{ordonné}

{Il ne peut y avoir plus d'un PrêtEnCours pour un même Exemplaire}

{disjointe, complète}

{disjointe, complète}

{chevauchante, complète}

TypeDonnéesAnnée {Integer > 0 }

<<datatype>>

(4)

13/03/22 © Robert Godin. Tous droits réser vés.

4

16.1.1 Classe et interface ODL

Class Livre

( extent livres

key ISBN)

{ attribute string ISBN;

attribute string titre;

attribute integer annéeParution;

relationship set<Exemplaire> lesExemplaires inverse Exemplaire::leLivre

relationship list<Auteur> lesAuteurs inverse Auteur::lesLivres

integer nbExemplairesDisponibles();

};

(5)

13/03/22 © Robert Godin. Tous droits réser 5

Interface Personne

{ attribute string nom;

attribute string prénom;

void setNomPrénom(in string n; in string p);

};

16.1.1.1 INTERFACE ODL

 Pas d ’extent (non instantiable)

 Attribut/association

– équivalent lecteur/modifieur

– non hérité par interface

(6)

13/03/22 © Robert Godin. Tous droits réser vés.

6

16.1.2 Héritage d'interface (:) et de classe (extends)

Class Utilisateur : Personne ( extent utilisateurs

key idUtilisateur) { attribute string nom;

attribute string prénom;

attribute string idUtilisateur;

attribute string motPasse;

relationship set<Prêt> lesPrêts inverse Prêt::lUtilisateur void setMotPasse(in String m);

integer nbPrêtsEnCours();

};

Class Employé extends Utilisateur ( extent employés

key codeMatricule)

{ attribute string codeMatricule;

attribute enum CatEmp{bibliothécaire, commis}catégorieEmployé;

};

(7)

13/03/22 © Robert Godin. Tous droits réser 7

16.1.3 Littéral ODL

Literal_type

Atomic_literal Collection_literal Structured_literal

long long long short

unsigned long unsigned short

float double

boolean

octet char

string

T set

T bag

T list

T array

K, T dictionary

date

time

timestamp

interval

listeAttributs struct

liste Valeurs enum

(8)

13/03/22 © Robert Godin. Tous droits réser vés.

8

Littéral structuré

Class Membre

( extent membre key noMembre)

{ struct typeDonnéesAdresse{

integer noCivique;

integer numéroAppartement;

string nomRue;

string nomVille;

string nomProvince;

string nomPays;

string codePostal;

};attribute integer noMembre;

attribute string nom;

attribute string prénom;

attribute adresse typeDonnéesAdresse;

};

Membre {UNIQUE : noMembre}

noMembre : Integer nom : String

prénom : String

adresse : typeDonnéesAdresse

typeDonnéesAdresse numéroCivique : Integer

numéroAppartement : Integer nomRue : String

nomVille : String nomProvince : String nomPays : String codePostal : String

<<datatype>>

(9)

13/03/22 © Robert Godin. Tous droits réser 9

16.1.4 Collections ODL

Class Livre

( extent livres

key ISBN)

{ …

attribut set<Exemplaire> lesExemplaires

… };

Class Exemplaire

( extent exemplaires key idExemplaire) {

attribut Livre leLivre

};

(10)

13/03/22 © Robert Godin. Tous droits réser vés.

10

16.1.5 Association en ODL (relationship)

Class Livre

( extent livres

key ISBN)

{

relationship set<Exemplaire> lesExemplaires inverse Exemplaire::leLivre

};

Class Exemplaire

( extent exemplaires key idExemplaire)

{

relationship Livre leLivre

inverse Livre::lesExemplaires

};

(11)

13/03/22 © Robert Godin. Tous droits réser 11

16.1.6 Spécification de la signature des opérations

Class Utilisateur : Personne ( extent utilisateurs

key idUtilisateur) { attribute string nom;

attribute string prénom;

attribute string idUtilisateur;

attribute string motPasse;

relationship set<Prêt> lesPrêts

inverse Prêt::lUtilisateur void setMotPasse( in String m);

integer nbPrêtsEnCours();

};

(12)

13/03/22 © Robert Godin. Tous droits réser vés.

12

16.2 Objets

transients/persistants

 Cohabitation des objets

transiants/persistants pour une même classe

 Persistance par atteignabilité (par

référence)

(13)

13/03/22 © Robert Godin. Tous droits réser 13

16.2.1 Constructeurs d'objets

Interface ObjectFactory { Object new();

};

Interface Object

{ enum Lock_Type{read, write, upgrade};

void lock(in Lock_Type mode) raises(LockNotGranted);

boolean try_lock(in Lock_Type mode);

boolean same_as(in Object anObject);

Object copy();

void delete();

};

(14)

13/03/22 © Robert Godin. Tous droits réser vés.

14

16.2.2 Contrôle de concurrence

 Pessimiste par défaut

– verrouillage en deux phases

– mode read (partagé) en lecture

– mode write (exclusif) en écriture

– mode upgrade

 demande explicite par lock() ou try-lock()

(15)

13/03/22 © Robert Godin. Tous droits réser 15

16.2.3 Noms de racines persistantes

bind() pour créer un nom de racine persistante

extent est une racine persistante

persistance par atteignabilité (reachability)

objets qui sont référencés par une racine deviennent persistants

au commit

lookup() pour chercher la racine

Interface Database

{ void open(in String anOdmsName)

raises(DatabaseNotFound,DatabaseOpen);

void close() raises(DatabaseClosed, TransactionInProgress);

void bind(in Object anObject, in String aName) raises(DatabaseClosed, ObjectNameNotUnique, TransactionNotInProgress);

Object unbind(in String aName)

raises(DatabaseClosed, ObjectNameNotFound, TransactionNotInProgress);

Object lookup(in String aName)

raises(DatabaseClosed, ObjectNameNotFound, TransactionNotInProgress);

ODLMetaObjects::Module schema()

raises(DatabaseClosed, TransactionInProgress) ; };

(16)

13/03/22 © Robert Godin. Tous droits réser vés.

16

Autres approches de contrôle de la persistance

 Contrôle programmatique explicite

objet.makePersistent()

 Par héritage

– sous-classes d ’une classe spéciale

(17)

13/03/22 © Robert Godin. Tous droits réser 17

16.2.4 Gestion des OID persistants

 Table OID -> adresse transiante

– coût important de traduction

 Mutation de pointeurs (pointer swizzling)

– bit qui distingue entre OID et adresse transiante

– quand muter ?

Automatique : au chargement

À la demande : au premier parcours

Mécanisme de mémoire virtuelle (hardware)

Object Store

(18)

13/03/22 © Robert Godin. Tous droits réser vés.

18

16.3 Le langage de requête OQL

 Similarités avec SQL

– table -> racine persistente

 Grammaire complète :

– http://www.odmg.org

(19)

13/03/22 © Robert Godin. Tous droits réser 19

16.3.1 SELECT de base

 Le titre des livres parus après 1999

SELECT l.titre FROM livres AS l

WHERE l.annéeParution > 1999 type du résultat :

litteral bag<String>

Class Livre

( extent livres key ISBN)

{ attribute string ISBN;

attribute string titre;

attribute integer annéeParution;

relationship set<Exemplaire> lesExemplaires inverse Exemplaire::leLivre;

relationship list<Auteur> lesAuteurs inverse Auteur::lesLivres;

relationship Editeur lEditeur

inverse Editeur::lesLivres;

relationship Catégorie laCatégorie inverse Catégorie::lesLivres;

integer nbExemplairesDisponibles();

};

(20)

13/03/22 © Robert Godin. Tous droits réser vés.

20

16.3.2 Clause DISTINCT

 Le titre et l'année des livres parus après 1999 sans doublons

SELECT DISTINCT l.titre, l.annéeParution FROM livres l

WHERE l.annéeParution > 1999 type du résultat :

litteral set<struct<titre:String,annéeParution integer>>

(21)

13/03/22 © Robert Godin. Tous droits réser 21

16.3.3 Constructeur STRUCT

 Le titre et l'annéeParution des livres parus après 1999

 Équivalent à

SELECT STRUCT(titre:l.titre, annéeParution:l.annéeParution) FROM livres AS l

WHERE l.annéeParution > 1999 type du résultat :

litteral bag<struct<titre:String,annéeParution:integer>>

SELECT l.titre,l.annéeParution FROM livres AS l

WHERE l.annéeParution > 1999 type du résultat :

litteral bag<struct<titre:String,annéeParution:integer>>

(22)

13/03/22 © Robert Godin. Tous droits réser vés.

22

16.3.4 Sélection d'objets de la BD

 Collection de références aux objets de la classe Livre parus après 1999

 Peut ensuite manipuler les objets persistants

SELECT l

FROM livres l

WHERE l.annéeParution > 1999 type du résultat :

litteral bag<Livres>

(23)

13/03/22 © Robert Godin. Tous droits réser 23

16.3.5 Requête sans SELECT

 Collection des livres

livres

type du résultat :

set<Livres>

(24)

13/03/22 © Robert Godin. Tous droits réser vés.

24

16.3.6 Expressions de chemins

 Le titre de l ’objet unLivre (type Livre)

 Exemple avec une opération

unLivre.titre

type du résultat : String

unLivre.nbExemplaires() type du résultat :

litteral integer

(25)

13/03/22 © Robert Godin. Tous droits réser 25

Expressions de chemins (suite)

 Naviguer une association

 En cascade

unLivre.lesExemplaires type du résultat :

set<Exemplaire>

unLivre.laCatégorie.leParent type du résultat :

Catégorie

(26)

13/03/22 © Robert Godin. Tous droits réser vés.

26

Navigation à travers une collection

 Les idExemplaires d'un livre

 Les idExemplaire des livres de l'année 2000

SELECT e.idExemplaire

FROM unLivre.lesExemplaires AS e type du résultat :

litteral bag<String>

SELECT e.idExemplaire

FROM livres AS l, l.lesExemplaires AS e WHERE l.annéeParution = 2000

type du résultat :

litteral bag<String>

(27)

13/03/22 © Robert Godin. Tous droits réser 27

Navigation à travers une collection (suite)

 Le ISBN des livres actuellement empruntés par le membre dont le idUtilisateur = ‘unId’

SELECT p.lExemplaire.leLivre.ISBN

FROM membres AS m, m.lesPrêts AS p WHERE m.idUtilisateur = "unID" AND

P IN prêtsEnCours type du résultat :

litteral bag<String>

(28)

13/03/22 © Robert Godin. Tous droits réser vés.

28

16.3.7 SELECT enchâssé dans le FROM

 les idExemplaire des livres de l'an 2000

SELECT e.idExemplaire

FROM (SELECT l.lesExemplaires FROM livres AS l

WHERE l.annéeParution = 2000) AS l2k, l2k.lesExemplaires AS e

type du résultat :

litteral bag<String>

(29)

13/03/22 © Robert Godin. Tous droits réser 29

16.3.8 SELECT enchâssé dans la

spécification du résultat d'un SELECT

 Les ISBN des livres de l'an 2000

accompagnés de leurs exemplaires empruntés

SELECT

STRUCT(ISBN: l.ISBN, emprunts:(SELECT e

FROM l.lesExemplaires AS e WHERE e.statut = "prêté")) FROM livres AS l

WHERE l.annéeParution = 2000 type du résultat :

litteral bag<STRUCT<ISBN:String,emprunts:set<Exemplaire>>

(30)

13/03/22 © Robert Godin. Tous droits réser vés.

30

16.3.9 Aplatissement d'une collection de collections (FLATTEN)

 FLATTEN(set ( set(1, 3), set (2, 5, 3), set (5, 8)) ) = set(1, 2, 3, 5, 8)

 Extraire les exemplaires des livres parus en l'an 2000

FLATTEN (SELECT l.lesExemplaires FROM livres AS l

WHERE l.annéeParution = 2000) type du résultat :

litteral bag<Exemplaire>

(31)

13/03/22 © Robert Godin. Tous droits réser 31

16.3.10 Extraction de l'élément d'un singleton (ELEMENT)

 Retourner l’objet de la classe

Livre qui correspond au ISBN =

‘111-11111-11’

element(

SELECT l FROM livres AS l

WHERE l.ISBN = "111-11111-11"

)

(32)

13/03/22 © Robert Godin. Tous droits réser vés.

32

16.3.11 Constructeurs d'objets

Le constructeur suivant construit un objet de la classe Exemplaire

Class Exemplaire

( extent exemplaires key idExemplaire)

{ attribute string idExemplaire;

attribute date dateAchat;

attribute enum statut {prêté,disponible,retiré};

relationship Livre leLivre

inverse Livre::lesExemplaires relationship set<Prêt> lesPrêts

inverse Prêt::lExemplaire };

Exemplaire(

idExemplaire : "A1E2F",

dateAchat : date "2000-04-25", statut : "disponible",

leLivre : element(

SELECT l FROM livres AS l

WHERE l.ISBN = "111-11111-11"),

LesPrêts : set())

(33)

13/03/22 © Robert Godin. Tous droits réser 33

16.3.12 Comparaison par identité ou par valeur

 Le = compare les OID des objets

(34)

13/03/22 © Robert Godin. Tous droits réser vés.

34

16.3.13 Quantificateurs FOR ALL et EXISTS

 Les livres dont tous les exemplaires sont empruntés

 Les livres dont au moins un exemplaire est emprunté

SELECT l

FROM livres AS l

WHERE FOR ALL e IN l.lesExemplaires : e.statut = "prêté"

type du résultat : litteral set<Livre>

SELECT l

FROM livres AS l

WHERE EXISTS e IN l.lesExemplaires : e.statut = "prêté"

type du résultat :

litteral set<Livre>

(35)

13/03/22 © Robert Godin. Tous droits réser 35

16.3.14 Quantificateurs SOME, ANY et ALL

e1 op {SOME|ANY} e2

EXISTS ele IN e2 : e1 op ele

e1 op ALL e2

FOR ALL ele IN e2 : e1 op ele

(36)

13/03/22 © Robert Godin. Tous droits réser vés.

36

16.3.15 Fonctions de groupe

 Le nombre moyen d’exemplaires disponibles par livre

AVG (SELECT l.nbExemplairesDisponibles()

FROM livres AS l)

(37)

13/03/22 © Robert Godin. Tous droits réser 37

16.3.16 Partition avec GROUP BY

 Le nombre d’exemplaires disponibles par années de parution pour les années où le nombre dépasse 100

SELECT année,

nombreDisponibles :

SUM(SELECT l.nbExemplairesDisponible() FROM partition) FROM livres AS l

GROUP BY année : l.annéeParution

HAVING SUM(SELECT l.nbExemplairesDisponible() FROM partition) > 100 type du résultat :

litteral bag<struct<année : integer, nombreDisponibles : integer>>

(38)

13/03/22 © Robert Godin. Tous droits réser vés.

38

16.3.18 Tri avec ORDER BY

 Les livres triés par ordre

descendant (DESC) de l’année de parution et par ordre ascendant (ASC) du titre

SELECT l

FROM livres AS l

ORDER BY l.annéeParution DESC, l.titre ASC type du résultat :

litteral set<Livre>

(39)

13/03/22 © Robert Godin. Tous droits réser 39

16.4.2.1 SCÉNARIO GLOBAL DE MANIPULATION

DE DONNÉES EN JAVA

(40)

13/03/22 © Robert Godin. Tous droits réser vés.

40

16.4.2.2 DÉFINITION DE CLASSES CAPABLES DE PERSISTANCE

Dcollection, Dset, Dbag, Dlist,

Darray et Dmap

(41)

13/03/22 © Robert Godin. Tous droits réser 41

16.4.2.3 CRÉATION D'UNE

RACINE PERSISTANTE

(42)

13/03/22 © Robert Godin. Tous droits réser vés.

42

16.4.2.4 NAVIGATION À PARTIR

D'UNE RACINE PERSISTANTE

(43)

13/03/22 © Robert Godin. Tous droits réser 43

16.4.2.5 REQUÊTE SIMPLE

SUR UNE DCOLLECTION

(44)

13/03/22 © Robert Godin. Tous droits réser vés.

44

16.4.2.6 REQUÊTE OQL

(45)

13/03/22 © Robert Godin. Tous droits réser 45

1.5 Persistance transparente avec la norme JDO

 API normalisée pour persistance transparente

 Au-dessus de

– fichiers, BD SQL, XML, etc.

 SQL

– correspondance déclarative entre les

types d'objets et tables

(46)

13/03/22 © Robert Godin. Tous droits réser vés.

46

Exemple Livre et Editeur

(47)

13/03/22 © Robert Godin. Tous droits réser 47

(48)

13/03/22 © Robert Godin. Tous droits réser vés.

48

Correspondance table-classe par

descripteur XML

(49)

13/03/22 © Robert Godin. Tous droits réser 49

Réalisation par modification

de code-octet

(50)

13/03/22 © Robert Godin. Tous droits réser vés.

50

Création d’objets persistants

(51)

13/03/22 © Robert Godin. Tous droits réser 51

Utilisation d’un Extent

(52)

13/03/22 © Robert Godin. Tous droits réser vés.

52

JDOQL

(53)

13/03/22 © Robert Godin. Tous droits réser 53

Modification

(54)

13/03/22 © Robert Godin. Tous droits réser vés.

54

Supression

Références

Documents relatifs

 Le titre et l'année des livres parus après 1999 sans doublons. SELECT DISTINCT l.titre, l.annéeParution FROM

Vingt ans après les attentats du 11 septembre 2001, l'auteur fait le point sur les conséquences de la lutte contre le terrorisme au XXIe siècle. Analysant les

Pour rappel, les élèves auront apporté une petite boîte personnalisée avec leur nom, laissée en classe dans une armoire fermée à clef, avec le matériel repris en 3 e , où

Parmi les romans ci-dessous que je vous ai proposés cette année, coche tous ceux que tu as lus. Ensuite, souligne en vert celui / ceux que tu as le plus aimés (s’il y en a) et en

Parmi les romans ci-dessous que je vous ai proposés cette année, coche tous ceux que tu as lus. Ensuite, souligne en vert celui / ceux que tu as le plus aimés (s’il y en a) et en

qui parviendront à transformer l'enfant triste en fillette heureusi S'installe aussi l'amour entre deux adultes et, en filigrane, celt de Chris pour Marika. Et puis,

[r]

La passion des architectes pour les livres, ceux qu’ils écrivent et ceux qu’ils lisent, en font des objets de recherche tout aussi privilégiés pour l’historien?. C’est