4.2 Un langage de Requête pour les BD Objet : OQL. Quelques Notions

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

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

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

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

OpenPaaS Le réseau social d'entreprise

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

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Bases de données relationnelles

Bases de données avancées

A QUOI SERVENT LES BASES DE DONNÉES?

SQL Historique

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

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

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

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

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

Langage SQL : créer et interroger une base

Le langage SQL (première partie) c Olivier Caron

Olivier Mondet

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)

BASES DE DONNEES ORIENTEES OBJETS BDA10.1

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

CREATION WEB DYNAMIQUE

Encryptions, compression et partitionnement des données

Les bases de données

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Le langage SQL Rappels

Le Langage SQL version Oracle

Compétences Business Objects

Bases de SQL. Hacks 1-6 CHAPITRE UN

Quelques aspects du Relationnel-Objet du SGBD Oracle

Java DataBaseConnectivity

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

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Corrigés détaillés des exercices

Présentation Windows Azure Hadoop Big Data - BI

Devoir Data WareHouse

Gestion de base de données

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

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

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

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Bases de programmation. Cours 5. Structurer les données

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

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

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

Configurer la supervision pour une base MS SQL Server Viadéis Services

[BASE DE DONNEES MULTIMEDIA]

Bases de Données Avancées PL/SQL

1. Base de données SQLite

Paginer les données côté serveur, mettre en cache côté client

Utilitaires méconnus de StrataFrame

Génie Logiciel avec Ada. 4 février 2013

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Intégrité des données

Création et Gestion des tables

Administration des bases de données. Jean-Yves Antoine

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Exercices sur SQL server 2000

Java Licence Professionnelle CISII,

Java et les bases de données

Introduction aux Bases de Données 2004/2005

PL langage de programmation côté serveur. SQL à la base : types, expressions, requêtes

TP Contraintes - Triggers

Cours SQL. Base du langage SQL et des bases de données

Chapitre 5 : Les procédures stockées PL/SQL

OCL - Object Constraint Language

I. MySQL : Serveur et SGBD

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

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

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Les BASES de DONNEES dans WampServer

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Paris Airports - Web API Airports Path finding

Programmer en JAVA. par Tama

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

PROJET 1 : BASE DE DONNÉES REPARTIES

FileMaker 13. Guide de référence SQL

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

Recherche dans un tableau

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

Introduction à la programmation concurrente

Le Langage De Description De Données(LDD)

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

Objectifs du TP : Initiation à Access

Sécurité des applications web. Daniel Boteanu

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

Transcription:

4.2 Un langage de Requête pour les BD Objet : OQL. Quelques Notions Object Query Language Notation à la SQL. Utilisé comme extension d un langage de programmation hôte, comme C ++ ou Java. 44

Format Général d une requête OQL SELECT liste d expressions FROM liste d une ou plusieurs d\eclarations de variables. WHERE condition C de selection Une variable est déclarée en indiquant : 1. Une expression dont la valeur a un type collection, par ex. set ou bag. 2. Le nom de la variable. L expression (1) indique l extension d une classe, par exemple Films. Analogie avec une relation dans une requête SQL. 45

Notation. Soit o un objet d une classe C. Si p est un attribut, o.p est la valeur de p pou o. Si p est une relation, o.p est l objet ou la collection d objets reliés à o par p. Si p est une méthode (éventuellement avec paramètres a 1, a k ), o.p(...) est le résultat de l application de p à a. N.B : Puisque la déclaration de la méthode NomsActeurs de la classe Film est : void NomsActeurs(out Set<String>) ; si MonFilm est un objet de la classe Film, l expression MonFilm.NomsActeurs(mesStars) ne renvoi pas de valeur, mais, comme effet de bord, pose la valeur de la variable output messtars de la méthode comme étant un ensemble de noms d acteurs. 46

Exemple d une BD à objet pur illustrer OQL class Film (extent Films key (titre, année)) { attribute string titre ; attribute integer année ; attribute integer longueur ; attribute enum couleurs { couleur, noir&blanc } SorteFilm ; relationship Set<Star> acteurs inverse Star : :JoueDans ; relationship Studio appartient-à inverse Studio : :possède ; float longeurheures() raises(paslongueurtrouvée); void NomsActeurs(out Set<String>); void autresfilms (in Star, out Set<Film>) raises(pasacteur); } ; class Star (extent Stars key nom) { attribute string nom ; attribute Struct Adr {string rue, string ville } adresse ; relationship Set<Film> JoueDans inverse Film : :acteurs ; } ; class Studio (extent Studios key nom) { attribute string nom ; attribute string adresse ; relationship Set<Film> :possède inverse Film : :appartient-à; } ; 47

Exemples de Requêtes OQL SELECT m.année FROM Films m WHERE m.titre = Autant en emporte le vent Ici, Films m est une déclaration d une variable m qui a sa valeur dans l extension Films de la classe dont le nom est Film, i.e. : valeur(m) Films. 48

Exemples de Requêtes OQL, suite SELECT s.nom FROM Films m, m.acteurs s WHERE m.titre = Casablanca Dans l évaluation, tous les couples (m,s) tels que m est un film et s est un acteur de m (selon la relation acteurs de Film) sont considérés : FOR chaque m dans FILMS DO FOR chaque s dans m.acteurs DO IF m.titre = Casablanca THEN ajouter s.nom au multi-ensemble résultat. La condition après le WHERE limite l espace de recherche pour m aux films dont le titre est Casablanca. 49

Exemples de Requêtes OQL, suite SELECT DISTINCT s.nom FROM Films m, m.acteurs s WHERE m.apppartient-à.nom = Disney Comme en SQL, le mot clé DISTINCT élimine le répétitions dans le multi-ensemble (bag) résultat. 50

Exemples de Requêtes OQL, suite Liste des noms des films du studio Disney, ordonnés par leur longueur ; si deux films ont la même longueur, trier selon l ordre alphabétique des titres. SELECT m FROM Films m WHERE m.appartient-à.nom = Disney ORDER BY m.longueur, m.titre 51

Exemples de Requêtes OQL, suite On veut l ensemble des couples de stars qui vivent à la même adresse : SELECT DISTINCT Struct(star1 :s1, star2 : s2) FROM Stars s1, Stars s2 WHERE s1.adresse = s2.adresse AND s1.nom < s2.nom Pour chaque couple qui passe le test on produit un record, avec 2 champs, nommés star1 et star2. Le type de chaque champ est la classe Star. Le type du résultat final de cette requête est : Set<Struct{star1 : Star, star2 : Star}>. 52

Exemples de Requêtes OQL, suite Utilisation de sous-requêtes Une autre façon de chercher les noms des acteurs des films du studio Disney : SELECT DISTINT s.nom FROM (SELECT m FROM Films m WHERE m.appartient-à.nom = Disney ) f, f.acteurs s La variable m prend valeur dans la collections des films du studio Disney, qui est le résultat de la sous-requête : SELECT m FROM Films m WHERE m.appartient-à.nom = Disney La variable s prend valeur dans la collections des acteurs du film de Disney f. NB : un autre WHERE inutile ici. 53

5 Bases Relationnelles-Objet Le relationnel-objet sur Oracle Definition de Types Oracle permet de définir des types du style objet. Syntaxe : CREATE TYPE t AS OBJECT ( liste d attributes et methodes ); / Le slash à la fin sert pour faire traiter par Oracle la définition de type. 54

Definition de Types, suite Exemple. Définition d un type pour représenter un point par ses coordonnées : CREATE TYPE PointType AS OBJECT ( x NUMBER, y NUMBER ); / 55

Definition de Types, suite Un type à objet peut être utilisé pour déclarer d autres types à objet ou relations (au sense traditionnel, mais pas en FN1), par ex. on peut définir un type pour les lignes (géométriques) finies en indiquant les 2 extremités : CREATE TYPE LineType AS OBJECT ( end1 PointType, end2 PointType ); / 56

Definition de Types, suite On peut alors crér une relation (presque traditionnelle) qui est un ensemble de lignes, où chaque ligne a un OID : CREATE TABLE Lines ( lineid INT, line LineType ); N.B. a) Analogie avec le Set<LineType> de ODL. b) Ici, on a un attribut (LyneType) qui est de type non-atomique. 57

Elimination de Types Pour éliminer un type comme LineType : DROP TYPE Linetype; ( to drop en anglais : faire tomber, jeter.) N.B. On doit d abord effacer toutes les tables et les autres types qui utilisent ce type (dans l exemple : la table Lines). 58

Construction d objets (valeurs). Constructeurs pre-définis pour crér des valeurs, dont les noms sont les noms des types. Suite de l exemple. Pour crér une valeur de type PointType : le mot PointType (nom du type) suivi par les valeurs en (). Construction d une ligne de la table Lines ayant idéntificateur 27, qui part du point (0,0) et arrive au point (3,4) : INSERT INTO Lines VALUES(27, LineType( PointType(0.0, 0.0), PointType(3.0, 4.0) ) ); N.B. On utilise INSERT comme pour l insertion dans une table standard. On a créé aussi 2 valeurs de type PointType et 1 valeur de type LineType. 59

Déclarations de méthodes. Une déclaration de type peut inclure la déclaration de méthodes, à l aide de MEMBER FUNCTION ou MEMBER PROCEDURE. Comme en ODL, il faut spécifier les types des entrées et sortie. Suite de l exemple. On ajoute une fonction lenght au type LineType, qui produit la longueur d une ligne et la multiplie par un facteur. CREATE TYPE LineType AS OBJECT ( end1 PointType, end2 PointType, MEMBER FUNCTION length(scale IN NUMBER) RETURN NUMBER, PRAGMA RESTRICT_REFERENCES(length, WNDS) ); / La dernière instruction (PRAGMA...) dit que la méthode ne change pas la BD. (WNDS = write no database state). 60

Définition du code d une méthode Le codede la méthode est donné à part, dans une instruction CREATE TYPE BODY. Ici, on ne répéte pas les types des entrés et des sorties ( des procédures). La variable spéciale SELF dans la déf. de la méthode indique la valeur courante. Suite de l exemple CREATE TYPE BODY LineType AS MEMBER FUNCTION length(scale NUMBER) RETURN NUMBER IS BEGIN RETURN scale * SQRT((SELF.end1.x-SELF.end2.x)*(SELF.end1.x-SELF. (SELF.end1.y-SELF.end2.y)*(SELF.end1.y-SELF. ); END; END; / 61

Quelques exemples de requête relationnelle-objet Calcul du double de la longueur des chaque ligne : SELECT lineid, ll.line.length(2.0) FROM Lines ll; La requête utilise la méthode leghth. Il faut utiliser un alias (ou variable) (ici, ll) pour acceder à un champ avec la notation.. En fait, line tout seul et Lines.line ne marchent pas. Coordonnées de la prèmiere extremité de chaque ligne : SELECT ll.line.end1.x, ll.line.end1.y FROM Lines ll; 62

Types Références Si t est un type, REF t est les type des références (OID) à des valeurs de type t. Exemple : définition d un schéma de table avec REF. Une relation Lines2 dont les lignes sont des couples de références à de points : CREATE TABLE Lines2 ( end1 REF PointType, end2 REF PointType ); 63

Exemple, suite : définition du contenu dune table avec REF. Supposons qu on a déjà une table Points dont les valeurs sont de type PointType. On remplie la table Lines2 avec des valeurs qui sont toutes les lignes dont les extremités (gauche et droite) sont des éléments de la table Points : INSERT INTO Lines2 SELECT REF(pp), REF(qq) FROM Points pp, Points qq WHERE pp.x < qq.x; Attention : On ne peut pas inventer un objet qui n est pas déjà dans une relation et le référencer. Par ex. ceci ne marchera pas : INSERT INTO Lines2 VALUES(REF(PointType(1,2)), REF(PointType(3,4)); Les objets PointType(1,2) et PointType(1,2) ne vivent dans aucune relation! 64

Pour suivre une référence avec le., on fait comme si la valeur d un attribut de type référence était litteralement la valeur du type référencé. Exemple : Calcul des coordonnées x des extremité de chaque ligne élément de Lines2 : SELECT ll.end1.x, ll.end2.x FROM Lines2 ll; 65

Relations imbriquées, dćlaration du schéma La valeur d un attribut d une table peut être une relation. Définition du schéma d une table dont les élément sont des polygones, tout polygone étant une table (de points) lui-même. CREATE TYPE PolygonType AS TABLE OF PointType; / CREATE TABLE Polygons ( name VARCHAR2(20), points PolygonType) NESTED TABLE points STORE AS PointsTable; Dernière ligne : les sous-tables réprésentant les polygones ne sont pas stockées directement comme valeurs de l attribute points, mais dans une autre table dont le nom est PointsTable (la façon de stocker est celle du modèle relationnel standard!). 66

Relations imbriquées, remplissage des tables La valeur de chaque relation de niveau inférieur est représentée par une liste de valeurs du type approprié (PolygoneType dans notre exemple). Exemple d insertion d un polygone qui est un carré : INSERT INTO Polygons VALUES( square, PolygonType(PointType(0.0, 0.0), PointType(0.0, PointType(1.0, 0.0), PointType(1.0, ) ); 67

Relations imbriquées, exemples de requêtes Les points du carré : SELECT points FROM Polygons WHERE name = square ; Le point du carré qui sont sur la diagonale (x=y) : SELECT ss.x FROM THE(SELECT points FROM Polygons WHERE name = square ) ss WHERE ss.x = ss.y; (sous-requête, relation du niveau inférieur dans le FROM avec le mot-clé THE et utilisation de la variable ss pour la nommer.) 68