Upload
oussamaa-fanovskyy
View
59
Download
1
Embed Size (px)
Citation preview
05/05/2009 1
Module: Bases de données Orientées Objet
(volume 1)
BELASLA El [email protected]
EMSI 2008/2009
205/05/2009
Objectifs du cours
n Apprendre le concept BDOOn Apprendre la manipulation des SGBDOO¨Orienté Objet pure (ODL, OQL..)¨Le relationnel objet (SQL3)
305/05/2009
Structure du cours
n Cours magistral n Travaux dirigés n TPsn projet
405/05/2009
Plan général du cours
n Introduction à l’Orienté Objetn Problématique des BDs relationnels n Définition des SGBDOn Le standard ODMG ¨ ODL¨ OQL
n L’objet-relationnel¨ SQL3
05/05/2009 5
L’orienté Objet
605/05/2009
Définition d ’un objet
n Un objet comme un ensemble comportant :¨ des attributs
n Propriétés de l’objet¨ des méthodes
n Comportements ou op érations ¨ un identifiant (OID)
n Un objet correspondant à un objet réel (matériel ou abstrait). Les valeurs des attributs d éfinissent l'état de l'objet.
705/05/2009
Etat d’un objetn Ensemble des valeurs des attributs de l’objet à un instant
donné¨ Un attribut est une information qui qualif ie l’objet qui
le contient. Chaque attribut prend une valeur dans un domaine de définition donné.
¨ Exemple :n Pour un objet de type «Voiture», Ma voiture est caractérisée par :
¨ Sa marque : « Opel »¨ Sa couleur : « Noir »¨ Sa masse : « 800 »¨ Son immatriculation : « 555 AB 69 »
n L’état d’un objet change pendant sa vie¨ L’état d’un objet à un moment donn é est la
conséquence des comportements pass és¨ Exemple :
n Ancienne immatriculation de Ma voiture : « 888 YZ 03 »
805/05/2009
Comportement d ’un objetn Actions et réactions possibles
¨ Ensemble d’opérations / méthodesn Exemple de méthodes
¨ démarrer, rouler, stopper, ajouter_essence
n Stimulation¨ Demander à un objet d’effectuer une méthode par un envoi de
messagen Exemple:
Ok = ma_voiture.démarrer()Vol = ma_voiture.ajouter_essence(15)
n Evolution de l ’état¨ L’état d’un objet dépend des opérations effectuées par les différents
appels de méthodes.¨ Certaines opérations dépendent de l ’état courant
n Exemple:¨ La méthode ma_voiture.démarrer() ne fonctionnera seulement
si ma_voiture.volume_essence > 0
905/05/2009
Identité d’un objet
n Caractérise l’existence propre de l ’objet¨ Identification de l’objet de manière
n non ambiguën indépendante de son état
Deux objets dont toutes les valeurs
d’attributs sont identiques n’ont pas
la même identité
1005/05/2009
Représentation d ’un objet
n Selon le formalisme UML
Ma_voiture
Sa marque : « Opel »Sa couleur : « Noir »Sa masse : « 800 »Son immatriculation : « 555 AB 69 »
Démarrer()Ajouter_essence(entier v)Roulerstopper
Attributs
Méthodes
Nom de l ’objet
1105/05/2009
Liens entre les objets
n Pour pouvoir envoyer un message à un objet, il faut le «connaitre»¨ Ex : L’objet Le_conducteur connaît l’objet Ma_voiture¨ Connaître un objet revient à avoir une référence qui
lui correspond
1205/05/2009
Représentation des classes d’objets
1305/05/2009
L'apport des modèles objetsn Identité d'objets¨ introduction de pointeurs ¨ possibilité de chaînage
n Encapsulation des données¨ possibilité d'isoler les données par des opérations¨ facilite l'évolution des structures de données
n Héritage d'opérations et de structures¨ facilite la réutilisation des types de données¨ permet l'adaptation à son application
n Possibilité d'opérations abstraites (polymorphisme)¨ simplifie la vie du développeur
05/05/2009 14
Problématique des SGBDR
1505/05/2009
Définitionsn Bases de Données : Ensemble structur é de données
enregistrées sur un support disque pour sati sfaire les requêtes de plusieurs utilisateurs « en temps opportun »
n Système de Gestion de Bases de Données (SGBD) : progiciel d ’usage général permettant la gestion de bases de données
1605/05/2009
Fonctions d ’un SGBD
n Persistance des donn ées sur disquen Partage des donn ées (gestion des conf lits d ’accès)n Intégrité (respect de contraintes de coh érence)n sûreté de fonctionnement (reprises apr ès panne)n confidentialité (attribution de droits d ’accès)n archivage sur support externes (back -up)
1705/05/2009
Schéma général
Administration
•Création des usagers, des droits•Maintenance•Optimisation
Base de Données
Définir un schéma des
données
Conception Utilisation
•Usagers (postes de travail)•programmes
Requêtes :• insertions• mises à jour• sélections
Système de Gestion de Bases de Données
Langage de Définition de Données
Langage de Manipulation de Données
1805/05/2009
Langagesn Le Langage de Définition de Données permet de définir la
structure des informations ( métabase):¨ entités (ex : personne) avec leurs caractéristiques associées (ex:
nom, prénom, fonction…)¨ liens entre les entités (ex : une personne travaille sur un projet)
n Le Langage de Manipulation de Donn ées permet d ’adresser des requêtes à la base :¨ insertion de nouvelles entités (ex : embauche d ’un employé),
destruction¨ mise à jour de caractéristiques (ex : changement de fonction)¨ sélection (ex : trouver les personnes dont la fonction est
« ingénieur »)
1905/05/2009
Historique des SGBDn Modèle hiérarchiques : données
représentées sous forme d ’une arborescence
n Modèle réseau : représentation sous forme d ’un graphe quelconque
n Modèle relationnel : représentation sous forme de tables
n Modèles orienté objet (représentation sous forme d ’objets) et relationnel-objet(hybridation entre relationnel et objet)
Recherche?
1960
1970
1980
Produits
1970
1980
1990
2005/05/2009
Le modèle hiérarchiqueLa base de donn ées est une arborescence. Une donn ée
est soit un nœud, soit une feuille
Problèmes majeurs :n Obligation d ’utiliser la structure d ’arbre pour accéder aux donnéesn redondance des données
Département : recherche
Département : projets
Département : production
Employés : JeanEricLuc
Employés : LouisNicolasAlexandre
Employés : JacquesMichel
Centre : Paris
Centre : Rouen
Centre : Rouen
2105/05/2009
Le modèle réseauUne donnée est un nœud d ’un graphe quelconque
Département : recherche
Département : projets
Département : production
Employés : JeanEricLuc
Employés : LouisNicolasAlexandre
Employés : JacquesMichel
Centre : Paris
Centre : Rouen
Centre : Rouen
n Insuffisance du modèle réseau :n Trop grande complexité du graphen une requête se traduit par un programme de parcours complexes
Départements
Employés Centres
2205/05/2009
Le modèle relationnelReprésentation par des tables ind épendantes
n Simplicité : description par des tables indépendantesn autonomie : chaque table est un point d ’entrée de la basen puissance de l ’expression des requêtes (requêtes déclaratives)
Table des Départements
ID nom centreD1 Recherche C2D2 Projets C1D3 Production C1
Table des Employés
deptnomJean D1 Éric D1 Luc D1 Louis D2 Nicolas D2 Alexandre D2 Jacques D3 Michel D3
Table des CentresID nomC1 Paris C2 Rouen
2305/05/2009
ProductionProjetsMichel
JacquesAlexandre
NicolasLouis
MichelEric
Le modèle orienté objet
Représentation par des graphes d ’objets
Employé
nom
Jean
Département
nom
Centre
nom
Recherche
RouenParis
EmbaucherMuter ()
Déménager ()
Créer ()
2405/05/2009
Avantages des SGBD relationnels
n Modèle de données est très simple et donc facile àcomprendre pour les utilisateurs.
n Le modèle repose sur une base formellement définie _ définir :¨ des méthodes de conception de schémas (théorie de la
normalisation)¨ langages de manipulation de données (LMD) standardisés
(SQL, ...).
2505/05/2009
Avantages des SGBD relationnels n La modélisation normalisée
¨ décomposer les données en sous-ensembles indivisibles et les relier par DF _ niveau le plus fin,# redondances et fusions.
n Formes Normales1 ère forme normale : Une relation est en première forme normale si tout attribut est élémentaire et non répétitif.
2 ième forme normale : Une relation est en deuxième forme normale si elle est en première forme normale et que tout attribut non-clé est en dépendance fonctionnelle de toute la clé.
3ième forme normale : Une relation est en troisième forme normale si elle est en seconde forme normale et que tout attribut non-clé n’est en dépendance fonctionnelle que de la clé primaire.
2605/05/2009
n SQL, langage assez " propre" (≠ Fortran, C)n Indépendance physiqu e (et un peu logique) : changer le
type de stockage => no pb !n Optimisations nombreusesn Gestion de la conf identialité...n Modèle standardn Parallélismen Puissance des entrepri ses leaders (ORACLE, DB2 …)
Avantages des SGBD relationnels
2705/05/2009
limitations du mod èle relationnel
n Prise en compte de la s émantique difficile¨ pas de hiérarchie d'entités (modèle "à plat")¨ pas d'héritage¨ perte d'information sémantique¨ maintien de l'intégrité difficile
n Difficulté de la normalisation¨ éclatement en une multitude de relations¨ multiplicité des opérations de jointure
n Programmation di fficile¨ plongement de SQL dans un autre langage
2805/05/2009
Limites des SGBD relationnels
n Modèle de données :¨ trop simple¨ Ne permet pas de repr ésenter facilement les objets du
monde réel (plus complexes qu'une relation).
n Dans les schémas, les objets du monde réel sont éclatés en plusieurs relations, _ multiplie les jointures dans les requêtes des utilisateurs.
2905/05/2009
Représentation complexe du réel avec le relationnel
n Représentation conceptuelle distante du réel. La modélisation fournit de nombreuses relat ions, en rupture avec le réel, qui est plus simple.
1 Entité génère 2 tables ??
3005/05/2009
Limites des SGBDR : Exemplen On désire conserver dans BD g éographique (réseau routier).
n Pour définir le réseau routier, on part de points d'intersection qui sont les points ou plusieurs routes se croisent ou qui correspondent à un changement de caractéristiques d'une route. Un point d'intersection est caractérisée par ses coordonnées géographiques (latitude et longitude).
n On considère alors des segments de route qu i sont des tronçons de route situées entre deux points d'intersection. Outre ses points d'origine et de destination, une information de catégorie (deux bandes, quatre bandes, . . .) caractérise chaque segment.
n Une route est désignée par un identifiant (N4, S22, P602, . . .) et est décrite par un ensemble de segments. De plus pour chaque route onconserve la désignation de l'autorité (région, commune, . . .) qui la gère.
3105/05/2009
n Un schéma possible serait :
- POINTS (ID P, LATITUDE, LONGIT UDE)- SEGMENTS (ID SEG, ID P1, ID P2, CAT EGORIE)- ROUTES (ID R, ID LISTE SEG, AUTORITE)- LISTES SEGMENTS (ID LISTE SEG, ID SEG)
n Il faut noter que l'usage des identi fiants permet par exemple d'avoir deux segments de route entre les mêmes points, ou de repr ésenter sans Ambiguïté qu'un même segment f ait partie de plusieurs routes.
Limites des SGBD relationnels
3205/05/2009
Limites des SGBD relationnels
autorite3 LS#3 R#3 autorite2 LS#2 R#2
autorite1 LS#1 R#1
AUTORITE
ID LISTE SEG ID R
cat3 P#32 P#31 SEG#3 cat2 P#22 P#21 SEG#2 cat1 P#12 P#11 SEG#1
CATEGORIE ID P2 ID P1 ID SEG
POINTS
long3 lat3 P#3 long2 lat2 P#2 long1 lat1 P#1
LONGITUDE LATITUDE ID P
SEGMENTS
ROUTES
5 SEG#2 LS#2 SEG#2 LS#4 SEG#2 LS#3 SEG#1 LS#2 SEG#1 LS#1 SEG#1 LS#
ID SEGID LISTE SEG
3305/05/2009
Limites des SGBDR
n Constats :¨ les bases de donn ées sont relationnelles¨ les grands constructeurs de SGBD -R sont riches et
puissants¨ le modèle relationnel est tr ès limité car :
n il n'existe pas de constructeurs de typesn le nombre de types pr é-definis est très faible
¨ les nouvelles applicati ons (en particulier multim édia) exigent plus de souplesse
3405/05/2009
Il est nécessaire d'avoir la possibilité de décrire des objets complexes (complex Objects) dans une base de données.
Un objet complexe est un objet qui n'est pas caractérisé par une seule valeur, mais bien par un ensemble structuré de valeurs..
Limites des SGBD relationnels conclusion
3505/05/2009
- Langages OO( Simula,Eiffel, Smalltalk, C++,…)
_ accroître la productivité ( logiciels structurés, extensibles, réutilisables et de maintenance aisée..).
principes : ¨ les objets (2 parties): valeur / opérations (méthodes: manipuler
les objets)n Valeur cachée(accès et MAJ par méthodes). n Maintenance facile des logiciels.
¨ l'héritage, qui permet à une classe d'objets d'avoir les mêmes propriétés (structure de données et méthodes) qu'une autre classe sans avoir à les redéfinir_ étendre et réutiliser facilement des logiciels.
Nouveaux besoins
3605/05/2009
Deux solutions (1)
n abandonner le modèle relationnel et construire un nouveau modèle "objet" de BD.
n Commercialisation SGBD lente (créneaux spécialisés).
n Passage des SGBDR passer brutalement à des modèles objets : raisons économiques compréhensibles.
3705/05/2009
Deux solutions (2)
§ Étendre le modèle relationnel modèle _ objet-relationnel (relationnel -objet").
§ Modèle relationnel compatible avec les " règles" objet.
§ 3 extensions p/r mod èle relationnel standard :
¨ Introduction des objets, via leur identifiant (oid : objectidentifier)
¨ Incorporation de structures complexes TAD: les types abstraits de données
¨ Modélisation des associations
3805/05/2009
Exemple de table et objet
24 RabatAlamiConducteur Age
45Alami17Rachdi
Rapport
134
219
Photo
037
Accident
Police Nom Adresse Conducteurs Accidents
3905/05/2009
SGBD Relationnel / Object
Et autres …DB2-InformixSybase
Oracle 8i, 9i, 10 j
4005/05/2009
SGBDO 1ère BD, Gemstone (1983) élaborée à partir de Smalltalk. Variété de BD "orientées objet" dans le domaine expérimentalet dans le commerce.
Produits commerciaux:
§O2 (O2 Technology)§Gemstone/OPAL ( Servio Logic) §Ontos (Ontologic) §Statice (Symbolics) §Gbase (Object Databases) §Vision (Innovative Systems) §Objectstore (Object Design) §Objectivity/DB (Objectivity) §Versant (Versant Object Technology) §Orion (Itasca Systems) §Illustra (Illustra Inc.) §SQLX (UniSQL)
4105/05/2009
§ R : Réutilisabilité. Concepts d'abstraction ou d'encapsulation sont pri vilégiés : l'héritage et le polymorphisme.
n I : Identité Physique . Un objet n'a d'existence que s'il est identifiable (matérialisée par un OID) invariant dans la vie de l'objet.
n C : Construction d'objets complexes et typage extensible.
n E : Encapsulation . un objet comme une "bo îte" dont l'intérieur n'est connu que par les services qu' elle offre .
Propriété RICE (Miranda)
4205/05/2009
Bibliographien [Connolly, 2002]
Connolly T., Begg C. (2002)Database Systems, A Practical Approach to Design, Implementation and ManagementAddison Wesley Chapitre 27Version française aux Editions Reynald Goulet:Systèmes de bases de données,Approche pratique de la conception, de l'implémentation et de l'administration: chapitre 28
n [Cattell, 2000]Cattell R. et al. (2000)Object Database Standard: ODMG 3.0Morgan Kaufmann
n [Gardarin, 1999] Gardarin, G. (1999): chapitres 11 et 12Bases de Données Objet et RelationnelEyrolles, 1999
n [Godin, 2003] Godin, R.Systèmes de gestion de bases de données par l’exemple. Montréal, Canada: Loze-Dion.Chapitre 16
4305/05/2009
Approche SGBDO
n Adopter une approche tout objet¨ de l ’analyse à l ’implémentation puis au stockage
n Penser et gérer des objets¨ de l ’interface utilisateur au langage de programmation
n Développer de nouveaux syst èmes¨ « oublier » les systèmes relationnels¨ manipuler, stocker et gérer des objets
n Définir les exigences pour de tels syst ème¨ le manifeste des SGBDO
n Proposer un standard¨ Le standard de l ’ODMG
4405/05/2009
Definition Système de Gestion de Bases de Donn ées Objet (SGBDO)n système regroupant:
¨ fonctionnalités d'un SGBD¨ intégration des concepts objet
n pour la modélisation¨ objets complexes¨ conception homogène: données et programmes¨ concepts de classes et d'héritage
n d'un point de vue syst ème¨ stockage efficace pour tous types de données¨ recherche¨ gestion de transaction
4505/05/2009
Le Manifeste des SGBDOCaractéristiques obligatoiresn Objets complexesn Identité d'objetn Encapsulation n Types ou classesn Hiérarchies de types ou de classesn Surcharge et résolution tardiven Complétude
4605/05/2009
Le Manifeste des SGBDOCaractéristiques obligatoiresn Extensibilitén Manipulation de données n Persistence n Fiabilitén Gestion de la mémoire secondaire n Gestion de la concurrence
4705/05/2009
Manifeste des SGBDOAutres caractéristiquesn Caractéristiques Optionnelles¨ héritage multiple¨ vérification et inférence de types¨ répartition¨ transaction de conception¨ gestion de versions
n Caractéristiques Ouvertes¨ paradigme de programmation¨ système de représentation¨ système de types¨ uniformité du système
05/05/2009 48
ODMGObject Database Manage ment Group
4905/05/2009
ODMGwww.odmg.org
n Composition¨ Président: Rick Cattell, SUN
n Membres¨ GemStone Systems, IBEX Computing SA, Object Design,¨ Objectivity, O2 Technology, POET Software, UniSQL,¨ Versant Object Technology
n But¨ Définir un standard permettant la portabilité des schémas de
base et des programmes développés sur des SGBDs-OO différentsn un standard ODMG-93 (94)n et son evolution ODMG-II (Mars 1997)
5005/05/2009
Les standards ODMG -93 et ODMG-II
Définition¨ Spécification
n ODL - Object Definition Languagen OIF - Object Interchange Format
¨Manipulationn Non-Procédural
¨ OQL - Object Query Languagen Procédural
¨ OML - Object Manipulation Language§ extensions (binding) Pers istance et Transaction§ langages généraux : C++, Smal ltalk puis Java (06/97)
n Imbrication des langages
5205/05/2009
Exemple UMLPersonne
nom : Stringprénom : String
setNomPrénom(n : String, p : String)
Mem breté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}
{s tatut = "prêté" ss i PrêtEnCours de l 'Exemplaire est non vide}
{Le nombre de PrêtEnCours d'un Membre <= nbMaxPrêts}
Employé{UNIQUE : codeMatricule}codeMatricule : StringcatégorieEmployé : enum(bibliothécaire, commis)
catégorieUtil isateur
Catégorie{UNIQUE: code}code : Stringdescripteur : String
0..1
*
parent 0..1
enfant
*
Auteur
Editeur{UNIQUE: nomEditeur}nomEditeur : Stringville : String
Livre{UNIQUE: ISBN}ISBN : Stringtitre : StringannéeParution : TypeDonnéesAnnée
nbExemplairesDisponibles() : Integer
*1
*1
1..*1..* 1. .*1..*
1
1..*
1
1..*
Exemplaire{UNIQUE: idExem plaire}idExem plaire : StringdateAchat : Datestatut : enum(prêté, disponible, retiré)1..*
11..*
1
PrêtdatePrêt : Date
getEm prunteur() : Util isateurgetExemplaire() : Exem plaire
1
*
1
*
Uti lisateur{UNIQUE :idUtil isateur}idUti lisateur : StringmotPasse : 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}{dis jointe, complète}
{chevauchante, complète}
TypeDonnéesAnnée{Integer > 0 }
<<datatype>>
05/05/2009 53
ODLObject definition language
5405/05/2009
Types ODL ¨ Distinction entre Lit éral et Objet
n Litéral¨ Types atomiques
n int, real, string¨ Constructeurs de type
n énumération enumn structures struct, unionn collections génériques : set, bag, list, array
¨ chaque litéral est « caractérisé » par sa valeurn L1 et L2 sont égaux si leurs valeurs sont égales
n Objet¨ chaque objet est identifi é par son identité
n O1 et O2 sont égaux si leurs identifiants sont égaux
5505/05/2009
Définition d ’interface n interface = spécification d ’un type
¨ super (Héritages simple et multiple)¨ extent, clés candidates¨ attributs
n attribute <type> <nomattr>;¨ associations et associations inverses
n relationship <type> <nomasso>n inverse <nom-d-interface>::<nomasso>;
¨ méthodesn <type-retourné> <nommeth> (<type-paramêtre> : <type>, …)n raise (<type-d-exception>);n <type-paramêtre> : in, out, inout
n classe¨ interface + une implantation particulière du type
n dans un des LMD disponibles
5605/05/2009
Interface Personne{
attribute string nom;attribute string prénom;void setNomPrénom(in string n; in string p);
};
Définition d ’Interface
n Description de la structure et du comportement mais pas de l ’extension
n Pas d ’extent (non instantiable)n Attribut/association¨ équivalent lecteur/modif ieur¨ non hérité par interface
5705/05/2009
Définition des méthodes n définition de l'interface¨ nom de la méthode¨ paramètres¨ conditions d'exceptions¨ corps de la méthode
n exemplesvoid supprime_pièce () raises (pièce-inexistante)void modif_surface(new-surface)short calcule_surface()
5805/05/2009
Définition des associations
n Associations binaires¨ entre deux types¨ de cardinalité 1:1, 1:N, N:M¨ définition du lien inverse
n Exemple
interface Propriétaires{....relationship Set<Appartement>Possède inverse Appartement::Prop;...
5905/05/2009
Exemple interface
interface Employee {attribute int numemp; attribute string name;attribute float basesalary; attribute Date birthday;attribute Struct Addr { string street, string city, intzip} address;attribute enum TypeEmp { worker,manager} typeEmp;attribute Set<string> phones;relationship Dept dept inverse Dept::members;float salary();
}interface Dept {
attribute string name;attribute Struct Employee::Addr address;relationship Set<Employee> members inverse Employee::deptfloat totsalary() raise(Uncalculable);
}
6005/05/2009
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::leLivrerelationship list<Auteur> lesAuteurs
inverse Auteur::lesLivresinteger nbExemplairesDisponibles();
};
6105/05/2009
Clésn Clé = groupe d ’attributs
n Clés candidates¨ spécification de plusieurs clés candidates
interface Person ( key numemp){attribute string numemp;attribute string numss;attribute string name;attribute date_t birthdayattribute Addr addr;
}
interface Person ( key numemp; (numss); (name,birthday) ) { … }interface Enseignement( key (filiere,intitule);(salle,heure) ) {
6205/05/2009
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::lUtilisateurvoid 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é;
};
6305/05/2009
Héritage d'interface (:) et de cl asse (extends)
interface Person {attribute string name;attribute date_t birthdayattribute Addr addr;
}interface Employee : Person {
attribute int basesalary;float salary();
}interface Manager : Employee {
attribute int bonus;float salary();
}
6505/05/2009
Littéral structurén typedef : Définition de types litéraux
typedef int Franc, Euro;typedef struct { string street, string city, int zip } Addr;typedef enum Couleur {rouge, rose, blanc};
n module¨ regroupement dans le même espace de nom
module DRH {typedef struct { ... } Addr ;interface Person { …; Addr addr; ... };};module Marketing {typedef struct { ... } Addr ;interface Customer { …; Addr deliv_addr; Addr bill_addr; ... };};
6605/05/2009
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 : Integernom : Stringprénom : Stringadresse : typeDonnéesAdresse
typeDonnéesAdressenuméroCivique : IntegernuméroAppartement : IntegernomRue : StringnomVille : StringnomProvince : StringnomPays : StringcodePostal : String
<<datatype>>
6705/05/2009
Collections ODLClass Livre( extent livres key ISBN){
…attribut set<Exemplaire> lesExemplaires…
};
Class Exemplaire( extent exemplaires key idExemplaire){
…attribut Livre leLivre…
};
6805/05/2009
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…
};
6905/05/2009
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::lUtilisateurvoid setMotPasse(in String m);integer nbPrêtsEnCours();
};
7005/05/2009
Manipulation d'objets et valeurs structuréesn Création d'objets
¨ via la méthode associée à chaque classe
Declare bda Coursbda = Cours(nomC:'BDA' , cycle:2)1. crée un objet permanent de format Cours2. rend l'oid (dans la variable bda)3. si une population existe (EXTENT...) y range l'objet (dans
LesCours)
n Création de valeurs structur ées d'un type existant dans le schéma (TYPEDEF)a = Tadresse(rue:'chemin des oiseaux' ,
numéro:'10A' ,ville:'Morges' , NPA: 1033)
7105/05/2009
Manipulation d ’objets et valeurs structurées n Création de valeurs structurées d'un type
nouveau¨ via les constructeurs ST RUCT, SET, LIST ...
b = STRUCT(nomCours:'BDA' , nomprof:'C. Parent' ,nomAssistant:'A. Osterwalder' , faculté:'HEC' , étudiants:SET ('P. Rochat', 'A. Muller', 'N. Cullot', ….))
7205/05/2009
Exercice : Création de structure de BD PermaForm
05/05/2009 73
OQLObject Query language
7405/05/2009
Généralités
n OQL s'appuie sur ODMG/ODLn OQL est proche de SQL 92 avec en + :
¨ objets complexes¨ identité¨ path expressions¨ polymorphisme¨ invocation d'opérations¨ "late binding"
7505/05/2009
Généralités
n Gestion de sets, bags, lists, arrays, structuresn Résultat d'une requête = type ODL => possibilit é
d'imbrication de requêtesn simplicité d'utilisationn langage déclaratifn sémantique formelle définie simplementn OQL peut être appel é dans un programme et
réciproquement OQL peut faire appel à des programmes externes
7605/05/2009
SELECT de base
n Le titre des livres parus après 1999SELECT 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(); };
7705/05/2009
Clause DISTINCT
n Le titre et l'année des livres parus après 1999 sans doublons
SELECT DISTINCT l.titre, l.annéeParutionFROM livres lWHERE l.annéeParution > 1999
type du résultat :litteral set<struct<titre:String,annéeParution integer>>
7805/05/2009
Constructeur STRUCT
n Le titre et l'annéeParution des livres parus après 1999
n Équivalent à
SELECT STRUCT(titre:l.titre, annéeParution:l.annéeParution)FROM livres AS lWHERE l.annéeParution > 1999
type du résultat :litteral bag<struct<titre:String,annéeParution:integer>>
SELECT l.titre,l.annéeParutionFROM livres AS lWHERE l.annéeParution > 1999
type du résultat :litteral bag<struct<titre:String,annéeParution:integer>>
7905/05/2009
Sélection d'objets de la BD
n Collection de références aux objets de la classe Livre parus après 1999
n Peut ensuite manipuler les objets persistants
SELECT lFROM livres lWHERE l.annéeParution > 1999
type du résultat :litteral bag<Livres>
8005/05/2009
Requête sans SELECT
n Collection des livreslivres
type du résultat :set<Livres>
8105/05/2009
Expressions de chemins
n Le titre de l ’objet unLivre (type Livre)
n Exemple avec une opération
unLivre.titretype du résultat :String
unLivre.nbExemplaires()type du résultat :litteral integer
8205/05/2009
Expressions de chemins (suite)
n Naviguer une association
n En cascade
unLivre.lesExemplairestype du résultat :set<Exemplaire>
unLivre.laCatégorie.leParent
type du résultat :Catégorie
8305/05/2009
Navigation à travers une collectionn Les idExemplaires d'un livre
n Les idExemplaire des livres de l'année 2000
SELECT e.idExemplaireFROM unLivre.lesExemplaires AS e
type du résultat :litteral bag<String>
SELECT e.idExemplaireFROM livres AS l, l.lesExemplaires AS eWHERE l.annéeParution = 2000
type du résultat :litteral bag<String>
8405/05/2009
Navigation à travers une collection (suite)n Le ISBN des l ivres actuel lement
empruntés par le membre dont le idUtilisateur = ‘unId’SELECT p.lExemplaire.leLivre.ISBNFROM membres AS m, m.lesPrêts AS pWHERE m.idUtilisateur = "unID" AND
P IN prêtsEnCours
type du résultat :litteral bag<String>
8505/05/2009
SELECT enchâss é dans le FROMn les idExemplaire des livres de l'an 2000SELECT e.idExemplaireFROM (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>
8605/05/2009
SELECT enchâss é dans la spécification du résultat d'un SELECT
n Les ISBN des l ivres 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 lWHERE l.annéeParution = 2000
type du résultat :litteral bag<STRUCT<ISBN:String,emprunts:set<Exemplaire>>
8705/05/2009
Extraction de l'élément d'un singleton (ELEMENT)
n Retourner l ’objet de la classe Livre qui correspond au ISBN = ‘111-11111-11’
element(SELECT l FROM livres AS lWHERE l.ISBN = "111-11111-11"
)
8805/05/2009
Constructeurs d'objetsn 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::lesExemplairesrelationship 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())
8905/05/2009
Comparaison par identit é ou par valeurn Le = compare les OID des objets
9005/05/2009
Quantificateurs FOR ALL et EXISTSn Les livres dont tous les exemplaires sont
empruntés
n Les livres dont au moi ns un exemplaire est emprunt é
SELECT lFROM livres AS lWHERE FOR ALL e IN l.lesExemplaires : e.statut = "prêté"
type du résultat :litteral set<Livre>
SELECT lFROM livres AS lWHERE EXISTS e IN l.lesExemplaires : e.statut = "prêté"
type du résultat :litteral set<Livre>
9105/05/2009
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
9205/05/2009
16.3.15 Fonctions de groupe
n Le nombre moyen d’exemplaires disponibles par livreAVG (SELECT l.nbExemplairesDisponibles() FROM livres AS l)
9305/05/2009
Partition avec GROUP BY
n Le nombre d’exemplaires disponibles par années de parution pour les années où le nombre dépasse 100SELECT année,nombreDisponibles : SUM(SELECT l.nbExemplairesDisponible() FROM partition)FROM livres AS lGROUP BY année : l.annéeParutionHAVING SUM(SELECT l.nbExemplairesDisponible() FROM partition) > 100
type du résultat :litteral bag<struct<année : integer, nombreDisponibles : integer>>
9405/05/2009
Tri avec ORDER BY
n Les livres triés par ordre descendant (DESC) de l ’année de parution et par ordre ascendant (ASC) du ti treSELECT lFROM livres AS lORDER BY l.annéeParution DESC, l.titre ASC
type du résultat :litteral set<Livre>
9505/05/2009
Diagramme pour la structure des données de FormaPerm
9605/05/2009
Syntaxe ODMG
Class Personne( Extent Personnes )
{ Attribute String nom;Attribute list String prenom;Attribute String adresse;Void Afficher()
}
9705/05/2009
Syntaxe ODMGClass Etudiant : Personne( Extent Etudiants
Key n°E ){ Attribute integer n°E;Attribute date dateN ;Attribute List Struct Etude {Integer année; String diplôme }etudes; Relationship List<CoursObtenu> cours-obtenus
Inverse CoursObtenu::étudiant ;Relationship Set Cours cours-suivis
Inverse Cours::étudiants ;Void afficher() ;Void inscrire (Cours nvcours ) ;Void aobtenu (Cours nvcours , Float note ,
Integer année ) ;Integer age()
}
9805/05/2009
Syntaxe ODMG
Class CoursObtenu{ Attribute Integer année;Attribute float note ;Relationship Cours cours
Inverse Cours::réussi ;Relationship Etudiant étudiant
Inverse Etudiant::cours-obtenus}
9905/05/2009
Syntaxe ODMGClass Enseignant : Personne( Extent Enseignants ){ Attribute integer tél;Attribute Enum ( "prof", "Assist" ) statut ;Attribute Struct RensBq {String banque ;
String agence ;Integer compte } rens.banc;
Relationship Set Cours cours-assurés Inverse Cours::prof ;
Void afficher() ;Void assure (Cours nvcours ) ;Void nassureplus (Cours oldcours )}
10005/05/2009
Syntaxe ODMGClass Cours( Extent LesCours
Key nomC ){ Attribute String nomC ;
Attribute Integer cycle ;Relationship Enseignant prof
Inverse Enseignant::cours-assurés ;Relationship Set Etudiant étudiants
Inverse Etudiant::cours-suivis ;Relationship Set Cours a-prérequis
Inverse Cours::est-prérequis ;Relationship Set Cours est-prérequis
Inverse Cours::a-prérequis ;Void Afficher() ;Integer nb-inscrits()
}