La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

04/05/2014 07:01 Copyright Serge MIRANDA, "Objets et BD" (Part IV) 1 Introduction à SQL3 (SQL99) Professeur Serge Miranda Master2.

Présentations similaires


Présentation au sujet: "04/05/2014 07:01 Copyright Serge MIRANDA, "Objets et BD" (Part IV) 1 Introduction à SQL3 (SQL99) Professeur Serge Miranda Master2."— Transcription de la présentation:

1 04/05/ :01 Copyright Serge MIRANDA, "Objets et BD" (Part IV) 1 Introduction à SQL3 (SQL99) Professeur Serge Miranda Master2 « MBDS » SELECT quelque chose avec image FROM quelque part ++ WHERE condition ++

2 04/05/ :01 Copyright Serge MIRANDA, "Objets et BD" (Part IV) 2Contenu I Présentation des principales caractéristiques de SQL3 niveaux 2 et 3 (définition, manipulation, contrôle, développement) II Présentation critique du double paradigme : valeur et pointeur (type REF) dans SQL3

3 04/05/ :01 3 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Standard SQL? ANSI (American National Standard Institute) X3H2 database language committe (X3 division ANSI pour Syst. de Traitement Information) : définition SQL3 de 1991 à 1999 avec 28 membres votants : ANSI (American National Standard Institute) X3H2 database language committe (X3 division ANSI pour Syst. de Traitement Information) : définition SQL3 de 1991 à 1999 avec 28 membres votants : ISO : International Standard Organization comprenant ANSI, AFNOR (France)… et ISO : International Standard Organization comprenant ANSI, AFNOR (France)… et NIST (http://www.ncsl.nist.gov) 4 phases 4 phases Working draft (WD) Working draft (WD) Committee draft (CD) pour révision ouverte (1/96) Committee draft (CD) pour révision ouverte (1/96) Draft international standard (DIS) (12/98) Draft international standard (DIS) (12/98) International standard (7/99) International standard (7/99)

4 04/05/ :01 4 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Standard SQL(petite histoire) SEQUEL 1 (1974) de System R dIBM SEQUEL 1 (1974) de System R dIBM SEQUEL 2 (1977) SEQUEL 2 (1977) SQL 1 (Ansi : 1986 ; ISO : 1987) : 100 pages puis révisions en 1989, « SQL89 » SQL 1 (Ansi : 1986 ; ISO : 1987) : 100 pages puis révisions en 1989, « SQL89 » Avec des systèmes de tests et de validation développés par le NIST (National Institute of Standards and Technology) pour éviter problèmes de Codasyl SQL2 (1992, « SQL92 ») par X3H2 : 600 pages avec 3 niveaux SQL2 (1992, « SQL92 ») par X3H2 : 600 pages avec 3 niveaux Niv. 1 : « Entry » (SQL1), 2: « Intermediate » et 3: « Full » Niv. 1 : « Entry » (SQL1), 2: « Intermediate » et 3: « Full » SQL3 ( Standard en 1999, « SQL99 ») : 1500 pages SQL3 ( Standard en 1999, « SQL99 ») : 1500 pages Niveau 1 (SQL2)… Niveau 1 (SQL2)… SQL4… SQL4…

5 04/05/ :01 5 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Standard SQL3 Part1 : Framework Part1 : Framework Part2 : Foundation (noyau avec « TDA ») Part2 : Foundation (noyau avec « TDA ») Part3 : SQL/CLI (interface dappel client) Part3 : SQL/CLI (interface dappel client) Part4 : SQL/PSM (lang. procédures stockées) Part4 : SQL/PSM (lang. procédures stockées) Part5 : SQL/Bindings Part5 : SQL/Bindings Part6 : SQL/XA (moniteur TP) Part6 : SQL/XA (moniteur TP) Part7 : SQL/Temporal Part7 : SQL/Temporal

6 04/05/ :01 6 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Rappels : Principales nouveautés SQL2 + d « orthogonalité » (EX: Tables dérivées dans from..) + d « orthogonalité » (EX: Tables dérivées dans from..) + de types : varchar, bit, character sets, date, time, interval + de types : varchar, bit, character sets, date, time, interval + dopérateurs :Union, Cross et Natural JOIN … + dopérateurs :Union, Cross et Natural JOIN … Difference (EXCEPT) et Intersection (INTERSECT) Difference (EXCEPT) et Intersection (INTERSECT) Prédicats MATCH, BETWEEN, LIKE (Exemple :..Where AVNOM Like Airbus%) … Prédicats MATCH, BETWEEN, LIKE (Exemple :..Where AVNOM Like Airbus%) … Apparition partielle des domaines : create DOMAINS Apparition partielle des domaines : create DOMAINS NULL NULL + Définition relationnelle :Clé primaire et intégrité référentielle + Définition relationnelle :Clé primaire et intégrité référentielle Niveaux disolation pour transactions, CASE… Niveaux disolation pour transactions, CASE…

7 04/05/ :01 7 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Modèle « OR » ? Extensions RICE du modèle relationnel : Extensions RICE du modèle relationnel : - REUTILISATION (Héritage, polymorphisme) - IDENTITE et références - COMPLEXITE des Objets (Collections et produit) - ENCAPSULATION (types et fonctions utilisateur)

8 04/05/ :01 8 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Concept OBJET dans SQL3 ? Dualité de structures de données SQL3 pour CLASSE D OBJETS : « TABLES » (Relations) et « TYPES » (Domaines) : Dualité de structures de données SQL3 pour CLASSE D OBJETS : « TABLES » (Relations) et « TYPES » (Domaines) : CREATE TABLE CREATE TYPE Note : un concept de trop (!) ou préparer Date et SQL4 ? + possibilité de travailler…proprement ! Persistance automatique avec TABLE !

9 04/05/ :01 9 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Classe OBJET dans SQL3 avec TABLE 1) « TABLE » : Create table 1) « TABLE » : Create table structure de données de base (relation NF2 possible) pour le stockage en mémoire persistante et la manipulation ensembliste avec VALEURS et POINTEURS (double paradigme !) 2 types de TABLE : - « Table Objet » possible (clause «CREATE TABLE … With Identity ») ROWID Type REF possible ROWID Type REF possible - Table « relationnelle » sinon

10 04/05/ :01 10 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Classe OBJET dans SQL3 avec TYPE 2) « TYPE » : Create type (classe dobjets) 2 types de …TYPE : - ( « VALUE ») ADT - ( « VALUE ») ADT Pas d OID, valeur pour attribut dans relation Pas d OID, valeur pour attribut dans relation Types de base Types de base - (« OBJECT ») ADT (Create type with OID ) OID pour chaque instance (pas d OID par défaut) OID pour chaque instance (pas d OID par défaut) Types possibles pour attributs ou autres ADT, variables SQL… Types possibles pour attributs ou autres ADT, variables SQL… Type REF (avec OID) possible associé Type REF (avec OID) possible associé

11 04/05/ :01 11 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 R : * HERITAGE MULTIPLE hybride (clause"UNDER" pour les TABLES et les TYPES) * POLYMORPHISME (Surcharge) et TEMPLATES (types génériques/ paramétrés) * POLYMORPHISME (Surcharge) et TEMPLATES (types génériques/ paramétrés)

12 04/05/ :01 12 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 I :(dualité de structure, dualité dOID) : Pour les tables : " ROW ID " (explicite- "with identity") pour encapsulation de tuple et type REF Pour les TYPES : " Object ID " (« with OID visible » ) pour les classes dobjets Pour les TYPES : " Object ID " (« with OID visible » ) pour les classes dobjets

13 04/05/ :01 13 Copyright Serge MIRANDA, "Objets et BD" (Part IV)SQL3 C : TYPES (ADT) et TABLES ADT : types de données complexe défini par l'utilisateur : "OBJECT ADT" (avec OID) : classe dobjets " VALUE ADT » (sans OID) : type de base Support dobjets complexes (tables ou ADT) : - Constructeur de Collections : "SET", "LIST", "MULTISET" (agrégation de tables) - Constructeur tuple/produit cartésien (ROW)

14 04/05/ :01 14 Copyright Serge MIRANDA, "Objets et BD" (Part IV)SQL3 C : TYPES (ADT) et TABLES TABLES avec - « With identity » (ROWID) : classe dobjets - sans ROWID : table relationnelle des attributs "stored" ou "virtual" ("updatable", "read-only", "constant")

15 04/05/ :01 15 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 E * PSM (Persistent Stored Module) : regroupement de routines dans schéma objet/procédures STOCKEES * " Routines "(SQL ou externe) associées aux tables/ADT/base : * " Routines "(SQL ou externe) associées aux tables/ADT/base : -"Functions"("Actor », « Constructor » ou "destructor") -"Procedures" * 3 Niveaux d'encapsulation pour un ADT (idem C++) ("Private","Protected« (sous type), "Public") * 3 Niveaux d'encapsulation pour un ADT (idem C++) ("Private","Protected« (sous type), "Public")

16 04/05/ :01 16 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 ? Un langage de définition de types/tables Un langage de définition de types/tables Un langage de programmation (objets) Un langage de programmation (objets) Un langage de requêtes (OR) Un langage de requêtes (OR) Un langage de communication Un langage de communication Un langage temporel Un langage temporel

17 04/05/ :01 17 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Exemple Définition) DEUX possibilités pour une entité conceptuelle /CLASSE OBJET : table ou type (ADT) ayant chacune un OID système possible 1- CREATE TABLE Exemple : Create Table Personne (Nom char (20), Sexe char (1), Age integer Conjoint REF Personne WITH IDENTITY) notes : - WITH IDENTITY ( ROWID ) : Des Routines peuvent être associées aux tables pour implanter des opérations encapsulant les lignes + type REF possible sur la table Personne

18 04/05/ :01 18 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Exemple) 2-CREATE TYPE (With OID…) Exemple: Create TYPE personne_type with OID (nom varchar not null, sexe constant, age virtual... date-naissance date, ACTOR FUNCTION age (:P personne_type) return real... DESTRUCTOR FUNCTION enlever_personne..; End function)

19 04/05/ :01 19 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Exemple) (suite create personne_type ) CREATE TABLE Personnes (donnees_personne : personne_type) La seule façon qu'une instance de TDA soit stockée de manière persistante dans la BD, c est de la stocker comme valeur de colonne d'une table La seule façon qu'une instance de TDA soit stockée de manière persistante dans la BD, c est de la stocker comme valeur de colonne d'une table (seule différence importante entre TABLE OBJET et ADT OBJET !)

20 04/05/ :01 20 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Exemple) A partir d Oracle 9 A partir d Oracle 9 - TABLE « OBJET » : Create table T of type t Exemple : Create type personne_type as object (P#,…) Create table personnes of type personne_type Create table personnes of type personne_type (avec OID, faisant de la table une table objet) - distinction OID (16 Octets, immuable, non indexable) et ROWID (10 octets, non immuable, indexable) - PKOID (pseudo OID sur les vues : « Primary key OID »)/PKREF : une vue peut servir à créer un OID sur une table relationnelle (vision objet..de TABLES)

21 04/05/ :01 21 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Exemple) : héritage SQL3 (Exemple) : héritage CREATE TABLE Pilote UNDER Personne (NbreHeures integer)

22 04/05/ :01 22 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Exemple) : type REF SQL3 (Exemple) : type REF CREATE TABLE Vol (Vol# Char(4), PL# REFERENCE Pilote (PL#) PL# REFERENCE Pilote (PL#) REFPIL REF Pilote REFPIL REF Pilote...) La valeur de lattribut REFPIL est un RowID/pointeur- ligne et non plus une valeur de clé primaire ; opérateur DEREF associé aux pointeurs (pas SQL !) La valeur de lattribut REFPIL est un RowID/pointeur- ligne et non plus une valeur de clé primaire ; opérateur DEREF associé aux pointeurs (pas SQL !) La clé étrangère et le type REF peuvent cohabiter dans une même table (cf Oracle 9) La clé étrangère et le type REF peuvent cohabiter dans une même table (cf Oracle 9)

23 04/05/ :01 23 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Exemple 2D ) SQL3 (Exemple 2D ) CREATE (OBJECT) TYPE RECTANGLE with OID (x1, y1, x2, y2 real) Actor function MAKE_RECT... return RECTANGLE ; Actor function IS_IN (x,y real, R RECTANGLE) if (R.x1<=x and x<=R.x2) and (R.y1<=y and y<=R.y2) then return TRUE else FALSE ;

24 04/05/ :01 24 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Exemple 2D ) SQL3 (Exemple 2D ) Actor function ONE_SIDE_IS_IN (R0, R RECTANGLE) if (IS_IN (R.x1, R.y1, R0) or IS_IN(R.x2, R.y1, R0) or IS_IN (R.x2, R.y2, R0) or IS_IN (R.x1, R.y2, R0) ) then return TRUE else FALSE; then return TRUE else FALSE;

25 04/05/ :01 25 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 Définition (Exemple 2D-suite) SQL3 Définition (Exemple 2D-suite) Actor function OVERLAP (R1, R2 RECTANGLE) if ONE_SIDE_IS_IN (R1 R2) then return TRUE else if ONE_SIDE_IS_IN (R2,R1) then return TRUE else return FALSE;

26 04/05/ :01 26 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 Manipulation (Exemple 2D-suite) SQL3 Manipulation (Exemple 2D-suite) Create table RECTANGLES (datarectangle RECTANGLE) requête SQL3 SELECT * FROM RECTANGLES R WHERE OVERLAP (R, MAKE_RECT (0,1,0,1)) = TRUE ; Note : comparez avec Date98

27 04/05/ :01 27 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Présentation des nouveautés, Niveaux 2 et 3) SQL3 (Présentation des nouveautés, Niveaux 2 et 3) Définition Manipulation Contrôle Développement/Programmation

28 04/05/ :01 28 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : Types de base Types de Base NOMBRES : NOMBRES : Integer, Smallint, Numeric, Numeric (P) et Numeric (P,S), Decimal (P) et Decimal (P,S) (Precision, Scale) Integer, Smallint, Numeric, Numeric (P) et Numeric (P,S), Decimal (P) et Decimal (P,S) (Precision, Scale) Real, Double Precision et Float Real, Double Precision et Float Chaînes de caractères : Character, character varying, national character Chaînes de caractères : Character, character varying, national character Chaîne de bits : Bit, Bit Varying Chaîne de bits : Bit, Bit Varying Date : date, time, timestamp et Intervalle temporel : Interval day/month/year Date : date, time, timestamp et Intervalle temporel : Interval day/month/year Indéfini (NULL) et logique (boolean) Indéfini (NULL) et logique (boolean)

29 04/05/ :01 29 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : Nouveaux types Enumération, booléen, Character LOB (CLOB), binary LOB (BLOB), Constructeur tuple/produit cartésien : row, Constructeur de collection : set, multiset et list, Distinct (ud) types Create distinct type monnaieeuro as integer (9) Create distinct type monnaieeuro as integer (9) Create distinct type monnaieusa as integer (9) Create distinct type monnaieusa as integer (9)

30 04/05/ :01 30 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) Constructeur ROW (produit cartésien) Constructeur ROW (expression) soit au niveau des domaines soit directement au niveau des attributs dune table ou dun type Create domain adresse ROW (numero.., rue.., ville,.. Zip..) Create domain adresse ROW (numero.., rue.., ville,.. Zip..) Create ROW type adresse (numero, rue, ville, zip) Create ROW type adresse (numero, rue, ville, zip) Create table/type Pilote Create table/type Pilote(…, Adresse ROW( numero varchar (3), rue varchar (12),..) ROW à utiliser dans INSERT avec opérateur «.. » pour accès à sous partie (Note : «. » dans Oracle 9) ROW permet davoir des tables imbriquées dans des tables (NF2) idem attribut de type table/ADT

31 04/05/ :01 31 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : ADT Rappel : ADT (type de données « abstrait »/Abstract data type) 1- Déclaration (attributs, méthodes) : « type specification » avec « member » pour méthodes dans Oracle 9 2- Implantation (méthodes) : « type body » dans Oracle Concept de classe dobjets avec le concept d ADT avec OID (create type with OID ) qui comprend 2 parties visibles : Concept de classe dobjets avec le concept d ADT avec OID (create type with OID ) qui comprend 2 parties visibles : Les spécifications des attributs Les spécifications des attributs les méthodes/routines associées (base, type ou table) : « functions » (Actor/ Constructor/ Destructor) ou « procedures » les méthodes/routines associées (base, type ou table) : « functions » (Actor/ Constructor/ Destructor) ou « procedures »

32 04/05/ :01 32 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : ADT CREATE TYPE – ::= WITH OID (VISIBLE) – ::= UNDER possibilité dhéritage multiple avec résolution explicite – : attributs publics ou privés : opérations publiques : opérateurs surchargés, : définition des ordres : fonction de conversion de types

33 04/05/ :01 33 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : ADT et CONSTRUCTOR Création instance de TDA par une fonction CONSTRUCTOR Exemple pour TDA Adresse : CONSTRUCTOR FUNCTION adresse-t () RETURNS adresse-t Declare : a adresse-t Begin New : a ; Set : a.numero = null ; Set : a.ville = null ; …return a ; END; END Function

34 04/05/ :01 34 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : ADT et CONSTRUCTOR Exemple : Create table pilote of type pilote-t Insert into pilote values (pilote-t (1, Serge, adresse-t (MBDS, Sophia, )) Update pilote p set p.adresse = adresse-t (MBDS, Sophia Antipolis, ) where p.nom = Serge ;

35 04/05/ :01 35 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : ADT et fonctions Suppression instance dun TDA par fonction DESTRUCTOR Suppression instance dun TDA par fonction DESTRUCTOR Exemple : DESTRUCTOR FUNCTION sup-adresse (:a adresse) RETURNS adresse BEGIN Destroy : a ; Return : a; END; END Function BEGIN Destroy : a ; Return : a; END; END Function

36 04/05/ :01 36 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : ADT Accès aux attributs dun TDA : Accès aux attributs dun TDA : fonctions OBSERVER (lecture), MUTATOR (mise à jour) fonctions OBSERVER (lecture), MUTATOR (mise à jour) Exemple : Declare a adresse Declare V varchar (12) V = ville (a) ; V = ville (a) ; : ville (a, Valbonne) ; : ville (a, Valbonne) ; Note : ces fonctions sont généralement intégrées dans SQL3 (Update..) Tout attribut « A1 du type t du TDA nomADT » a une fonction OBSERVER implicite : « (Function) A1 (arg1/nomADT) Returns t »

37 04/05/ :01 37 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : ADT Accès aux attributs dun TDA : Accès aux attributs dun TDA : Notation «.. » du type : Notation «.. » du type : Exemples : - a..ville pour invoquer la fonction ville du TDA Adresse - Pour un TDA Pilote (variable P) ayant un attribut « domicile » défini sur le TDA « Adresse », on peut écrire avec les déclarations ci dessus : (set ) v= P..domicile..ville

38 04/05/ :01 38 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : ADT Fonction CAST sur TDA pour modifier type Fonction CAST sur TDA pour modifier typeExemple: WHERE VOL..HA>> (CAST (VOL..HD AS Date) + 4 Hours)

39 04/05/ :01 39 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : ADT Utilisation dun ADT ? Utilisation dun ADT ? Type dun Attribut dun autre ADT Type dun Attribut dun autre ADT Exemple : Exemple : remplacer le type DECIMAL du champ SALAIRE par un remplacer le type DECIMAL du champ SALAIRE par un TDA SALAIRE pour des raisons de sécurité.. Sous –type dun autre ADT (Clause UNDER) Sous –type dun autre ADT (Clause UNDER) Exemple : Create type pilote under employe Exemple : Create type pilote under employe Types dun paramètre dans une routine Types dun paramètre dans une routine Exemple : Create function salaire (p pilote) returns Decimal (6,2) Return(..) ; Exemple : Create function salaire (p pilote) returns Decimal (6,2) Return(..) ;

40 04/05/ :01 40 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : ADT Utilisation dun ADT ? Utilisation dun ADT ? Type de variable SQL Type de variable SQL Exemple : declare vp pilote puis Select * Into vp From Pilote Where.. Exemple : declare vp pilote puis Select * Into vp From Pilote Where.. Type source dun type DISTINCT Type source dun type DISTINCT Type dun attribut dune table ou dun domaine ( sémantique additionnelle avec contraintes Check ) Type dun attribut dune table ou dun domaine ( sémantique additionnelle avec contraintes Check ) Exemple : Create domain Paris-adresse as adresse Check (value (a.ville) = Paris ) default null; Exemple : Create domain Paris-adresse as adresse Check (value (a.ville) = Paris ) default null;

41 04/05/ :01 41 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : Déclencheur Définition de déclencheur : Définition de déclencheur : CREATE TRIGGER BEFORE/AFTER of on REFERENCING OLD/NEW as CREATE TRIGGER BEFORE/AFTER of on REFERENCING OLD/NEW as « BEFORE/AFTER : possibilité de déclencher avant ou après l'événement « BEFORE/AFTER : possibilité de déclencher avant ou après l'événement = INSERT, UPDATE, DELETE = INSERT, UPDATE, DELETE possibilité de référencer les valeurs avant ou après mise à jour (« REFERENCING OLD/NEW as ») possibilité de référencer les valeurs avant ou après mise à jour (« REFERENCING OLD/NEW as ») = opération sur table (INSERT..) avec condition possible (« WHEN » « WHERE ») = opération sur table (INSERT..) avec condition possible (« WHEN » « WHERE »)

42 04/05/ :01 42 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : Déclencheur (trigger) Exemple1 : Exemple1 : PILOTE (ID int, salaire float) CUMUL (ID int, Augmentation float) Définition dun déclencheur après toute mise à jour du champ « salaire » de PILOTE qui met à jour lattribut « augmentation » de la relation CUMUL CREATE TRIGGER AFTER UPDATE OF salaire ON pilote REFERENCING OLD AS ancien_salaire, NEW AS nouveau_salaire UPDATE CUMUL SET Augmentation = Augmentation + nouveau_salaire - ancien_salaire WHERE ID = pilote.ID

43 04/05/ :01 43 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : Déclencheur (trigger) EXEMPLE 2 : Définition dun déclencheur après toute mise à jour de lattribut HA de Vol avec mise à jour de la vue VOLINDIRECT… EXEMPLE 2 : Définition dun déclencheur après toute mise à jour de lattribut HA de Vol avec mise à jour de la vue VOLINDIRECT… Create Trigger T1 after update of HA on Vol Referencing old as ancienneHA new as nouvelleHA Update volindirect set ….(nouvelleHA- ancienneHA)… ;

44 04/05/ :01 44 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : TABLES CREATE TABLE avec clauses CREATE TABLE avec clauses with identity ( RowID et Type REF dessus), with identity ( RowID et Type REF dessus), on commit, on commit, global/local/temporary, global/local/temporary, le type REF et les Objets lignes (RowID), le type REF et les Objets lignes (RowID), les collections pour les attributs multivalués les collections pour les attributs multivalués (peut être dans SQL4) (ARRAY, SET, MULTISET et LIST), constant/updatable constant/updatable clauses under (héritage) with, clauses under (héritage) with, constructeur de table avec VALUES (expression) constructeur de table avec VALUES (expression)

45 04/05/ :01 45 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : type REF Type REF pour localiser une instance de TDA ou un tuple via leur ROWID (type et table « objets ») Type REF pour localiser une instance de TDA ou un tuple via leur ROWID (type et table « objets ») - valeur de Référence obtenue par l opérateur de référencement REF (« », «. » dans Oracle)

46 04/05/ :01 46 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : TABLES Une TABLE peut avoir des attributs … Une TABLE peut avoir des attributs … définis sur un TDA définis sur un TDA Complexes : Multivalués (SET, LIST) ou produit (ROW) Complexes : Multivalués (SET, LIST) ou produit (ROW) de type REF de type REF SOUS-TABLE : Une TABLE peut être obtenue par héritage ( héritage multiple) SOUS-TABLE : Une TABLE peut être obtenue par héritage ( héritage multiple) EX : Create type PILOTE_EN_FORMATION under PILOTE, FORMATION (..) Note : le sous type Pilote_en_formation hérite des attributs de Pilote et de Formation (création automatique type ROW de Pilote)

47 04/05/ :01 47 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : TABLES Possibilité d'utiliser un type prédéfini pour la table (Vision tabulaire dune classe ; persistance des objets dune classe) EX : CREATE TABLE pilotes OF t-pilote ; Possibilité de définir un nouveau type –Le type est celui des tuples de la table EX : CREATE TABLE Constructeurs OF NEW TYPE Constructeur (nom VARCHAR, total MONEY) ;

48 04/05/ :01 48 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : TABLES Intégrité de domaine (NULL, NOT NULL, Check) Intégrité référentielle - Restrict, Cascade, Set Null, Set Default + - « NO ACTION » : Idem Restrict mais test à la fin du module SQL Tables de base et temporaires CREATE TABLE Persistante (table de base) : Create/drop Table Persistante (table de base) : Create/drop Table Global temporary : une référence dans SQL crée une instance distincte; dans session SQL ayant plusieurs modules, transactions… Global temporary : une référence dans SQL crée une instance distincte; dans session SQL ayant plusieurs modules, transactions… Local temporary Local temporary

49 04/05/ :01 49 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) : TABLES Les instances dun TDA deviennent persistantes par association avec une table de base (en attendant idem « table temporaire ») Exemple : Create type Pilotedessai (..) Create table Pilote ( pil Pilotedessai, salaire Decimal (6,2),..) Création instance par : Declare : p Pilotedessai ; Begin new : p set : p.numero = 100 set : p.nom = paul … Return :p; END

50 04/05/ :01 50 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) Exemple : Create table AVION Create table AVION ( AV# Integer, AVNOM varchar (12), AV-PHOTO blob (600 K), CONTRAT clob (60K), REFPILOTE REF Pilote REFPILOTE REF Pilote Private PRIX Decimal (9,2) CAP SET Integer, CAP SET Integer, LOC SET adresse, LOC SET adresse, REVISION boolean with identity) Exercice : « Représenter en schéma ODMG cette table SQL3 (With Identitry dans AVIONpermet de représenter le pointeur INVERSE)

51 04/05/ :01 51 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Définition) CREATE TABLE Vol (Vol# Char(4),... PL# REFERENCE Pilote (PL#) PL# REFERENCE Pilote (PL#) REFPIL REF Pilote REFPIL REF Pilote...)

52 04/05/ :01 52 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : Accès TDA Exemple : Quels sont les numéros davion qui sont en révision avec leur contrat et leurs villes de localisation ? Quels sont les numéros davion qui sont en révision avec leur contrat et leurs villes de localisation ? Select AV#, CONTRAT, LOC..VILLE From AVION Where REVISION = true ; Rappel : Notation «.. » utilisée aussi pour obtenir le champ/fonction d un ADT

53 04/05/ :01 53 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : Accès TDA Exemples avec ADT Pilote : Pilotes habitant Nice ? Select * From Pilote P Where P..ADR..ville = Nice; Update pilote Set pilote..adr..ville = ville (Toulouse) Where pil# = 100 ;

54 04/05/ :01 54 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : JOIN Clause from avec produit cartésien (Jointure CROSS ) et orthogonalité Clause from avec produit cartésien (Jointure CROSS ) et orthogonalité EX : Select * From (Select * From (((T1 Union T2) INTERSECT T3) EXCEPT T4)) Join NATURAL sur attributs ayant le même nom Join NATURAL sur attributs ayant le même nom Jointure (T1 join T2) avec clauses using foreign key, using primary key, using constraint et recursive union Jointure (T1 join T2) avec clauses using foreign key, using primary key, using constraint et recursive union Quantificateurs EXISTENTIEL et UNIVERSEL : for some/all table-res (condition) Quantificateurs EXISTENTIEL et UNIVERSEL : for some/all table-res (condition)

55 04/05/ :01 55 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemples

56 04/05/ :01 56 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : Récursion Requêtes récursives pour parcours hiérarchique avec possibilités de limiter la profondeur (et les cycles avec la clause CYCLE) avec type de recherche comme DEPTH FIRST ou BREADTH FIRST Requêtes récursives pour parcours hiérarchique avec possibilités de limiter la profondeur (et les cycles avec la clause CYCLE) avec type de recherche comme DEPTH FIRST ou BREADTH FIRST EX : Sélectionner tous les vols indirects au départ de Nice EX : Sélectionner tous les vols indirects au départ de Nice Create view RECURSIVE Vol-IND (VD, VA) AS (Select VD, VA from Vol union Select IN.VD, OUT.VA From Vol IN, Vol OUT Where IN.VA = OUT.VD and IN.HA < OUT.HD and IN.Connections <3 )ou Search Breadth First by VD set …) Select * From VOL-IND Where VD = Nice;

57 04/05/ :01 57 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : appel de fonctions et opérateurs Appel de fonctions EX : Selectionner les pilotes qui habitent à moins de 1 KM de Jean ? SELECT r.nom FROM pilote j, pilote r WHERE j.nom = 'Jean' and distance(j.adr,r.adr) < 1;

58 04/05/ :01 58 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : appel de fonctions et opérateurs Appel d'opérateurs : EX : Sélectionner les noms des avions localisés à Nice avec leurs photos (zoom de 50%) ? SELECT a.avnom, Zoom (a.photo, 50) FROM avion a WHERE a.loc..ville = « Nice » ;

59 04/05/ :01 59 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Contrôle) : TRANSACTIONS Début et fin explicites pour transactions : START/COMMIT TRANSACTION avec ISOLATION LEVEL (Read uncommitted, read committed, repeatable read, serializable) et 2 modes daccès (read only, read write) Début et fin explicites pour transactions : START/COMMIT TRANSACTION avec ISOLATION LEVEL (Read uncommitted, read committed, repeatable read, serializable) et 2 modes daccès (read only, read write) SET LOCAL TRANSACTION (pour transactions réparties) SET LOCAL TRANSACTION (pour transactions réparties) SET CONSTRAINTS (deferred, immediate) SET CONSTRAINTS (deferred, immediate) transactions en mode asynchrone avec async, savepoint, rollback to savepoint.. transactions en mode asynchrone avec async, savepoint, rollback to savepoint.. Spécification SQL/XA défini par X/Open Spécification SQL/XA défini par X/Open

60 04/05/ :01 60 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Contrôle) : Sécurité des données - create assertion avec clauses after et before - intégrité référentielle (restrict…) - définition de rôles (create role) avec GRANT/REVOKE possibles - Privileges : Select, Delete, Update, Insert, References (vues ), Usage (modif. Schéma), Trigger, Under, Execute, ALL

61 04/05/ :01 61 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : Langage HOTE Langage hôte intégré « complet » : - Contrôle de boucle avec WHILE, IF THEN ELSE, REPEAT, FOR et LOOP (LEAVE), CASE - déclaration de variables et assignations - « Routines » définies dans le langage hôte : « Functions » ou « Procédures » : SPECIFIC FUNCTION/ PROCEDURE - Récursion linéaire possible entre procédures - Récursion linéaire possible entre procédures

62 04/05/ :01 62 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : Langage HOTE Exemple : Envois de mails aux étudiants du Master Miage et du Master MBDS sur le programme de DB Forum IF (Select Diplome From Etudiants Where Club= « DB Forum ») = MBDS Then insert into send_mail (Master…) Elseif (Select Diplôme…) = MIAGE Then Insert into send_mail (Master..) CASE When valeur1 Then.. When valeur2 Then Else End Case

63 04/05/ :01 63 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : langage hôte Langage dException vis à vis du code SQLSTATE avec : Langage dException vis à vis du code SQLSTATE avec : - 3 possibilités dexécution : CONTINUE, EXIT et UNDO - la définition de conditions dexception avec SIGNAL/RESIGNAL Possibilité de structuration en MODULES : Possibilité de structuration en MODULES : « modules » :{procedures}

64 04/05/ :01 64 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : SQL3 PSM Langage de programmation de procédures : « Procédures stockées » de SQL3 pour ADT en plus des fonctions et des procédures : PSM : « Persistent Stored Modules » déclaration de variables et Assignation conditions CASE, IF boucles LOOP, FOR exceptions SIGNAL, RESIGNAL possibilité de procédures et fonctions externes et de structuration en modules

65 04/05/ :01 65 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 (Manipulation) : SQL3 PSM Procédures stockées de SQL3 PSM - Fonctions (monovaluées) : « actor » ou « destructor » - Fonctions (monovaluées) : « actor » ou « destructor » - Procédures qui ne retournent pas de valeurs - Procédures qui ne retournent pas de valeurs - PSM qui peut contenir des fonctions et des procédures - PSM qui peut contenir des fonctions et des procéduresExemple Create module actions_pilote Procedure Affectation (..) Begin.. End Procedure Vacances (…) Begin…End Procedure Formation (…) Begin… End Appel de procédure par CALL EXEC SQL CALL actions_pilotes.affectation (IT100, Paris, Nice,..)

66 04/05/ :01 Copyright Serge MIRANDA, "Objets et BD" (Part IV) 66 II Présentation critique du double paradigme : valeur et pointeur (type REF) dans SQL3 !

67 04/05/ :01 67 Copyright Serge MIRANDA, "Objets et BD" (Part IV) SQL3 et 3ième Manifeste de Date (96,99) " It seems clear " It seems clear that the correct mapping of encapsulated objects into the relational data model is that classes of objects correspond to DOMAINS (not to rows) « DOMAINS (not to rows) « DON CHAMBERLIN, membre SQL3, IBM, Avril 97 (InfoDB, Vol 10, numéro 6, p.25)

68 04/05/ :01 68 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Modèle OR de Date Modèle V1 de T. CoddModèle OR de C.Date Structure OpérateursStructures Opérateurs de donnéesde données RELATIONS SQL2RELATIONSSQL3 DOMAINES /CLASSES (D) Signature RICE dans « domaines » Opérateurs spécifiques Hiérarchie de Domaines.. dans SELECT ou WHERE

69 04/05/ :01 69 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Rappels programmation : VALEURS vs VARIABLES vs POINTEURS VALEUR ? « constante non modifiable (au sens philosophique) » VARIABLE ? Toute variable possède un NOM, une VALEUR et une ADR mémoire ; VARIABLE := ( NOM, VALEUR, ADR) POINTEUR ? type de variable qui contient l ADR dune autre variable comme valeur (« indirection »)

70 04/05/ :01 70 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel : TABLES vs RELVARS 1-Relations/TABLES (« valeurs ») vs Relations/VARIABLES ( « RELVARS » ) (DATE95, 99) « RELATION » : double signification : « variable » et « valeur » ! : 1-"En-tête"(ensemble de paires ) PREDICAT : le « RELVAR/RELATION » 2-"Corps" (ensemble de tuples de valeurs pas de pointeurs, conformes à l'en tête) TABLE DE VALEURS avec une volatilité importante : la « TABLE/RELATION »

71 04/05/ :01 71 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel "Declare N Integer" ? N est une variable entière dont les valeurs sont des entiers "CREATE TABLE T " ? T est une variable relation (RELVAR) dont les valeurs sont des tables (tuples) (TABLES/RELATIONS)

72 04/05/ :01 72 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle relationnel DOMAINES 2- "DOMAINES" ! "DOMAINE" (CODD70) : TYPE de données ("sémantique") défini par le système ou par l'utilisateur ==> opérateurs pouvant être associés ENCAPSULATION de facto ==> TYPAGE « FORT » (toute valeur possède un domaine/type)

73 04/05/ :01 73 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle relationnel « DOMAINES » NOTEs : 1) Aucune restriction sur les valeurs des Domaines dans leur définition (==> domaines de graphes de sons, videos,..) ! Exemple : Domaine des buts (séquences Vidéo) des meilleurs joueurs de football du monde (avec typologie forte) 2) Aucune interdiction dassocier un ensemble dopérateurs spécifiques 3 ) Aucune interdiction de construire une hiérarchie de domaines DOMAINES = Naturellement, Classes d' OBJETS dans la terminologie OO ! ( Propriétés RICE au niveau des domaines)

74 04/05/ :01 74 Copyright Serge MIRANDA, "Objets et BD" (Part IV) 1) 1)Ni les « TABLES » ni les « RELVARS » ne peuvent remplacer/Emuler le concept de « DOMAINES » 2) 2)« Domaine » : seul niveau dabstraction SEMANTIQUE incontournable entre les « valeurs » et les « relations » candidat NATUREL au support de CLASSES d OBJETS (propriété RICE) « RELATIONS » (TABLES ou RELVARS) vs « DOMAINES »

75 Double CONSTAT ! Les Relations/TABLES ne sont pas des « Domaines » ! Les Relations/TABLES ne sont pas des « Domaines » ! Les Relations/RELVARS ne sont pas des « Domaines » ! Les Relations/RELVARS ne sont pas des « Domaines » ! 04/05/ :01 75 Copyright Serge MIRANDA, "Objets et BD" (Part IV)

76 04/05/ :01 76 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel TABLES vs DOMAINES 3- RELATIONS/TABLES et DOMAINES : DISTINCTS Domaine : valeurs potentielles (" type") vs Relation /table (Attributs): valeurs réelles Les RELATIONS/TABLES sont dépendantes du temps vs les valeurs de DOMAINE sont "éternelles"

77 04/05/ :01 77 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel TABLES vs DOMAINES domaines statiques vs relations/Tables dynamiques Une « relation/table » A un type (le RELVAR) alors qu'un « domaine » EST un type

78 04/05/ :01 78 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel RELVAR vs DOMAINES Un domaine comprend des valeurs de complexité arbitraire alors qu'un RELVAR contient des tuples EX : Domaine DVille contient la valeur " Paris " alors que le Relvar RVille contient le tuple Un RELVAR n'encapsule pas des valeurs à la différence des domaines

79 04/05/ :01 79 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel RELVAR vs DOMAINES 4- Les RELVARS ne sont pas candidats naturels à être des CLASSES d'OBJETS Exemple de RICE au niveau des RELVARS : CREATE TABLE PERSONNE (SS# CHAR(9), DATE-NAISS DATE, ADDRESSE CHAR (50));

80 04/05/ :01 80 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel (con't) CREATE TABLE EMP UNDER PERSONNE ( ENOM CHAR(20), SAL NUMERIC, LOISIRS SET_OF (LOISIR) TRAVAILLE_POUR (COMPAGNIE) METHODES RETRAITE (..): NUMERIC ;

81 04/05/ :01 81 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel (con't) CREATE TABLE LOISIR (NOM...…); CREATE TABLE COMPAGNIE (NOM CHAR(20), LOCATION CHAR (12));

82 04/05/ :01 82 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Besoins d'extensions du Langage de requête - expression de chemin EX.: EMP.TRAVAILLE_POUR.LOCATION - expression imbriquée EX.: EMP.LOISIRS.NOM

83 04/05/ :01 83 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel (con't) - Opérateurs de comparaison de relations EX.: SUBSET,.. - Opérateurs de cheminement dans un graphe - Appel de méthodes dans les expressions

84 04/05/ :01 84 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel (con't) PROBLEMES ? - Certaines colonnes ont des vrais TYPES de DONNEES (CHAR(20) : valeurs potentielles..) d'autres non, valeurs réelles (COMPAGNIE…) - Classe RELVAR avec des variables PUBLIC sans nécessairement des méthodes (l'inverse dans les classes « pures » OO ) -

85 04/05/ :01 85 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel (con't) Table incorrecte dun point de vue structure informatique (cf 3NF) et mauvaise structure sémantique -les objets lignes peuvent... contenir d'autres objets (EX.: les objets EMP contiennent des objets COMPAGNIE) en fait des POINTEURS vers ces objets (==> anomalie de mise à jour des lignes ) -Mise à jour des objets contenus : cascade ?

86 04/05/ :01 86 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Retour sur le modèle Relationnel (con't) - PB : une "relation" contient non seulement des valeurs mais des...POINTEURS ==> ré-interprétation de l'ALGEBRE pour des objets imbriqués ! - héritage des méthodes pour les relations dérivées via les opérateurs de l'algèbre ? (EX: PROJ (SALAIRE, COMPAGNIE) avec RETRAITE ?) Où sont les domaines ?

87 04/05/ :01 87 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Type REF (Rappels) VALEURS vs VARIABLES ? (cf PB Relation/TABLES vs Relations/RELVAR) VARIABLE := (NOM, V, ADR) VALEURS vs POINTEURS ? (Modèle Relationnel vs Modèle de Données Codasyl/OO) VALEUR : éternelle ! (EX: "Amour") vs VARIABLE : modifiable et dépendante du temps

88 04/05/ :01 88 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Type REF (con't) Les Variables ont des adresses (pas les valeurs) : TYPE « ADRESSE » avec 2 opérateurs de base : * Référencement/adressage ("referencing") : v adr en C : ptr = &v; (avec char v; et char *ptr ; alors v=6; ou *ptr=6;) en PL/1 DECLARE N INTEGER DECLARE P POINTER P= ADDR (N) * Déréférencement ("dereferencing") : adr v en C : *A ; en PL/1 : A--> V

89 04/05/ :01 89 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Etude du Type REF de SQL3 Trois extensions de SQL2 (pour les tables) : ROWID, type REF, « --> » 1- Identifiant (système) de tuple (ROW ID) L'opérateur associé de référencement est "&ROW" En Oracle 9, cet opérateur sappelle ref Exemple : Select ref (p) from pilote p where pnom = serge ;

90 04/05/ :01 90 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Type REF de SQL3 2- Type "REF" : les valeurs d'une colonne peuvent être des POINTEURS ("adresses de tuples" /ROWID) d'une autre relation. Exemple : Dans la table pilote, un attribut "refavion" est introduit pour traduire le lien N:1 entre Pilote et Avion correspondant à "l'avion préféré d'un pilote" refavion REF (avion_type) SCOPE FOR refavion IS avion refavion contient pour un pilote donné, le ROWID de l'avion préféré

91 04/05/ :01 91 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Type REF de SQL3 Type "REF" dès Oracle 9 : - le type REF est introduit dans les TABLES ou les TYPES (qui peuvent exister avec ou sans OID) - opérateurs associés : « ref » et « deref » - OID, ROWID, PKID/PKREF Note : en dehors du stockage persistant des valeurs de TABLES, aucune différence entre TYPE et CLASSE !

92 04/05/ :01 92 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Type REF de SQL3 3- Opérateur de déréférencement noté "--> » Exemple : "refavion --> av#, avnom" forme abrégée pour : SELECT av#, avnom FROM avion A WHERE A.&ROW = refavion ; Dans Oracle 9 : ….Where ref (A) = refavion ; Notation. possible dans Oracle 9 pour « »

93 04/05/ :01 93 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemples avec type de données REF de SQL3 pilote (pl#, plnom, adr, refavion ) avion (av#, avnom, cap, loc)

94 04/05/ :01 94 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemples avec type de données REF de SQL3 Q1 : Quels sont les numéros des avions préférés par les pilotes habitant 'Nice' ? SELECT p.refavion-->av# FROM pilote p WHERE p.adr = 'Nice' ;

95 04/05/ :01 95 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemples avec type de données REF de SQL3 Q2 (symétrique) : Quels sont les noms des pilotes préférant des Airbus A300 ? SELECT p.plnom FROM pilote p WHERE p.refavion--> avnom='A300';

96 04/05/ :01 96 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple de jointure externe avec "-->" Q : "pour chaque pilote habitant Nice, donner le nom du pilote avec le numéro et le nom de l avion préféré (pour ceux qui en ont un) "

97 04/05/ :01 97 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple de jointure externe avec "-->" SELECT p.Plnom, p.refavion-->(Av#, Avnom) FROM Pilote p WHERE p.Adr = 'Nice' ;

98 04/05/ :01 98 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple1 Nous supposons que chaque avion a un pilote attitré unique (nous rajoutons l'attribut refpilote dans la relation Avion) "Quels sont les noms des pilotes qui préfèrent un avion dont le pilote attitré habite Nice ?" La requête SQL3 s'écrit alors : SELECT p.Plnom FROM Pilote p WHERE p.refavion-->refpilote -->Adr = 'Nice' ;

99 04/05/ :01 99 Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple double jointure Attributs de type REF à la place (ou en plus) des clés étrangères : REFpil et REFav dans la relation VOL Quels sont les noms des pilotes qui conduisent un Airbus ? SELECT v.REFpil-->pilnom FROM vol v WHEREv.REFav-->avnom = Airbus ;

100 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple autojointure Rajout attribut REFavbis (pour avion de rechange) dans la relation avion Quels sont les noms des pilotes qui conduisent un avion dont lavion de rechange est localisé à Nice ? SELECT v.REFpil plnom FROM vol v WHERE v.REFav-->REFavbis-->LOC = Nice ;

101 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple en SQL2 En SQL2, en remplaçant refavion et refpilote par des clés étrangères AV# et PL#et refavbis par RA : SELECT P.PNOM FROM Pilote P, Avion A1 A2, Vol V WHERE P.PL#= V.PL# AND V.AV#= A1.AV# AND A1.RA= A2.AV# AND A2.Loc= 'Nice' ;

102 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple complet Pilote (PL#, PLNOM, ADR, REFAVION) Avion (AV#, AVNOM, LOC, REFAVBIS, REFPILOTE) Vol (Vol#, PL#, AV#, REFPIL, REFAV, VD, VA, HD, HA) Quels sont les noms des pilotes préférant un B747 qui conduisent un Airbus dont lavion de rechange est l avion attitré de Jean?

103 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple Quels sont les noms des pilotes préférant un B747 qui conduisent un Airbus dont lavion de rechange est l avion attitré de Jean? SELECT v.REFPIL plnom FROM vol v WHERE (v.REFAV Avnom = Airbus, REFAVBIS REFPILOTE Plnom = Jean) and (v.REFPIL REFAVION Avnom = B747) ; Traitez la en partie avec jointure de SQL2

104 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple (bis) ouSELECT v.REFpil plnom ?, refavion AVNOM = B747 FROM vol v WHERE v.REFav Avnom – Airbus and REFavbis Refpilote Plnom = Jean ;

105 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple + complet ! Pilote (PL#, PLNOM, ADR, REFAVION, REFCOPIL) Avion (AV#, AVNOM, LOC, REFAVBIS, REFPILOTE) Vol (Vol#, PL#, AV#, REFPIL, REFAV, VD, VA, HD, HA) FORMATION (PL#, REFPILF, AVNOM, DATE)

106 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Question avec le MAX de Question avec le MAX de Nom des pilotes qui préfèrent un avion dont lavion de rechange est localisé à Nice et dont le pilote attitré a un copilote habitant Nice qui a reçu en 2000 une formation pour conduire un A300 qui est lavion préféré dont le pilote attitré est un pilote Parisien ? Nom des pilotes qui préfèrent un avion dont lavion de rechange est localisé à Nice et dont le pilote attitré a un copilote habitant Nice qui a reçu en 2000 une formation pour conduire un A300 qui est lavion préféré dont le pilote attitré est un pilote Parisien ? Inventer une Requête utilisant 4 Fois de suite la navigation ? Inventer une Requête utilisant 4 Fois de suite la navigation ?

107 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Q 4 ? Select refPil Nom Select refPil Nom From vol Where refAv refPilote refAvion refAVbis AVNom=Airbus; AVNom=Airbus; En FR ?

108 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Réponse ? Select P.PLNOM From Pilote P, Formation F Where P.refavion refavbis A.loc = « Nice », Refpilote refcopil Adr = « Nice » P.Pl# = F.PL# And F.date= « 2000 » and F.Avnom= « A300 », Refavion Refpilote Adr = Paris »

109 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exercice Porter le schéma SQL3 précédent en schéma ODMG et répondez à une requête mettant en jeu 4 « » Porter le schéma SQL3 précédent en schéma ODMG et répondez à une requête mettant en jeu 4 « » Commentez les principales différences entre les 2 approches Commentez les principales différences entre les 2 approches

110 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple 2 (donné par Don Chamberlin d IBM du comité SQL3 dans Info DB correspondant à un exemple classique) La relation Employe contient les attributs Salaire et REFdept (de type REF sur Departement) La relation Departement contient l'attribut REFmngr (de type REF sur Employe)

111 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple 2 Q : noms et salaires des employés gagnant plus que leur managers ? SELECT E.NOM, E.SALAIRE FROM EMP E WHERE E.Salaire > E.REFdept --> REFmngr-->Salaire ;

112 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Exemple 2 en SQL2 (en remplaçant les types REF par des clés étrangères) : SELECT E.Nom, E.Salaire FROM Employe E, Employe F, Departement D WHERE E.D# = D.D# AND D.Manager = F.Emp# AND E.Salaire>F.Salaire ;

113 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Discussion sur le type REF 1- Nature d'un résultat de projection sur le type REF? SELECT refavion FROM pilote p WHERE p.pnom = 'serge' ;

114 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Discussion sur le type REF 2- l'attribut de type REF contient des "adresses de variables lignes (POINTEURS) " ! Seul le concept de « variable relation » (RELVAR) existe dans le modèle relationnel ! 3- Distinction entre le type REF et le concept de "clé étrangère" de SQL2 ? - CE : Valeurs de CP vs Attribut REF : valeurs de ROWID - manipulation différente ! Note : les valeurs de ROWID peuvent ne pas (encore) ou ne plus exister (« dangling references »)

115 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Type REF et ROWID : initialisation ? CREATE TABLE Vol (Vol# Char(4), PL# reference Pilote REFPIL REF Pilote...) La valeur du lien « REFPIL" est un RowID inaccessible par lutilisateur (accès avec opérateur ref/ deref) et non plus une valeur de clé étrangère (PL#) manipulable par lutilisateur La valeur du lien « REFPIL" est un RowID inaccessible par lutilisateur (accès avec opérateur ref/ deref) et non plus une valeur de clé étrangère (PL#) manipulable par lutilisateur La clé étrangère et le type REF peuvent cohabiter dans une même table La clé étrangère et le type REF peuvent cohabiter dans une même table Le mot clé SCOPE FOR permet de limiter la visibilité des références à une table particulière (Alter table vol add (scope for REFPIL is pilote1)); Le mot clé SCOPE FOR permet de limiter la visibilité des références à une table particulière (Alter table vol add (scope for REFPIL is pilote1));

116 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Initialisation ROWID ? Insert into VOL ( IT100, 1, Nice, Paris, 7,8, (Select &ROW (p) From Pilote p where p.nom = Serge)); Rappel : &ROW (ref en Oracle) : « Opérateur de référencement » associé à un ROWID Note : En Oracle 9, la clause « returning REF into » permet de récupérer le ROWID dun tuple Exemple : Insert into pilote values (1,Serge, Toulouse, Returning Ref (pilote) into pil-ref) insert into Vol values (IT100, 1, Nice,Paris, 7,8, pil-ref)

117 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Initialisation ROWID ? Retour du RAT (« Record at-a-time ») dans le SAT (« Set at-a-time ») ! Retour du RAT (« Record at-a-time ») dans le SAT (« Set at-a-time ») ! « Chasser le RAT dans SQL2, il revient au galop avec le type REF dans SQL3 ! » Un lien multivalué (1:N ou N:M ) se traduit par un type REF permettant davoir des jointures « cablées » au niveau TABLE ou TYPE La gestion dinitialisation et de manipulation des pointeurs associés est affaire de développeurs RAT

118 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Remarques sur le type REF de SQL3 et le pointeur REF de l'ODMG Dans ODMG, REF est un pointeur persistant qui enrichit le concept de pointeur C++ avec son pointeur symétrique INVERSE; Dans SQL3 1- REF est un pointeur entre variables lignes 2- REF permet de simplifier des requêtes complexes (en SQL2 ) mettant en jeu des auto jointures et des jointures externes exploitant lopérateur de déréférencement

119 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Remarques sur le type REF de SQL3 et le pointeur REF de l'ODMG Dans SQL3 deux paradigmes cohabitent dans la TABLE : - « valeur » (algèbre/SQL) - « pointeur » (Opérateurs REF/ DEREF) Pourquoi ne pas avoir clairement séparé les deux mondes (cf Manifeste de Date?) Note : « Spéciation » en biologie avec une vie faite de paliers… COHERENCE? COMPLETUDE ? FERMETURE? SQL3 (comme SQL2) nest pas un bon standard (qui évolue…)!

120 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Remarques sur les TIPS des Bases de Données Structures de données VALEURS vs POINTEURS (variables) Opérateurs associés ALGEBRE vs Opérateurs REF et DEREF

121 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Remarques sur les paradigmes de développement et SQL Développement dapplication Paradigme RAT Paradigme SAT (Record at a time)(Set at a time) Paradigme POINTEUR Paradigme VALEUR Pointeur CURSOR Pointeur ligne ROWID (ref,deref) » (Modèle Relationnel, SQL2/3) (C++, CODASYL/DBTG, ODMG…) Nouveauté SQL2 Nouveauté SQL3

122 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Remarques sur les paradigmes de développement et SQL Développement dapplication Paradigme RAT Paradigme SAT (Record at a time)(Set at a time) Paradigme OAT (Object at a time) Pointeur CURSOR Pointeur ligne ROWID (ref,deref) » Nouveauté SQL2 Nouveauté SQL3

123 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Remarques sur les architectures « n-tier » Applications réparties sur Architectures « n-tier » Approche « COMPOSANTS »Approche « SERVICES WEB » Standards : CORBA, COM+, RMI Sstandards : CORBA, COM+, RMI Sstandards : SOAP, UDDI, WSDL Couplage Middleware LACHE Couplage Middleware FORT Environnements HOMOGENES Environnements HETEROGENES

124 04/05/ : Copyright Serge MIRANDA, "Objets et BD" (Part IV) Select e.QUESTIONS From Etudiants e Where e.esprit = positif


Télécharger ppt "04/05/2014 07:01 Copyright Serge MIRANDA, "Objets et BD" (Part IV) 1 Introduction à SQL3 (SQL99) Professeur Serge Miranda Master2."

Présentations similaires


Annonces Google