Bases de données orientées objets Le langage de requêtes d'odmg : OQL

Documents pareils
BASES DE DONNEES ORIENTEES OBJETS BDA10.1

Bases de Données Relationnelles. Le Modèle Relationnel

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Les bases de données

Langage SQL : créer et interroger une base

Le langage SQL Rappels

1 Introduction et installation

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Hala Skaf-Molli. Nancy-Université 14 mai 2007

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

A QUOI SERVENT LES BASES DE DONNÉES?

Introduction aux Bases de Données

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Bases de données avancées Introduction

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Bases de Données relationnelles et leurs systèmes de Gestion

Mysql. Les requêtes préparées Prepared statements

OpenPaaS Le réseau social d'entreprise

16H Cours / 18H TD / 20H TP

Bases de données relationnelles

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Java DataBaseConnectivity

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

PHP 5. La base de données MySql. A. Belaïd 1

TD n 10 : Ma première Base de Données

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

TP Bases de données réparties

Modélisation de bases de données : Le modèle relationnel

A QUOI SERVENT LES BASES DE DONNÉES?

SQL Historique

Introduction au Système de Gestion de Base de Données et aux Base de Données

Les Bases de Données et l Objet Introduction

Compétences Business Objects

Vincent Augusto

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Introduction aux Bases de Données 2004/2005

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Oracle Décisionnel : Modèle OLAP et Vue matérialisée D BILEK

Notes de cours : bases de données distribuées et repliquées

Java et les bases de données

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

Module BD et sites WEB

Intégrité des données

WEA Un Gérant d'objets Persistants pour des environnements distribués

Modélisation Conceptuelle. Partie 2: Le modèle Entité-Association

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

INTRODUCTION AU DATA MINING

Systèmes de Gestion de Bases de Données

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Olivier Mondet

Architectures d'intégration de données

Le Langage SQL version Oracle

CHAPITRE 1. Introduction aux bases de données

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

TP 8: LES OPERATEURS ENSEMBLISTES

Bases de Données Avancées

Partie II Cours 3 (suite) : Sécurité de bases de données

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

Bases de données Page 1 de 11. Bases de données. Prof. : Dzenan Ridjanovic

II. Modèle conceptuel le modèle entité-association

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

Bases de données et sites WEB

BTS/CGO P10 SYSTEME INFORMATION Année

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Modèle Entité/Association

Encryptions, compression et partitionnement des données

SQL Parser XML Xquery : Approche de détection des injections SQL

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

OBJECTIFS ET ARCHITECTURE DES SGBD

1. Introduction. Introduction au langage SQL3 (SQL 99) Plan. Sources du cours. 1. Introduction La norme SQL3 et ses composants

CREATION WEB DYNAMIQUE

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Introduction à JDBC. Accès aux bases de données en Java

OCL - Object Constraint Language

COMPRENDRE LES DIFFERENTS TYPES DE CONNEXION LORS DE LA

Cours Bases de données 2ème année IUT

Cours 4 : Agrégats et GROUP BY

SOMMAIRE. Travailler avec les requêtes... 3

1. Base de données SQLite

Modèle conceptuel : diagramme entité-association

Les Entrepôts de Données

Bases de Données. Stella MARC-ZWECKER. Maître de conférences Dpt. Informatique - UdS

2 Serveurs OLAP et introduction au Data Mining

LES ACCES ODBC AVEC LE SYSTEME SAS

Transcription:

Bases de données orientées objets Le langage de requêtes d'odmg : OQL BDA10.1

Introduction OQL : Object Query Language Langage de requêtes standard pour BD OO défini par ODMG Objectifs : langage déclaratif optimisation assurée par le SGBD requêtes interactives ( à la SQL*Plus) ET requêtes dans les programmes / méthodes manipuler les éléments et les collections utiliser pleinement les concepts OO structure complexe hiérarchie de généralisation / spécialisation méthodes BDA10.2

Introduction (suite) Langage de requêtes uniquement insertions, suppressions et mises à jour faites par des méthodes Syntaxe similaire à celle de SQL MAIS non compatible avec SQL Encapsulation non respectée NB Les exemples portent sur la BD FormaPerm BDA10.3

Rappel : FormaPerm en OO LesPersonnes Personne nom listeprénoms adresse Tadresse rue numéro ville NPA diplôme année LesEtudiants n E daten études liste o:n liste cours-obtenus Etudiant 0:n cours-suivis Enseignant LesEnseignants tél statut rensbanc 0:n cours-assurés banque compte agence étudiant 1:1 CoursObtenu note année étudiants prof 0:n 1:1 1:1 0:n est prérequis cours Cours réussi 0:n 0:n a prérequis nomc cycle LesCours BDA10.4

Différents types de requêtes Comme en BD relationnelle : SELECT FROM WHERE Accès direct à des éléments nommés NAME Phil : Etudiant variable permanente Phil = Etudiant(nom: 'Rochat', prénoms: LIST('Philippe') ) création d'un objet permanent nommé. Exemples de requêtes : Phil objet (non imprimable) Phil.nom valeur (imprimable) Phil.age() appel de méthode de résultat valeur LesEtudiants collection d'objets BDA10.5

Points d'entrée des requêtes Définir où chercher : Dans les populations associées aux classes (clause EXTENT ) nom de l'étudiant de numéro 111 : SELECT e.nom FROM e IN LesEtudiants WHERE e.n E = 111 A partir des variables nommées Phil.nom noms des cours suivis par Phil : SELECT c.nomc FROM c IN Phil.cours_suivis BDA10.6

Résultat d'une requête Fermeture du langage requête1 => résultat1 => requête2 sur résultat1 Type du résultat : choix entre : objet valeur simple structurée En utilisant les constructeurs STRUCT, SET, LIST.. l'utilisateur peut créer de nouvelles valeurs structurées BDA10.7

Résultat d'une requête (2) Type du résultat : élément collection La sémantique de la requête définit si le résultat est un élément ou une collection et son genre (SET, BAG ) SELECT e FROM e IN LesEnseignants WHERE e.statut = 'assist' => SET d'objets Enseignant Requête : villes des enseignants SELECT e.adresse.ville FROM e IN LesEnseignants BAG de valeurs simples de type STRING (avec doubles) BDA10.8

Résultat d'une requête (3) Requête : villes des enseignants sans double SELECT DISTINCT e.adresse.ville FROM e IN LesEnseignants SET de valeurs simples de type STRING (sans double) Requête : nom et ville de chaque enseignant valeur structurée => mot clé STRUCT SELECT STRUCT(nom: e.nom, ville: e.adresse.ville) FROM e IN LesEnseignants => BAG de valeurs complexes de type STRUCT(nom: STRING, ville: STRING) ATTENTION : La création explicite d'une nouvelle structure complexe (STRUCT...) est obligatoire (nom: e.nom, ville: e.adresse.ville) n'est pas d'un type connu d'oql BDA10.9

Résultat d'une requête (4) Requête : pour chaque enseignant donner son nom et les noms de ses cours SELECT STRUCT( nom: e.nom, cours: (SELECT c.nomc FROM c IN e.cours_assurés)) FROM e IN LesEnseignants BAG de valeurs complexes de type STRUCT(nom: STRING, cours: SET(STRING)) NB Ces structures comportant des multivalués seraient impossibles en relationnel BDA10.10

Manipulation d'objets et valeurs structurées Création d'objets via la méthode associée à chaque classe bda = Cours(nomC:'BDA', cycle:2) 1) crée un objet permanent de format Cours 2) rend l'oid (dans la variable bda) 3) si une population existe (EXTENT...) y range l'objet (dans LesCours) 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) BDA10.11

Manipulation de valeurs structurées (2) Création de valeurs structurées d'un type nouveau via les constructeurs STRUCT, SET, LIST... b = STRUCT(nomCours:'BDA', nomprof:'c. Parent', nomassistant:'a. Osterwalder', faculté:'hec', étudiants: SET ('P. Rochat', 'A. Muller', 'N. Cullot',.)) Accès à un attribut composant d'un STRUCT Notation pointée composé_monovalué. composant Phil.adresse.ville OK Phil.études n'est pas de type STRUCT, mais de type LIST, donc Phil.études.diplôme N'EST PAS CORRECT BDA10.12

Accès à un composant d'un composé multivalué solution générale : variable IN collection 1) variable IN composé_multivalué => la variable parcourt la collection 2) variable.composant Le (les) diplôme que Phil a eu en 2000 SELECT x.diplôme FROM x IN Phil.études WHERE x.année = 2000 BDA10.13

Les deux utilisations de IN FROM : déclaration de variable sur une collection FROM e IN LesEtudiants FROM x IN Phil.études FROM x IN (instruction SELECT) WHERE : condition élémentaire élément IN collection Exemple : noms des cours suivis par Phil : SELECT c.nomc FROM c IN Phil.cours_suivis SELECT c.nomc FROM c IN LesCours WHERE Phil IN c.étudiants BDA10.14

Parcours des liens de composition De l'objet composé à l'objet composant : notation pointée (comme pour attribut complexe) Jointures très faciles dans le sens du lien Objet composé monovalué => notation pointée Nom du professeur du cours BD SELECT c.prof.nom FROM c IN LesCours WHERE c.nomc = 'BD' Objet composé multivalué => variable Noms des étudiants inscrits au cours BD SELECT e.nom FROM c IN LesCours, e IN c.étudiants WHERE c.nomc = 'BD' c.étudiants.nom N'EST PAS CORRECT BDA10.15

Parcours des liens de composition (2) Noms des cours suivis par Phil et Annie Muller (Annie et Phil doivent suivre tous les deux ces cours) SELECT c.nomc FROM c IN Phil.cours_suivis WHERE c IN ( SELECT x FROM e IN LesEtudiants, x IN e.cours_suivis WHERE e.nom='muller' AND e.prénoms=list('annie') ) BDA10.16

Test d'égalité et d'identité LesPersonnes Personne AVS nom prénom possède 0:N habite 0:1 Logement type surface nbpièces Personnes qui possèdent le logement où elles habitent SELECT p FROM p IN LesPersonnes, x IN p.possède WHERE p.habite = x test des oids Personnes qui possèdent un logement identique à celui où elles habitent SELECT p test des valeurs simples uniquement FROM p IN LesPersonnes, x IN p.possède WHERE p.habite? x AND p.habite.nbpièces = x.nbpièces AND p.habite.type = x.type AND p.habite.surface = x.surface BDA10.17

Hiérarchies de généralisation / spécialisation Accès à une sur-classe SELECT p FROM p IN LesPersonnes WHERE p.adresse.ville='lausanne' Résultat =? Tous les objets de la sur-classe et des sous-classes format sur-classe (format Personne) format hétérogène (Personne, Etudiant, Enseignant) Objets de la sur-classe uniquement (= les personnes qui ne sont ni étudiantes ni enseignantes) La réponse dépend du SGBD OO OQL : Tous les objets en format homogène (format de la sur-classe) BDA10.18

Méthodes Partout où un objet/valeur de type X est attendu une méthode à résultat de type X peut être employée nom et âge des étudiants SELECT STRUCT(nom: e.nom, âge: e.age()) FROM e IN LesEtudiants étudiants de moins de 20 ans SELECT e FROM e IN LesEtudiants WHERE e.age() < 20 BDA10.19

Format général d'une requête SELECT SELECT [ DISTINCT ] <définition du résultat> FROM variable 1 IN collection 1, [ WHERE <condition> ] <définition du résultat> : expression qui désigne un objet / une collection d'objets SELECT p FROM p IN LesEnseignants SELECT p.cours_assurés FROM p IN LesEnseignants désigne une valeur / collection de valeurs SELECT p.nom FROM p IN LesEnseignants SELECT p.prénoms FROM p IN LesEnseignants construit une valeur complexe SELECT STRUCT (nom:e.nom, cours : e.cours_suivis, cours2 : (SELECT c FROM e.cours_suivis WHERE c.cycle=2) ) FROM e IN LesEtudiants ==> STRUCT(nom:STRING, cours:set(cours), cours2:set(cours)) BDA10.20

Format général d'un SELECT (2) SELECT [ DISTINCT ] <définition du résultat> FROM variable 1 IN collection 1, [ WHERE <condition> ] collection i : collection quelconque de la base de données population : SELECT p FROM p IN LesEnseignants WHERE autre collection : FROM p IN LesEnseignants, c IN p.cours_assurés requête : donner les noms des cours de cycle 2 suivis par Phil avec le nom du prof du cours SELECT STRUCT(nomcours : c.nomc, nomprof : c.prof.nom) FROM c IN (SELECT x FROM x IN Phil.cours_suivis WHERE x.cycle=2) BDA10.21

Format général d'un SELECT (3) condition condition élémentaire (condition) condition AND condition condition OR condition condition élémentaire expression 1 opérateur_comparaison expression 2 Exemples : (e est un Etudiant) e.nom = 'Muller' e.age() < 20 'Annie' IN e.prénoms COUNT(e.prénoms) > 2 avec un quantificateur EXISTS x IN e.études : x.année = 2000 FOR ALL x IN e.études : x.année > 2000 BDA10.22

Sémantique d'un SELECT SELECT [ DISTINCT ] <définition du résultat> FROM variable 1 IN collection 1, [ WHERE <condition> ] comme pour les requêtes SELECT de SQL résultat = ø initialisation Balayages imbriqués des collections du FROM SI <condition> = vrai ALORS ajouter à résultat un élément structuré selon <définition du résultat> FIN des balayages imbriqués SI DISTINCT est présent ALORS éliminer les doubles du résultat BDA10.23

Fonctions d'agrégation COUNT(collection) MIN(collection) MAX(collection) AVG(collection) SUM(collection) COUNT(Phil.études) => nombre de diplômes de Phil COUNT(LesEtudiants) => nombre d'étudiants COUNT(SELECT p FROM p IN LesPersonnes WHERE p.nom='rochat') => nombre de Rochat dans la base BDA10.24

Fonctions d'agrégation (suite) Pour chaque étudiant, donner son nom, le nombre total de ses diplômes, le nombre de diplômes obtenus en 2003, et la première année où il a obtenu un diplôme. SELECT STRUCT( nom : e.nom, nbdiplomes : COUNT(e.études), nbdiplomes03 : COUNT( SELECT c FROM c IN e.études WHERE c.année=2003), premièreannée : MIN( SELECT c.année FROM c IN e.études) ) FROM e IN LesEtudiants BDA10.25

Quantificateur existentiel Dans la condition du WHERE on peut utiliser la condition élémentaire : EXISTS variable IN collection : condition 0 (variable) déclaration d'une variable locale (EXISTS ) est vrai ssi il existe au moins un élément de la collection qui satisfait condition 0 (variable) Noms des étudiants qui ont obtenu un cours avec 6 SELECT e.nom FROM e IN LesEtudiants WHERE EXISTS x IN e.cours_obtenus : x.note=6 BDA10.26

Quantificateur universel Dans la condition du WHERE on peut utiliser la condition élémentaire : FORALL variable IN collection : condition 0 (variable) déclaration d'une variable locale (FORALL ) est vrai ssi tous les éléments de la collection satisfont condition 0 (variable) Noms des étudiants qui ont obtenu tous leurs cours avec 6 SELECT e.nom FROM e IN LesEtudiants WHERE FORALL x IN e.cours_obtenus : x.note=6 AND COUNT(e.cours_obtenus)>0 BDA10.27

Instruction GROUP BY Objectif : partitionner une collection en sousgroupes ayant même valeur pour tel(s) attribut(s) et créer une valeur (complexe) pour chaque sousgroupe (par agrégations) Exemples: Pour chaque cycle : nombre de cours Pour chaque banque : nombre de profs et d'assistants Pour chaque ville : nombre d'étudiants, de profs, d'assistants y habitant GROUP variable IN collection BY (nom 1 : expression 1, ) critères de partition [ WITH (nom' 1 : expression' 1, )] calcul de résultats agrégés pour chaque sous-groupe BDA10.28

Instruction GROUP BY (2) GROUP variable IN collection BY (nom 1 : expression 1, ) [ WITH (nom' 1 : expression' 1, ) ] Déclare une variable locale Partitionne la collection en sous-ensembles de même valeur pour expression 1, chaque sous-groupe s'appelle PARTITION Crée une valeur (complexe) résultat par sousgroupe de structure : STRUCT ( nom 1 : expression 1, nom' 1 : expression' 1, ) BDA10.29

Instruction GROUP BY (3) GROUP x IN LesO BY (a : x.a). Opartitionné WITH ( b 1 : COUNT(partition), b 2 : COUNT(SELECT y FROM y IN partition WHERE y.b > 33) b 3 : MAX (SELECT z.c FROM z IN partition WHERE z.b = 33) ) a partition LesO O Id A B C Résultat une instance par valeur de A a b 1 b 2 b 3 BDA10.30

Instruction GROUP BY (4) Pour chaque banque : nombre de profs et d'assistants GROUP p IN LesEnseignants BY ( banque : p.rensbanc.banque ) WITH (nbprofs : COUNT (SELECT x IN partition WHERE x.statut = 'prof') nbassist : COUNT (SELECT x IN partition WHERE x.statut = 'assist') ) Résultat : ensemble de valeurs complexes STRUCT (banque: STRING, nbprofs: INT, nbassist: INT) BDA10.31

Opérateurs ensemblistes collection 1 UNION collection 2 collection 1 EXCEPT collection 2 collection 1 INTERSECT collection 2 Les éléments doivent être de types compatibles même type ou sur-type commun => comparaison sur la partie commune Les collections peuvent être des ensembles ou des multiensembles Dans le cas de collections d'objets, la comparaison peut se faire selon (cela dépend du SGBD OO): les valeurs les oids OQL compare les oids BDA10.32

Opérateurs ensemblistes (2) Cours suivis par Phil ou (inclusif) Annie Muller Phil.cours-suivis UNION (SELECT c FROM e IN LesEtudiants, c IN e.cours_suivis WHERE e.nom = 'Muller' AND e.prénoms = LIST('Annie') ) BDA10.33

Conclusion OQL : langage de requêtes pour BD OO déclaratif => requêtes optimisées par le SGBD compatible avec les langages de programmation orthogonal : là où un concept de type X est requis, toute expression de résultat X peut être employée Exemple : FROM v IN collection collection peut être n'importe quelle collection population v2.attribut-multivalué (SELECT ) BDA10.34

BDA10.35 banque compte agence Personne nom prénoms adresse Etudiant Enseignant Cours prof nomc cycle étudiants n E daten diplôme année études cours-obtenus cours-suivis note année cours-assurés tél statut rensbanc est prérequis CoursObtenu 0:n 1:1 0:n 0:n a prérequis 0:n 0:n o:n liste étudiant cours réussi liste 1:1 1:1 0:n liste LesEnseignants LesEtudiants LesCours LesPersonnes Tadresse rue numéro ville NPA