Bases de données Orientées-Objet Talel.Abdessalem@enst.fr 1 Concepts objet Notion d objet Identité Classes, attributs et méthodes Héritage et polymorphisme Modèles de persistance 2
Notion d Objet Vu de l extérieur : une boite avec des boutons Vu de l intérieur : des données + la mécanique liée aux boutons modifier_resa demander_resa Tarif : 2000 places_dispo : 13 Inscrits : {Dupont, Durand, } demander_resa { } modifier_resa{ } 3 Identité d objet Chaque objet a un Oid indépendant de sa valeur : Objet (Oid, valeur) Egalité et identité deux concepts différents Partage d objet et objet cyclique Les Oids sont gérés par le système et ne sont pas accessibles à l utilisateur 4
Classes Un objet est associé à une classe Une classe définit la structure (type) et le comportement (méthodes) des objets qui lui sont associés Exemple de définition de classe : Class Ligne numéro : integer; trajet: List (Station) method extremes():set (Station) ; Class Station nom : string; lignes : set(ligne); method suivante(ligne): Station; précedente (Ligne): Station; 5 Héritage La sous-classe hérite des attributs et des méthodes de la super-classe La méthode afficher_coef n est applicable qu aux instances de Trajet_réduit Le corps de la méthode claculer_tarif peut être redéfinie dans Trajet_réduit pour tenir compte de la réduction Liaison dynamique : le SGBD appelle la bonne méthode claculer_tarif en fonction de l objet manipulé Super-classe Trajet_train numéro : integer, départ : date, arrivée : date method reserver, calculer_tarif : real; Sous-classe Trajet_réduit inherit Trajet_train coef : real method afficher_coef; Héritage multiple possible Avantages : modélisation plus compacte et mieux structurée. Minimise les modifications du code. 6
Persistance? Quels objets persistent dans la BD à la suite de l application qui les a fait naître? Persistance explicite/implicite Persistance implicite : Support de stockage Classes d objets persistants Racines de persistance 7 Langages La force des SGBD relationnels vient de la normalisation des SQL, ESQL et SQL/CLI Quels langages pour les SGBD OO? diversité des modèles et des langages Effort de normalisation OQL de l ODMG ou SQL3 de l ANSI? liens avec les langages de programmation OO impact sur le développement d applications 8
Méta-modèle du modèle ODMG Class support Instantiate 1 key_list extent_name super_class * 1 extends * Operation signature Object * * has Property invoke return return_abnormally OID has_name? names class create delete exits same_has? Attribute attr_name attr_type set_value get_value Traversal path path_name to_cardinality to_type traverse creator_iterator Relationship + Type, littéraux, interface,... 2 define 1 add_member remove_member 9 Exemple de base Appartient Habite Voiture nveh couleur marque km rouler() Possède Personne nss nom prenom datenais vieillir() dormir() Loge Appart. étage no rue code ville Inférieur Supérieur Employé fonction salaire primes travailler() Buveur type état boire() Boire Bu_par Vin cru millésime degré qualité EmployéBuveur 10
Exemple de définition Interface Personne { // interface abstraite pour implémentation dans classe attribute string nss ; attribute string nom ; attribute string prenom ; attribute date datenaissance; relationship Appart habite inverse Appart::loge; // relationship relationship Voiture Possede inverse Voiture::Appartient; short vieillir(); void dormir() short age(); }; 11 Exemple (suite) class Employé : Personne(extent Employé key nss) //classe avec extension de personne + { attribute enum fonct{ingénieur, secrétaire, analyste, programmeur} fonction; attribute float salaire ; attribute list<float> primes ; //attribut multi-valué relationship Employé inferieur inverse supérieur; relationship Employé supérieur inverse inférieur; void travailler(); }; 12
LE LANGAGE OQL Permettre un accès facile à une base objet via un langage interactif autonome par intégration dans C++ ou Smalltalk ou Java Offrir un accès non procédural permettre des optimisations automatiques (ordonnancement, index, ) garder une syntaxe proche de SQL 92 Rester conforme au modèle de l'odmg application d'opérateurs aux collections extensions ou imbriquées permettre de créer des résultats littéraux, objets, collections, Supporter des mises à jour limitées via les méthodes 13 Concepts nouveaux Expression de chemin mono-valuée Séquence d'attributs ou associations mono-valués de la forme X1.X2 Xn telle que chaque Xi à l'exception du dernier contient une référence à un objet ou un littéral unique sur lequel le suivant s'applique. Utilisable en place d'un attribut SQL Collection dépendante Collection obtenu à partir d'un objet, soit par ce qu'elle est imbriquée dans l'objet ou pointée par l'objet. Utilisable dans le FROM 14
Forme des Requêtes Forme générale d'une requête Expressions fonctionnelles mixer avec Bloc select étendu Select [<type résultat>] (<expression> [, <expression>]...) From x in <collection> [, y in <collection>]... Where <formule> Type résultat automatiquement inféré par le SGBD tout collection est possible (bag par défaut) il est possible de créer des objets en résultats Syntaxe très libre, fort contrôle de type 15 Requête Simple Calcul d'une expression ((string) 10*5/2) "toto" ===> string Accéder un attribut d'un objet nommé Ma_voiture.couleur ===> litteral string 16
Parcours d'association monovaluées avec sélection de structure (défaut) select struct (name: b.nom, city: b.habite.adresse.ville) from b in buveurs where b.type = 'gros' ===> littéral bag <struct(name,city)> 17 Parcours d'association multivaluées Utilisation de collections dépendantes select b.nom, b.prenom from b in buveurs, v in b.boire where v.cru = "volnay" ==> litteral bag<struct<nom:string,prenom:string> 18
Résultats Imbriqués Imbrication des select au niveau select select distinct struct (nom : e.nom, inf_mieux_payes : select i from i in e.inferieur where i.salaire > e.salaire)) from e in employes ===> litteral de type set <struct (nom: string, inf_mieux_payes : bag <employes>)> et aussi au niveau du FROM (requête collection) 19 Invocation de méthodes En résultat ou dans le critère select distinct e.nom, e.habite.adresse.ville, e.age() from e in employes where e.salaire > 10000 and e.age() < 30 ===> litteral de type set <struct> 20
Création d'objets Expressions de constructions Si C est le nom d'une classe, p1,..., pn des propriétés de la classe et e1,..., en des expressions alors C(p1 : e1,..., pn : en) est une expression de construction Création d'objet employe (nss:15603300036029, nom:"jean", salaire: 100000) employe (select struct(nss:b.nss, nom:b.nom, salaire: 4000) from b in buveurs where not exist e in employes : e.nss=b.nss ) 21 Définition d'objets via Requêtes Définition de macros Define <nom> as <question> permet de définir un objet de nom <nom> calculé par la question Exemple: Define Cesars as Select b From b in Buveurs Where b.prenom = "Jules" 22
Quantification Quantificateur universel for all x in collection : predicat(x) Exemple: for all b in Buveurs : b.age < 18 Quantificateur existentiel exists x in collection: Predicat(x) Exemple: exists v in Employés.Possède : v.marque = "Renault" 23 Calculs d'agrégats Similaire à SQL avec possibilité de prédicats select e from e in employes group by (bas : e.salaire < 7000, moyen : e.salaire >= 7000 and e.salaire < 21000, haut : e.salaire >= 21000) ===>struct<bas: set(emp.),moyen:set(emp.),haut:set(emp.)> 24
Expressions de Collections Conversion de collections element (select v.marque from v in voitures where v.numero = "120 abc 75") ===> string Applatissage des collections flatten (select b.nom, select v.millesime from v in b.boire where v.cru = "volnay" from b in buveurs) 25 Développement d'applications, l exemple O 2 O2C méthodes et applications - langage propriétaire O2 et C Assurer manuellement le mapping entre classes O2 et types C. O2 et C++ Mapping transparent des classes entre C++ et O2 26
Fonction O2Query et O2C o2query ( <resultat>, <requete> [, <liste d'expressions>]) o2 Station nouvelle_station; o2 set(station) les_stations; o2query ( les_stations, "SELECT s FROM s in les_stations WHERE s->nom = $1", nouvelle_station->nom); if (count (les_stations)) display ("Il existe déjà une station avec ce nom"); 27 SQL3 Nouvelle norme SQL de l ANSI Multiples facettes : Un langage de définition de types Un langage de programmation Un langage de requêtes Un langage temporel... Données complexes, objet-relationnel Adeptes : OO : Illustra, UniSQL, Versant Relationnel : Ingres, Oracle, DB2, Informix 28
SQL3 : concepts objet Extensibilité des types de données Définition de types abstraits Possibilité de types avec ou sans OID Support d objets complexes Constructeurs de types (tuples, set, list, ) Identité d objet et partage d objet Héritage Définition de sous-types Définition de sous-tables 29 SQL3 : définition de types Un type avec référence CREATE TYPE WITH OID TELEPHONE (pays VARCHAR, zone VARCHAR, num number(10), description CHAR(20)) Un type sans référence CREATE TYPE PERSONNE (nss NUMBER, nom VARCHAR, prénoms LIST(VARCHAR), tel SET(TELEPHONE)) Un sous-type CREATE TYPE EMPLOYE UNDER PERSONNE (salaire NUMBER(10,2), ancienneté DATE) 30
SQL 3 : relations imbriquées Une table peut posséder des attributs d'un type abstrait Un tuple peut contenir des références ou des valeurs complexes Possibilité d'utiliser un type prédéfini CREATE TABLE Films OF Film ; Possibilité de définir un nouveau type CREATE TABLE Acteurs OF NEW TYPE Acteur (nom VARCHAR, age NUMBER) ; Possibilité de définir des sous-tables CREATE TABLE Films_Français UNDER Films (realisateurs VARCHAR) 31 SQL3 : utilisation des fonctions Fonctions SELECT a.nom FROM Bateau a, Bateau b WHERE b.nom = Grand Bleu' and distance(a.position,b.position) < 1 Opérateurs SELECT a.nom FROM Bateau a, Bateau b WHERE b.nom = Grand Bleu' and contenu(a.position, zone(b.position, 1)) 32
SQL 3 : exemple de relations imbriquées Films N Budget Réalisateur Acteurs Dépenses 2 4MF Besson Nom Jean Julie Age 55 40 Num Montant Motif 1 2600 Bande 2 8700 Hôtel 3 15400 Caméra 5 5MF Chouraki Nom Sylvie Pierre Age 45 29 Num Montant Motif 5 3000 Bande 7 4000 Hôtel 33 SQL 3 : accès navigationnel Accès en relationnel Accès en objet-relationnel SELECT Films.n, Films.budget FROM Acteurs, Films, Joue WHERE Acteurs.nom = Joue.acteur AND Joue.film = Films.n AND Acteurs.nom = Besson SELECT Films.n, Films.budget FROM Films f WHERE f.acteurs.nom = Besson 34
Résumé Concepts OO plus riches (Objet, identité, héritage, etc.) Langages navigationnels et une syntaxe à la SQL Deux candidats à la normalisation ODMG, OQL : pure objet, manque une norme pour le procédural OQL et pas de OQL CLI SQL3 : référence de l objet-relationnel, un pas vers l objet 35