Date post: | 03-Apr-2015 |
Category: |
Documents |
Upload: | vincens-cornu |
View: | 104 times |
Download: | 0 times |
11/04/23 03:58Copyright Serge MIRANDA, "Objets et
BD" (Part IV) 1
Introduction à SQL3 Introduction à SQL3 (SQL99)(SQL99)
Professeur Serge Miranda
Master2 « MBDS »
www.mbds-fr.org
SELECT quelque chose avec image FROM quelque part ++ WHERE condition ++
11/04/23 03:58Copyright Serge MIRANDA, "Objets et
BD" (Part IV) 2
ContenuContenuI I Présentation des Présentation des principales principales caractéristiques de SQL3 caractéristiques de SQL3
niveaux 2 et 3 niveaux 2 et 3 (définition, (définition, manipulation, contrôle, manipulation, contrôle, développement)développement)
II II Présentation critique Présentation critique du du double paradigme : double paradigme : valeur valeur etet pointeurpointeur (type REF) dans (type REF) dans SQL3SQL3
11/04/23 03:58 3Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Standard SQL?Standard SQL? ANSIANSI (American National Standard Institute) (American National Standard Institute)
X3H2X3H2 database language committe database language committe (X3 division (X3 division ANSI pour Syst. de Traitement Information) : ANSI pour Syst. de Traitement Information) : définition SQL3 de 1991 à 1999 avec 28 membres définition SQL3 de 1991 à 1999 avec 28 membres votants : votants : http://www.ansi.orghttp://www.ansi.org
ISO : ISO : International Standard OrganizationInternational Standard Organization comprenant ANSI, AFNOR (France)… et comprenant ANSI, AFNOR (France)… et NIST (http://www.ncsl.nist.gov)NIST (http://www.ncsl.nist.gov)
4 phases4 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)
11/04/23 03:58 4Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Standard SQL(petite Standard SQL(petite histoire)histoire)
SEQUEL 1 (1974) de System R d’IBMSEQUEL 1 (1974) de System R d’IBM SEQUEL 2 (1977)SEQUEL 2 (1977) SQL 1SQL 1 (Ansi : 1986 ; ISO : 1987) : 100 pages puis (Ansi : 1986 ; ISO : 1987) : 100 pages puis
révisions en 1989, révisions en 1989, « SQL89 »« SQL89 »Avec des systèmes de tests et de validation développés par le Avec des systèmes de tests et de validation développés par le
NIST (NIST (National Institute of Standards and Technology) National Institute of Standards and Technology) pour pour éviter problèmes de Codasyléviter problèmes de Codasyl
SQL2SQL2 (1992, (1992, « SQL92 »)« SQL92 ») par X3H2 : 600 pages avec par X3H2 : 600 pages avec 3 niveaux3 niveaux Niv. 1 : « Entry » (SQL1), 2: « Intermediate » et 3: « Full »Niv. 1 : « Entry » (SQL1), 2: « Intermediate » et 3: « Full »
SQL3SQL3 ( ( Standard Standard en 1999, en 1999, « SQL99 »)« SQL99 ») : 1500 pages : 1500 pages Niveau 1 (SQL2)…Niveau 1 (SQL2)…
SQL4SQL4……
11/04/23 03:58 5Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Standard SQL3Standard SQL3
Part1 : Part1 : FrameworkFramework Part2 : Part2 : FoundationFoundation (noyau avec « TDA »)(noyau avec « TDA ») Part3 : SQL/CLI (Part3 : SQL/CLI (interface d’appel clientinterface d’appel client)) Part4 : SQL/PSM (Part4 : SQL/PSM (lang. procédures lang. procédures
stockéesstockées)) Part5 : SQL/BindingsPart5 : SQL/Bindings Part6 : SQL/XA (Part6 : SQL/XA (moniteur TPmoniteur TP)) Part7 : SQL/TemporalPart7 : SQL/Temporal
11/04/23 03:58 6Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Rappels : Principales Rappels : Principales nouveautés SQL2nouveautés SQL2 + d’ « orthogonalité » (EX: Tables dérivées dans + d’ « orthogonalité » (EX: Tables dérivées dans
from..)from..) + de types : varchar, bit, character sets, date, time, + de types : varchar, bit, character sets, date, time,
intervalinterval + d’opérateurs :Union , Cross et Natural JOIN …+ d’opérateurs :Union , Cross et Natural JOIN …
Difference Difference (EXCEPT)(EXCEPT) et Intersection et Intersection (INTERSECT)(INTERSECT) Prédicats MATCH, BETWEEN, LIKE (Exemple : ..Where Prédicats MATCH, BETWEEN, LIKE (Exemple : ..Where
AVNOM Like ‘Airbus%’) …AVNOM Like ‘Airbus%’) … Apparition partielle des domaines : Apparition partielle des domaines : create DOMAINScreate DOMAINS NULLNULL + Définition relationnelle :Clé primaire et intégrité + Définition relationnelle :Clé primaire et intégrité
référentielleréférentielle Niveaux d’isolation pour transactions, CASE…Niveaux d’isolation pour transactions, CASE…
11/04/23 03:58 7Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Modèle « OR » ?Modèle « OR » ? Extensions Extensions RICE RICE du modèle relationnel :du modèle relationnel :
- RREUTILISATION (EUTILISATION (Héritage, polymorphisme)Héritage, polymorphisme)- IIDENTITE DENTITE et référenceset références- CCOMPLEXITEOMPLEXITE des Objets des Objets (Collections et (Collections et
produit)produit)- EENCAPSULATIONNCAPSULATION (types et fonctions (types et fonctions
utilisateur)utilisateur)
11/04/23 03:58 8Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Concept OBJET dans Concept OBJET dans SQL3 ?SQL3 ?
Dualité de structures de données SQL3 pourDualité de structures de données SQL3 pour CLASSE D’ OBJETS : « TABLES » (Relations) CLASSE D’ OBJETS : « TABLES » (Relations) et « TYPES » (Domaines) : et « TYPES » (Domaines) :
CREATE TABLECREATE TABLECREATE TYPECREATE TYPE
Note : un concept de trop (!) ou préparer Date et Note : un concept de trop (!) ou préparer Date et SQL4 ? + possibilité de travailler…proprement ! SQL4 ? + possibilité de travailler…proprement ! Persistance Persistance automatiqueautomatique avec TABLE ! avec TABLE !
11/04/23 03:58 9Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Classe OBJET dans SQL3 Classe OBJET dans SQL3 avec TABLEavec TABLE
1) « 1) « TABLETABLE » : » : Create tableCreate tablestructure de données de base (structure de données de base (relation NF2 relation NF2
possible)possible) pour le pour le stockage en mémoire stockage en mémoire persistantepersistante et la manipulation ensembliste et la manipulation ensembliste avec avec VALEURS et POINTEURS (VALEURS et POINTEURS (double paradigmedouble paradigme !) !)
2 types de TABLE :2 types de TABLE :- - « Table Objet »« Table Objet » possible ( possible (clause «CREATE clause «CREATE
TABLE … TABLE … With IdentityWith Identity ») ») ROWID ROWID Type REF possible Type REF possible
- Table « relationnelle » sinon- Table « relationnelle » sinon
11/04/23 03:58 10Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Classe OBJET dans SQL3 Classe OBJET dans SQL3 avec TYPEavec TYPE
2) 2) « TYPE » : « TYPE » : Create typeCreate type (classe (classe d’objets)d’objets)
2 types de …TYPE : 2 types de …TYPE : - (- (« « VALUE ») ADTVALUE ») ADT
Pas d’ OID, valeur pour attribut dans relationPas d’ OID, valeur pour attribut dans relation Types de baseTypes de base
- (« - (« OBJECT ») ADT OBJECT ») ADT ((Create type Create type with OIDwith OID <visible>) <visible>)
OID pour chaque instanceOID pour chaque instance (pas d’ OID par défaut) (pas d’ OID par défaut) Types possibles pour attributs ou autres ADT, variables Types possibles pour attributs ou autres ADT, variables
SQL…SQL… Type REF (avec OID) possible associéType REF (avec OID) possible associé
11/04/23 03:58 11Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 SQL3
RR : :
* HERITAGE MULTIPLE hybride* HERITAGE MULTIPLE hybride (clause"(clause"UNDERUNDER" pour les TABLES " pour les TABLES
et les et les TYPES)TYPES)
* * POLYMORPHISMEPOLYMORPHISME (Surcharge) et(Surcharge) etTEMPLATES TEMPLATES (types génériques/ (types génériques/
paramétrés)paramétrés)
11/04/23 03:58 12Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 SQL3
II : : (dualité de structure, dualité d’OID) (dualité de structure, dualité d’OID) ::
Pour les tables : "Pour les tables : "ROW IDROW ID"" (explicite-(explicite- ""with with identityidentity") pour ") pour encapsulation de tuple et encapsulation de tuple et type REF type REF
Pour les TYPES : "Pour les TYPES : "Object IDObject ID"" (« (« with with OID visible »OID visible » ) ) pour les classes pour les classes d’objets d’objets
11/04/23 03:58 13Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 SQL3 C : TYPES (ADT) et TABLES
ADT : types de données complexe défini par l'utilisateur :
"OBJECT ADT" (avec OID) : classe d’objets
" VALUE ADT » (sans OID) : type de base
Support d’objets complexes (tables ou ADT) :
- Constructeur de Collections : "SET", "LIST", "MULTISET" (agrégation de tables) - Constructeur tuple/produit cartésien (ROW)
11/04/23 03:58 14Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 SQL3
CC : : TYPES (ADT) et TABLESTYPES (ADT) et TABLES
TABLESTABLES avec avec
- « - « With identity » (ROWID) With identity » (ROWID) : : classe classe d’objetsd’objets
- sans ROWID : table relationnelle- sans ROWID : table relationnelle
des attributs "des attributs "storedstored" ou "" ou "virtualvirtual" "
("("updatableupdatable", "", "readread--onlyonly", "", "constantconstant")")
11/04/23 03:58 15Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 SQL3
E E * * PSMPSM ( (Persistent Stored ModulePersistent Stored Module) : ) : regroupement de routines dans schéma regroupement de routines dans schéma objet/procédures STOCKEESobjet/procédures STOCKEES
* "* "RoutinesRoutines"(SQL ou externe) associées aux "(SQL ou externe) associées aux tables/ADT/base : tables/ADT/base :
-"Functions"("-"Functions"("Actor » , Actor » , « « Constructor Constructor » » ou ou ""destructordestructor")")
-"Procedures" -"Procedures"
* 3 * 3 Niveaux d'encapsulation pour un ADT Niveaux d'encapsulation pour un ADT (idem C++)(idem C++) ("("PrivatePrivate","","ProtectedProtected« (sous type), « (sous type), ""PublicPublic") ")
11/04/23 03:58 16Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 ?SQL3 ?
Un langage de définition de types/tablesUn 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 communicationUn langage de communication Un langage temporelUn langage temporel
11/04/23 03:58 17Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Exemple SQL3 (Exemple Définition)Définition)DEUX possibilités pour une entité conceptuelle DEUX possibilités pour une entité conceptuelle
/CLASSE OBJET : /CLASSE OBJET : tabletable ou ou typetype (ADT) (ADT) ayant ayant chacune un OID système possiblechacune un OID système possible
1- CREATE TABLE1- CREATE TABLE Exemple :Exemple :
Create Table PersonneCreate Table Personne(Nom char (20),(Nom char (20),Sexe char (1),Sexe char (1),Age integerAge integerConjoint REF Conjoint REF Personne WITH IDENTITYPersonne WITH IDENTITY))
notes : notes : - WITH IDENTITY (- WITH IDENTITY ( ROWID ) : Des Routines peuvent être ROWID ) : Des Routines peuvent être associées aux tables pour implanter des opérations encapsulant associées aux tables pour implanter des opérations encapsulant les lignes + type REF possible sur la table Personne les lignes + type REF possible sur la table Personne
11/04/23 03:58 18Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Exemple)SQL3 (Exemple)2-2- CREATE <OBJECT> TYPE (With CREATE <OBJECT> TYPE (With
OID…)OID…)Exemple:Exemple:
Create TYPE personne_type Create TYPE personne_type with OIDwith OID(nom varchar not null,(nom varchar not null,sexe constant,sexe constant,age virtual...age virtual...date-naissance date,date-naissance date,
ACTOR FUNCTION age ACTOR FUNCTION age (:P personne_type) return real ...(:P personne_type) return real ...DESTRUCTOR FUNCTION enlever_personne..; DESTRUCTOR FUNCTION enlever_personne..; End function)End function)
11/04/23 03:58 19Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Exemple)SQL3 (Exemple)
(suite create personne_type )(suite create personne_type )CREATE TABLE PersonnesCREATE TABLE Personnes(donnees_personne : personne_type)(donnees_personne : personne_type)
La seule façon qu'une instance de TDA soit La seule façon qu'une instance de TDA soit stockée de manière persistante dans la BD, stockée de manière persistante dans la BD, c’ c’ est de la stocker comme valeur de colonne est de la stocker comme valeur de colonne d'une tabled'une table
(seule différence importante entre TABLE OBJET (seule différence importante entre TABLE OBJET et ADT OBJET !)et ADT OBJET !)
11/04/23 03:58 20Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Exemple)SQL3 (Exemple) A partir d’ A partir d’ Oracle 9 Oracle 9
- - TABLE « OBJET » :TABLE « OBJET » : Create table T of type Create table T of type tt
Exemple : Exemple : Create type personne_type as object (P#,…)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)(avec OID, faisant de la table une table objet)
- distinction OID (16 Octets, immuable, non indexable) - distinction OID (16 Octets, immuable, non indexable) et ROWID (10 octets, non immuable, indexable)et ROWID (10 octets, non immuable, indexable)- PKOID (pseudo OID sur les vues : « Primary key - PKOID (pseudo OID sur les vues : « Primary key OID »)/PKREF : une vue peut servir à créer un OID sur OID »)/PKREF : une vue peut servir à créer un OID sur une table relationnelle (vision objet..de TABLES)une table relationnelle (vision objet..de TABLES)
11/04/23 03:58 21Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Exemple) : SQL3 (Exemple) : héritagehéritage
3- 3- <à partir de -1- Create Table <à partir de -1- Create Table Personne>Personne>
CREATE TABLE Pilote CREATE TABLE Pilote UNDERUNDER PersonnePersonne
(NbreHeures integer)(NbreHeures integer)
<<UNDER pour héritage structurel et UNDER pour héritage structurel et opérationnelopérationnel>>
11/04/23 03:58 22Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Exemple) : type SQL3 (Exemple) : type REFREF
CREATE TABLE VolCREATE TABLE Vol(Vol# Char(4),(Vol# Char(4),PL# REFERENCE Pilote (PL#) PL# REFERENCE Pilote (PL#) <<clé étrangère : clé étrangère : valeur clé primaire avec manipulation valeur clé primaire avec manipulation relationnelle>relationnelle>REFPIL REF PiloteREFPIL REF Pilote <type REF : ROWID, <type REF : ROWID, pointeur ligne avec opérateurs spécifiques!>pointeur ligne avec opérateurs spécifiques!>...)...) La valeur de l’attribut REFPIL est un RowID/La valeur de l’attribut REFPIL est un RowID/pointeur-pointeur-
ligneligne et non plus une et non plus une valeur valeur de clé primaire ; de clé primaire ; opérateur opérateur DEREFDEREF associé aux pointeurs (pas SQL !) associé aux pointeurs (pas SQL !)
La clé étrangère et le type REF peuvent cohabiter dans La clé étrangère et le type REF peuvent cohabiter dans une même table (cf Oracle 9)une même table (cf Oracle 9)
11/04/23 03:58 23Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Exemple 2D )SQL3 (Exemple 2D )
CREATE (OBJECT) TYPE RECTANGLE CREATE (OBJECT) TYPE RECTANGLE
with OID (x1, y1, x2, y2 real)with OID (x1, y1, x2, y2 real)
Actor functionActor function MAKE_RECT... MAKE_RECT...
return RECTANGLE ;return RECTANGLE ;
<<Point dans rectangle ?>Point dans rectangle ?>
Actor functionActor function IS_IN (x,y real, R IS_IN (x,y real, R RECTANGLE) if (R.x1<=x and x<=R.x2) and RECTANGLE) if (R.x1<=x and x<=R.x2) and (R.y1<=y and y<=R.y2) then return TRUE (R.y1<=y and y<=R.y2) then return TRUE else FALSE ;else FALSE ;
11/04/23 03:58 24Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Exemple 2D )SQL3 (Exemple 2D )
<côté dans rectangle ?><côté dans rectangle ?>
Actor functionActor function ONE_SIDE_IS_IN (R0, ONE_SIDE_IS_IN (R0, R RECTANGLE) if (IS_IN (R.x1, R RECTANGLE) if (IS_IN (R.x1, R.y1, R0) or IS_IN(R.x2, R.y1, R0) or R.y1, R0) or IS_IN(R.x2, R.y1, R0) or IS_IN (R.x2, R.y2, R0) or IS_IN IS_IN (R.x2, R.y2, R0) or IS_IN (R.x1, R.y2, R0) )(R.x1, R.y2, R0) )
then return TRUE else FALSE;then return TRUE else FALSE;
11/04/23 03:58 25Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 DéfinitionSQL3 Définition(Exemple 2D-suite)(Exemple 2D-suite)
<intersection non vide de deux <intersection non vide de deux rectangles ?>rectangles ?>
Actor functionActor function OVERLAP (R1, R2 OVERLAP (R1, R2 RECTANGLE) if ONE_SIDE_IS_IN (R1 RECTANGLE) if ONE_SIDE_IS_IN (R1 R2) then return TRUE else if R2) then return TRUE else if ONE_SIDE_IS_IN (R2,R1) then return ONE_SIDE_IS_IN (R2,R1) then return TRUE else return FALSE;TRUE else return FALSE;
11/04/23 03:58 26Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 Manipulation SQL3 Manipulation (Exemple 2D-suite)(Exemple 2D-suite)
Create table RECTANGLES Create table RECTANGLES (datarectangle RECTANGLE)(datarectangle RECTANGLE)
requête SQL3requête SQL3
SELECT *SELECT *FROM RECTANGLES RFROM RECTANGLES RWHERE OVERLAP (R, WHERE OVERLAP (R,
MAKE_RECT (0,1,0,1)) = TRUE ;MAKE_RECT (0,1,0,1)) = TRUE ;
Note : comparez avec Date98Note : comparez avec Date98
11/04/23 03:58 27Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 SQL3 (Présentation des (Présentation des
nouveautés, Niveaux 2 et nouveautés, Niveaux 2 et 3) 3)
Définition
Manipulation
Contrôle
Développement/Programmation
11/04/23 03:58 28Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : Types SQL3 (Définition) : Types de basede base
Types de BaseTypes de Base NOMBRES : NOMBRES :
• Integer, Smallint, Numeric, Numeric (P) Integer, Smallint, Numeric, Numeric (P) et Numeric (P,S), Decimal (P) et Decimal et Numeric (P,S), Decimal (P) et Decimal (P,S)(P,S) (Precision, Scale)(Precision, Scale)
• Real, Double Precision et FloatReal, Double Precision et Float Chaînes de caractères : Chaînes de caractères : Character, character Character, character
varying, national charactervarying, national character Chaîne de bits : Chaîne de bits : Bit, Bit VaryingBit, Bit Varying DateDate : date, time, timestamp et : date, time, timestamp et Intervalle temporelIntervalle temporel
: Interval day/month/year: Interval day/month/year IndéfiniIndéfini (NULL) (NULL) et logiqueet logique (boolean) (boolean)
11/04/23 03:58 29Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : SQL3 (Définition) : Nouveaux typesNouveaux types
Enumération, Enumération,
booléenbooléen, ,
Character LOB Character LOB (CLOB)(CLOB) , binary LOB , binary LOB (BLOB)(BLOB) , ,
Constructeur tuple/produit cartésienConstructeur tuple/produit cartésien : row : row, ,
Constructeur de collection : Constructeur de collection : set, multiset et set, multiset et listlist, ,
Distinct (ud) typesDistinct (ud) types Create Create distinct typedistinct type monnaieeuro as integer (9) monnaieeuro as integer (9) Create Create distinct typedistinct type monnaieusa as integer (9) monnaieusa as integer (9)
11/04/23 03:58 30Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) SQL3 (Définition) Constructeur ROW Constructeur ROW (produit cartésien)(produit cartésien)
Constructeur Constructeur ROW (expression)ROW (expression) soit au niveau des domaines soit directement au soit au niveau des domaines soit directement au niveau des attributs d’une table ou d’un typeniveau des attributs d’une table ou d’un type
Create domainCreate domain adresse adresse ROW ROW (numero.., rue.., ville,.. (numero.., rue.., ville,.. Zip..)Zip..)
Create ROW typeCreate ROW type adresse (numero, rue, ville, zip) adresse (numero, rue, ville, zip) Create table/type Pilote Create table/type Pilote
(…, (…,
Adresse ROW( numero varchar (3), rue Adresse ROW( numero varchar (3), rue varchar (12),..)varchar (12),..)
ROW à utiliser dans INSERT avec opérateur « .. » pour ROW à utiliser dans INSERT avec opérateur « .. » pour accès à sous partie (Note : « . » dans Oracle 9)accès à sous partie (Note : « . » dans Oracle 9)
ROW permet d’avoir des tables imbriquées dans des tables ROW permet d’avoir des tables imbriquées dans des tables (NF2) (NF2) idem attribut de type table/ADTidem attribut de type table/ADT
11/04/23 03:58 31Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : ADTSQL3 (Définition) : ADT
Rappel : ADT (Rappel : ADT (type de données type de données « abstrait »/Abstract data type« abstrait »/Abstract data type))
1- Déclaration (attributs, méthodes) : « type specification » avec 1- Déclaration (attributs, méthodes) : « type specification » avec « member » pour méthodes dans Oracle 9« member » pour méthodes dans Oracle 9
2- Implantation (méthodes) : « type body » dans Oracle 2- Implantation (méthodes) : « type body » dans Oracle
Concept de classe d’objets avec le concept d’ ADTConcept de classe d’objets avec le concept d’ ADT avec OID avec OID (create type with OID(create type with OID ) ) qui comprend 2 parties visibles :qui comprend 2 parties visibles :
Les spécifications des attributsLes spécifications des attributsles méthodes/routines associéesles méthodes/routines associées (base, type ou table) : (base, type ou table) : « functions »« functions » (Actor/ Constructor/ Destructor) (Actor/ Constructor/ Destructor) ou « procedures »ou « procedures »
11/04/23 03:58 32Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : ADTSQL3 (Définition) : ADT
• CREATE TYPE <nom ADT> <corps de l’ADT>• <corps de l’ADT>
– <OID option> ::= WITH OID (VISIBLE)
– <subtype clause> ::= UNDER <supertype clause>
• possibilité d’héritage multiple avec résolution explicite
– <member list>
• <column definition> : attributs publics ou privés
• <function declaration> : opérations publiques
• <operator name list> : opérateurs surchargés
• <equals clause>, <less-than clause> : définition des ordres
• <cast clause> : fonction de conversion de types
11/04/23 03:58 33Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : ADT SQL3 (Définition) : ADT et CONSTRUCTORet CONSTRUCTORCréation instance de TDACréation instance de TDA par une fonction par une fonction
CONSTRUCTORCONSTRUCTOR Exemple pour TDA Adresse :Exemple pour TDA Adresse :
CONSTRUCTOR FUNCTION adresse-t () RETURNS adresse-tCONSTRUCTOR FUNCTION adresse-t () RETURNS adresse-tDeclare : a adresse-tDeclare : a adresse-tBeginBegin
New : a ;New : a ;Set : a.numero = null ;Set : a.numero = null ;Set : a.ville = null ;Set : a.ville = null ;……return a ;return a ;
END;END;END FunctionEND Function
<<CONSTRUCTOR : Fonction spéciale ayant le même nom que le CONSTRUCTOR : Fonction spéciale ayant le même nom que le type>type>
11/04/23 03:58 34Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : ADT SQL3 (Définition) : ADT et CONSTRUCTORet CONSTRUCTOR
Exemple : Exemple :
Create table pilote of type pilote-tCreate table pilote of type pilote-t
Insert into pilote values Insert into pilote values
((pilote-t (pilote-t (1, Serge, 1, Serge, adresse-tadresse-t (MBDS, Sophia, 06 (MBDS, Sophia, 06 060606))060606))
Update pilote p set p.adresse = adresse-t (MBDS, Update pilote p set p.adresse = adresse-t (MBDS, Sophia Antipolis, 0606060606) where p.nom = Sophia Antipolis, 0606060606) where p.nom = ‘Serge’ ;‘Serge’ ;
11/04/23 03:58 35Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : ADT SQL3 (Définition) : ADT et fonctionset fonctions
Suppression instance d’un TDASuppression instance d’un TDA par fonction par fonction DESTRUCTORDESTRUCTOR
Exemple : Exemple :
DESTRUCTOR FUNCTION sup-adresse (:a adresse) DESTRUCTOR FUNCTION sup-adresse (:a adresse) RETURNS adresseRETURNS adresse
BEGIN Destroy : a ; Return : a; END; BEGIN Destroy : a ; Return : a; END; END FunctionEND Function
11/04/23 03:58 36Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : ADTSQL3 (Définition) : ADT Accès aux attributs d’un TDA :Accès aux attributs d’un TDA :
fonctions OBSERVER (lecture) , MUTATOR (mise à jour)fonctions OBSERVER (lecture) , MUTATOR (mise à jour)
<génération automatique fonction OBSERVER par déclaration de <génération automatique fonction OBSERVER par déclaration de variable>variable>
Exemple : Exemple : Declare a adresseDeclare a adresse Declare V varcharDeclare V varchar (12) (12)V =V = villeville (a) ; <fonction OBSERVER « ville »> (a) ; <fonction OBSERVER « ville »><mutator> : ville (a, ‘Valbonne’) ;<mutator> : ville (a, ‘Valbonne’) ;Note : ces fonctions sont généralement intégrées dans SQL3 (Update..)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 Tout attribut « A1 du type t du TDA nomADT » a une fonction OBSERVER implicite : « (Function) A1 (arg1/nomADT) Returns OBSERVER implicite : « (Function) A1 (arg1/nomADT) Returns t »t »
11/04/23 03:58 37Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : ADTSQL3 (Définition) : ADT Accès aux attributs d’un TDA :Accès aux attributs d’un TDA :
Notation « .. » du type : <(nom variable Notation « .. » du type : <(nom variable ADT)..Fonction>ADT)..Fonction>
Exemples : Exemples : - a..villea..ville pour invoquer la fonction ville du TDA Adresse pour invoquer la fonction ville du TDA Adresse
- Pour un TDA Pilote (variable P) ayant un attribut Pour un TDA Pilote (variable P) ayant un attribut « domicile » défini sur le TDA « Adresse », on peut « domicile » défini sur le TDA « Adresse », on peut écrire avec les déclarations ci écrire avec les déclarations ci dessus : dessus :
((set ) v= P..domicile..villeset ) v= P..domicile..ville
11/04/23 03:58 38Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : ADTSQL3 (Définition) : ADT Fonction CAST sur TDA Fonction CAST sur TDA pour modifier typepour modifier type
Exemple: Exemple:
WHERE VOL..HA>>WHERE VOL..HA>>
(CAST (VOL..HD AS Date) + 4 Hours)(CAST (VOL..HD AS Date) + 4 Hours)
11/04/23 03:58 39Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : ADTSQL3 (Définition) : ADT
Utilisation d’un ADT ?Utilisation d’un ADT ? Type d’un Attribut d’un autre ADTType d’un Attribut d’un 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é..TDA SALAIRE pour des raisons de sécurité..
Sous –type d’un autre ADT (Clause Sous –type d’un autre ADT (Clause UNDERUNDER) )
Exemple : Create type pilote under employeExemple : Create type pilote under employe
Types d’un paramètre dans une routine Types d’un paramètre dans une routine Exemple : Create function salaire (p pilote) returns Decimal Exemple : Create function salaire (p pilote) returns Decimal
(6,2) Return(..) ;(6,2) Return(..) ;
11/04/23 03:58 40Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : ADTSQL3 (Définition) : ADT
Utilisation d’un ADT ?Utilisation d’un ADT ?
Type de variable SQL Type de variable SQL Exemple : declare vp pilote puis Select * Into vp From Pilote Exemple : declare vp pilote puis Select * Into vp From Pilote
Where..Where.. Type source d’un type Type source d’un type DISTINCTDISTINCT
Type d’un Type d’un attribut attribut d’une table ou d’un d’une table ou d’un domainedomaine ( (sémantique additionnelle avec contraintes sémantique additionnelle avec contraintes Check )Check )
Exemple : Create domain Paris-adresse as adresse Check (value Exemple : Create domain Paris-adresse as adresse Check (value
(a.ville) = ‘Paris’(a.ville) = ‘Paris’) ) default null;default null;
11/04/23 03:58 41Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : SQL3 (Définition) : DéclencheurDéclencheur
Définition de déclencheur : Définition de déclencheur : CREATE TRIGGER BEFORE/AFTER CREATE TRIGGER BEFORE/AFTER
<événement> of <Att> on <Table> <événement> of <Att> on <Table> REFERENCING OLD/NEW as <x> REFERENCING OLD/NEW as <x> <action><action> « BEFORE/AFTER : possibilité de déclencher « BEFORE/AFTER : possibilité de déclencher
avant ou après l'événementavant ou après l'événement <événement> = INSERT, UPDATE, DELETE<événement> = INSERT, UPDATE, DELETE possibilité de référencer les valeurs avant ou après possibilité de référencer les valeurs avant ou après
mise à jour (« REFERENCING OLD/NEW as »)mise à jour (« REFERENCING OLD/NEW as ») <action> = opération sur table (INSERT..) avec <action> = opération sur table (INSERT..) avec
condition possible (« WHEN » « WHERE »)condition possible (« WHEN » « WHERE »)
11/04/23 03:58 42Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : SQL3 (Définition) : Déclencheur (Déclencheur (triggertrigger))
Exemple1Exemple1 : :PILOTE (ID int, salaire float)PILOTE (ID int, salaire float)CUMUL (ID int, Augmentation float)CUMUL (ID int, Augmentation float)Définition d’un déclencheur après toute mise à jour du Définition d’un déclencheur après toute mise à jour du
champ « salaire » de PILOTE qui met à jour l’attribut champ « salaire » de PILOTE qui met à jour l’attribut « augmentation » de la relation CUMUL« augmentation » de la relation CUMUL
CREATE TRIGGER AFTER UPDATE OF salaire ON CREATE TRIGGER AFTER UPDATE OF salaire ON pilotepilote
REFERENCING OLD AS ancien_salaire, NEW AS REFERENCING OLD AS ancien_salaire, NEW AS nouveau_salairenouveau_salaire
UPDATE CUMUL SET Augmentation = Augmentation UPDATE CUMUL SET Augmentation = Augmentation + nouveau_salaire - ancien_salaire WHERE ID = + nouveau_salaire - ancien_salaire WHERE ID = pilote.IDpilote.ID
11/04/23 03:58 43Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : SQL3 (Définition) : Déclencheur (Déclencheur (triggertrigger))
EXEMPLE 2 : EXEMPLE 2 : Définition d’un déclencheur après Définition d’un déclencheur après toute mise à jour de l’attribut HA de Vol avec mise à toute mise à jour de l’attribut HA de Vol avec mise à jour de la vue VOLINDIRECT…jour de la vue VOLINDIRECT…
Create Trigger T1 after update of HA on Create Trigger T1 after update of HA on VolVol
Referencing old as ancienneHA new as Referencing old as ancienneHA new as nouvelleHAnouvelleHA
Update volindirect set ….(nouvelleHA- Update volindirect set ….(nouvelleHA- ancienneHA)… ;ancienneHA)… ;
11/04/23 03:58 44Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : SQL3 (Définition) : TABLESTABLES
CREATE TABLECREATE TABLE avec clauses avec clauses withwith identityidentity (( RowID et Type REF dessus), RowID et Type REF dessus), on commiton commit, , global/local/temporaryglobal/local/temporary, , le type le type REF et les Objets lignes (RowID)REF et les Objets lignes (RowID), , les collections pour les attributs multivalués les collections pour les attributs multivalués ((peut être dans SQL4peut être dans SQL4)) (ARRAY, SET, MULTISET et LIST),(ARRAY, SET, MULTISET et LIST), constant/updatableconstant/updatable clauses clauses underunder (héritage) (héritage) with , with , constructeur de table avec constructeur de table avec VALUES (expression)VALUES (expression)
11/04/23 03:59 45Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : type SQL3 (Définition) : type REFREF
Type REF Type REF pour localiser une pour localiser une instance de TDA ou un tuple via leur instance de TDA ou un tuple via leur ROWID (type et table « objets »)ROWID (type et table « objets »)
- - valeur de Référence obtenue par l’ valeur de Référence obtenue par l’ opérateur de référencement REF opérateur de référencement REF (« (« », « . » dans Oracle) », « . » dans Oracle)
11/04/23 03:59 46Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : SQL3 (Définition) : TABLESTABLES
Une TABLE peut avoir des attributsUne TABLE peut avoir des attributs … … définis sur un TDAdéfinis sur un TDA Complexes : Multivalués (SET, LIST) ou produit (ROW)Complexes : Multivalués (SET, LIST) ou produit (ROW) de type REFde type REF
SOUS-TABLE : Une TABLE peut être obtenue SOUS-TABLE : Une TABLE peut être obtenue par héritage ( héritage multiple)par héritage ( héritage multiple)
EX : Create type PILOTE_EN_FORMATION under EX : Create type PILOTE_EN_FORMATION under PILOTE, FORMATION (..)PILOTE, FORMATION (..)
Note : le sous type Pilote_en_formation hérite des Note : le sous type Pilote_en_formation hérite des attributs de Pilote et de Formation (création attributs de Pilote et de Formation (création automatique type ROW de Pilote)automatique type ROW de Pilote)
11/04/23 03:59 47Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : SQL3 (Définition) : TABLESTABLES
• Possibilité d'utiliser un type prédéfini pour la table (Vision tabulaire d’une classe ; persistance des objets d’une classe)EX : CREATE TABLE pilotes OF t-pilote ;
• Possibilité de définir un nouveau type– Le type est celui des tuples de la tableEX : CREATE TABLE Constructeurs OF NEW TYPE Constructeur (nom VARCHAR, total MONEY) ;
11/04/23 03:59 48Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : SQL3 (Définition) : TABLESTABLES
Intégrité de domaineIntégrité de domaine (NULL, NOT NULL, Check) (NULL, NOT NULL, Check)
Intégrité référentielleIntégrité référentielle- Restrict, Cascade, Set Null, Set Default +- Restrict, Cascade, Set Null, Set Default +- « - « NO ACTIONNO ACTION » : » : Idem Restrict mais test à la fin du Idem Restrict mais test à la fin du
module SQLmodule SQL
Tables de base et temporairesTables de base et temporairesCREATE TABLECREATE TABLE
Persistante (table de base) : Persistante (table de base) : Create/drop TableCreate/drop Table Global temporary : Global temporary : une référence dans SQL crée une une référence dans SQL crée une
instance distincte; dans session SQL ayant plusieurs instance distincte; dans session SQL ayant plusieurs modules, transactions…modules, transactions…
Local temporaryLocal temporary
11/04/23 03:59 49Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition) : SQL3 (Définition) : TABLESTABLES
Les instances d’un TDA deviennent persistantes par association Les instances d’un TDA deviennent persistantes par association avec une table de base avec une table de base (en attendant idem «(en attendant idem « table temporaire ») table temporaire »)Exemple : Exemple : Create type Pilotedessai (..)Create type Pilotedessai (..)Create table Pilote ( pil Pilotedessai, salaire Decimal (6,2), ..)Create table Pilote ( pil Pilotedessai, salaire Decimal (6,2), ..)
Création instance par :Création instance par :Declare : p Pilotedessai ; Declare : p Pilotedessai ; BeginBegin
new : pnew : pset : p.numero = ‘100’set : p.numero = ‘100’set : p.nom = ‘paul’set : p.nom = ‘paul’… … Return :p; Return :p;
ENDEND
11/04/23 03:59 50Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition)SQL3 (Définition)Exemple :Exemple :
Create table AVION <ou CreateType AVION>Create table AVION <ou CreateType AVION>( AV# Integer,( AV# Integer,AVNOM varchar (12),AVNOM varchar (12),AV-PHOTO AV-PHOTO blobblob (600 K), (600 K),CONTRAT CONTRAT clobclob (60K), (60K),REFPILOTE REFPILOTE REF PiloteREF Pilote <Pilote attitré><Pilote attitré>Private PRIX Decimal (9,2)Private PRIX Decimal (9,2)CAP CAP SETSET Integer, Integer, <ensemble de capacités><ensemble de capacités>LOC LOC SET adresseSET adresse,, <Ensemble d’adresses ; insertion avec SET (ROW(‘..’))><Ensemble d’adresses ; insertion avec SET (ROW(‘..’))>
REVISION boolean REVISION boolean with identitywith identity))Exercice : « Représenter en schéma ODMG cette table SQL3 (With Exercice : « Représenter en schéma ODMG cette table SQL3 (With
Identitry dans AVIONpermet de représenter le pointeur INVERSE)Identitry dans AVIONpermet de représenter le pointeur INVERSE)
11/04/23 03:59 51Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Définition)SQL3 (Définition)
CREATE TABLE VolCREATE TABLE Vol
(Vol# Char(4),(Vol# Char(4),
......
PL# REFERENCE Pilote (PL#) <PL# REFERENCE Pilote (PL#) <clé clé étrangère : valeur clé primaire>étrangère : valeur clé primaire>
REFPIL REF PiloteREFPIL REF Pilote <type REF : <type REF : ROWID>ROWID>
...)...)
11/04/23 03:59 52Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Manipulation) : SQL3 (Manipulation) : Accès TDA Accès TDA
Exemple :Exemple : Quels sont les numéros d’avion qui sont en Quels sont les numéros d’avion qui sont en
révision avec leur contrat et leurs villes de révision avec leur contrat et leurs villes de localisation ?localisation ?
Select AV#, CONTRAT, Select AV#, CONTRAT, LOC..VILLELOC..VILLE From AVION From AVION Where REVISION = true ;Where REVISION = true ;
Rappel : Notation « .. » utilisée aussi pour Rappel : Notation « .. » utilisée aussi pour obtenir le champ/fonction d’ un ADT obtenir le champ/fonction d’ un ADT
11/04/23 03:59 53Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Manipulation) : SQL3 (Manipulation) : Accès TDA Accès TDA
Exemples avec ADT PiloteExemples avec ADT Pilote : :
Pilotes habitant Nice ?Pilotes habitant Nice ?
SelectSelect * * From From Pilote P Pilote P WhereWhere P..ADR..villeP..ADR..ville = = ‘Nice’;‘Nice’;
UpdateUpdate pilote pilote SetSet pilote..adr..ville = ville pilote..adr..ville = ville (‘Toulouse’)(‘Toulouse’)
WhereWhere pil# = ‘100’ ; pil# = ‘100’ ;
11/04/23 03:59 54Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Manipulation) : SQL3 (Manipulation) : JOINJOIN
Clause Clause fromfrom avec produit cartésien (Jointure avec produit cartésien (Jointure CROSSCROSS ) et orthogonalité ) et orthogonalitéEX : EX : Select * Select * From (Select * From (((T1 Union T2) INTERSECT T3) EXCEPT T4))From (Select * From (((T1 Union T2) INTERSECT T3) EXCEPT T4))
Join NATURAL sur attributs ayant le même nomJoin NATURAL sur attributs ayant le même nom
Jointure (T1 Jointure (T1 joinjoin T2) avec clauses T2) avec clauses using foreign using foreign keykey, , using primary keyusing primary key, , using constraint using constraint et et recursive unionrecursive union
Quantificateurs EXISTENTIEL et UNIVERSELQuantificateurs EXISTENTIEL et UNIVERSEL : : for for some/allsome/all table-res (condition) table-res (condition)
11/04/23 03:59 55Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
ExemplesExemples
11/04/23 03:59 56Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Manipulation) : SQL3 (Manipulation) : RécursionRécursion
Requêtes récursivesRequêtes récursives pour parcours hiérarchique avec pour parcours hiérarchique avec possibilités de limiter la profondeurpossibilités de limiter la profondeur (et les cycles avec la (et les cycles avec la clause clause CYCLE) avec type de recherche comme DEPTH FIRSTCYCLE) avec type de recherche comme DEPTH FIRST ou ou BREADTH FIRST BREADTH FIRST
EX : EX : Sélectionner tous les vols indirects au départ de NiceSélectionner tous les vols indirects au départ de NiceCreate view Create view RECURSIVERECURSIVE Vol-IND (VD, VA) AS Vol-IND (VD, VA) AS
(Select VD, VA(Select VD, VAfrom Volfrom VolunionunionSelect IN.VD, OUT.VASelect IN.VD, OUT.VAFrom Vol IN, Vol OUTFrom Vol IN, Vol OUTWhere IN.VA = OUT.VD and IN.HA < OUT.HD Where IN.VA = OUT.VD and IN.HA < OUT.HD
and and IN.Connections <3 )ou IN.Connections <3 )ou Search Breadth First by VD set …)Search Breadth First by VD set …)
Select * From VOL-IND Where VD = ‘Nice’;Select * From VOL-IND Where VD = ‘Nice’;
11/04/23 03:59 57Copyright 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;
11/04/23 03:59 58Copyright 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 » ;
11/04/23 03:59 59Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Contrôle) : SQL3 (Contrôle) : TRANSACTIONSTRANSACTIONS
Début et fin explicites pour transactions : Début et fin explicites pour transactions : START/COMMITSTART/COMMIT TRANSACTION TRANSACTION avecavec ISOLATION LEVEL (Read uncommitted, ISOLATION LEVEL (Read uncommitted, read committed, repeatable read, read committed, repeatable read, serializable) serializable) et 2 modes d’accèset 2 modes d’accès (read only, (read only, read write)read write)
SET LOCAL TRANSACTION SET LOCAL TRANSACTION (pour (pour transactions répartiestransactions réparties))
SET CONSTRAINTS (deferred, immediate)SET CONSTRAINTS (deferred, immediate) transactions en mode asynchrone avec transactions en mode asynchrone avec
asyncasync, , savepointsavepoint, , rollback to savepointrollback to savepoint .. .. Spécification SQL/XA défini par X/OpenSpécification SQL/XA défini par X/Open
11/04/23 03:59 60Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Contrôle) : SQL3 (Contrôle) : Sécurité des donnéesSécurité des données- create assertion- create assertion avec clauses avec clauses afterafter et et
beforebefore- intégrité référentielleintégrité référentielle (restrict…) (restrict…)- définition de rôlesdéfinition de rôles (create role) avec (create role) avec
GRANT/REVOKE possiblesGRANT/REVOKE possibles- PrivilegesPrivileges : Select, Delete, Update, Insert, : Select, Delete, Update, Insert,
References References (vues(vues), Usage ), Usage (modif. Schéma),(modif. Schéma), Trigger, Under, Execute, ALLTrigger, Under, Execute, ALL
11/04/23 03:59 61Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Manipulation) : SQL3 (Manipulation) : Langage HOTELangage HOTE
Langage hôte intégré « complet » : Langage hôte intégré « complet » : - Contrôle de boucle avecContrôle de boucle avec WHILE, IF THEN WHILE, IF THEN
ELSE, REPEAT, FOR et LOOP (LEAVE), ELSE, REPEAT, FOR et LOOP (LEAVE), CASECASE
- - déclaration de variables et assignationsdéclaration de variables et assignations- « Routines » définies dans le langage hôte : « Routines » définies dans le langage hôte :
« « FunctionsFunctions » ou « » ou « Procédures Procédures » : » :
SPECIFIC FUNCTION/ SPECIFIC FUNCTION/ PROCEDURE PROCEDURE
- Récursion linéaire possible entre procédures- Récursion linéaire possible entre procédures
11/04/23 03:59 62Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Manipulation) : SQL3 (Manipulation) : Langage HOTELangage HOTE
Exemple : Envois de mails aux étudiants du Master Miage Exemple : Envois de mails aux étudiants du Master Miage et du Master MBDS sur le programme de DB Forumet du Master MBDS sur le programme de DB Forum
IF (Select Diplome From Etudiants Where Club= « DB IF (Select Diplome From Etudiants Where Club= « DB Forum ») Forum »)
= MBDS= MBDSThen insert into send_mail (Master…)Then insert into send_mail (Master…)Elseif (Select Diplôme…) Elseif (Select Diplôme…)
= MIAGE= MIAGEThen Insert into send_mail (Master..)Then Insert into send_mail (Master..)
CASECASEWhen ‘valeur1’ Then..When ‘valeur1’ Then..When ‘valeur2’ ThenWhen ‘valeur2’ ThenElse <SQL> End CaseElse <SQL> End Case
11/04/23 03:59 63Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Manipulation) : SQL3 (Manipulation) : langage hôtelangage hôte
Langage d’Exception vis à vis du codeLangage d’Exception vis à vis du code SQLSTATE SQLSTATE avec :avec :
- 3 possibilités- 3 possibilités d’exécution : d’exécution :
CONTINUE, EXIT et UNDO CONTINUE, EXIT et UNDO
- la définition de conditions - la définition de conditions d’exception avecd’exception avec SIGNAL/RESIGNALSIGNAL/RESIGNAL
Possibilité de structuration en MODULES :Possibilité de structuration en MODULES :
« modules » :« modules » :{procedures}{procedures}
11/04/23 03:59 64Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Manipulation) : SQL3 (Manipulation) : SQL3 PSMSQL3 PSM
Langage de programmation de procédures : Langage de programmation de procédures : « « Procédures stockéesProcédures stockées » » de SQL3 pour de SQL3 pour ADT en plus des fonctions et des procédures : ADT en plus des fonctions et des procédures : PSMPSM : « Persistent Stored Modules » : « 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
11/04/23 03:59 65Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 (Manipulation) : SQL3 (Manipulation) : SQL3 PSMSQL3 PSM
Procédures stockéesProcédures stockées de SQL3 PSM de SQL3 PSM - Fonctions (monovaluées) : « actor » ou - Fonctions (monovaluées) : « actor » ou
« destructor »« 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 - PSM qui peut contenir des fonctions et des procéduresprocédures
ExempleExempleCreate moduleCreate module actions_pilote actions_piloteProcedure Affectation (..) Begin.. EndProcedure Affectation (..) Begin.. EndProcedure Vacances (…) Begin…EndProcedure Vacances (…) Begin…EndProcedure Formation (…) Begin… EndProcedure Formation (…) Begin… End
Appel de procédure par CALL Appel de procédure par CALL EXEC SQL EXEC SQL CALL CALL actions_pilotes.affectation (‘IT100’, ‘Paris’,actions_pilotes.affectation (‘IT100’, ‘Paris’, ‘Nice’,..)‘Nice’,..)
11/04/23 03:59Copyright Serge MIRANDA, "Objets et
BD" (Part IV) 66
II Présentation II Présentation critique du critique du
double double paradigme : paradigme :
valeur valeur et et pointeurpointeur (type (type
REF) dans SQL3 !REF) dans SQL3 !
11/04/23 03:59 67Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
SQL3 et 3ième Manifeste SQL3 et 3ième Manifeste de Date (96,99)de Date (96,99)
" " It seems clear It seems clear that the correct mapping of that the correct mapping of
encapsulated objects encapsulated objects into the relational data model into the relational data model
is that classes of objects is that classes of objects correspond to correspond to
DOMAINS (not to rows) « DOMAINS (not to rows) « DON CHAMBERLIN, DON CHAMBERLIN, membre SQL3 , IBM, Avril 97membre SQL3 , IBM, Avril 97
(InfoDB, Vol 10, numéro 6, p.25)(InfoDB, Vol 10, numéro 6, p.25)
11/04/23 03:59 68Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Modèle OR de Date
Modèle V1 de T. Codd Modèle OR de C.Date
Structure Opérateurs Structures Opérateurs de données de données
RELATIONS SQL2 RELATIONSSQL3
DOMAINES / CLASSES (D) Signature RICE dans « domaines » Opérateurs spécifiques Hiérarchie de Domaines.. dans SELECT ou
WHERE
11/04/23 03:59 69Copyright 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 d’une autre variable comme valeur (« indirection »)
11/04/23 03:59 70Copyright 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 <noms de colonne, noms de domaines>)
<--> 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 »
11/04/23 03:59 71Copyright 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)
11/04/23 03:59 72Copyright 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)
11/04/23 03:59 73Copyright 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 d’associer un ensemble
d’opérateurs spécifiques3 ) Aucune interdiction de construire une
hiérarchie de domainesDOMAINES = Naturellement, Classes d' OBJETS dans la
terminologie OO ! ( Propriétés RICE au niveau des domaines)
11/04/23 03:59 74Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
1) Ni les « TABLES » ni les « RELVARS » ne peuvent remplacer/Emuler le concept de « DOMAINES »
2) « Domaine » : seul niveau d’abstraction 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 »
Double CONSTAT !Double CONSTAT !
• Les RelationsLes Relations/TABLES /TABLES ne sont pas desne sont pas des « Domaines » !« Domaines » !
• Les RelationsLes Relations/RELVARS /RELVARS ne sont pas des ne sont pas des « Domaines » !« Domaines » !
11/04/23 03:59 75Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
11/04/23 03:59 76Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Retour sur le modèle RelationnelTABLES 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"
11/04/23 03:59 77Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Retour sur le modèle RelationnelTABLES vs DOMAINES
domaines statiques vs relations/Tables dynamiques
Une « relation/table » A un type (le RELVAR)
alors qu'un « domaine » EST un type
11/04/23 03:59 78Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Retour sur le modèle RelationnelRELVAR vs DOMAINES
Un domaine comprend des valeurs de complexité arbitraire
alors qu'un RELVAR contient des tuplesEX : Domaine DVille contient la valeur " Paris "
alors que le Relvar RVille contient le tuple <Dville : PARIS>
Un RELVAR n'encapsule pas des valeurs à la différence des domaines
11/04/23 03:59 79Copyright 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));
11/04/23 03:59 80Copyright 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 ;
11/04/23 03:59 81Copyright 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));
11/04/23 03:59 82Copyright 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
11/04/23 03:59 83Copyright 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
11/04/23 03:59 84Copyright 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 )
-
11/04/23 03:59 85Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Retour sur le modèle Relationnel(con't)
Table incorrecte d’un 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 ?
11/04/23 03:59 86Copyright 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 ?
11/04/23 03:59 87Copyright 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
11/04/23 03:59 88Copyright 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") : vadr
en C : ptr = &v; (avec char v; et char *ptr ; alors v=6; ou *ptr=6;)
en PL/1 DECLARE N INTEGERDECLARE P POINTERP= ADDR (N)
* Déréférencement ("dereferencing") : adrven C : *A ; en PL/1 : A--> V
11/04/23 03:59 89Copyright 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 s’appelle ref
Exemple :
Select ref (p) from pilote p where pnom = ‘serge’ ;
11/04/23 03:59 90Copyright 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é
11/04/23 03:59 91Copyright 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 !
11/04/23 03:59 92Copyright 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 « »
11/04/23 03:59 93Copyright 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)
<refavion de type REF : "refavion" contient des valeurs d'adresses de tuples (ROWID) d'avions pour traduire l ’avion préféré d'un pilote>
11/04/23 03:59 94Copyright 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# <opérateur de déréférencement>
FROM pilote p
WHERE p.adr = 'Nice' ;
11/04/23 03:59 95Copyright 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';
11/04/23 03:59 96Copyright 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) "
11/04/23 03:59 97Copyright 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' ;
11/04/23 03:59 98Copyright 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' ;
11/04/23 03:59 99Copyright 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-->pilnomFROM vol v
WHERE v.REFav-->avnom = ‘ Airbus ’;
11/04/23 03:59 100Copyright 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 l’avion de rechange est localisé à Nice ?
SELECT v.REFpil plnom
FROM vol v
WHERE v.REFav-->REFavbis-->LOC = ‘ Nice ’ ;
11/04/23 03:59 101Copyright 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' ;
11/04/23 03:59 102Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Exemple completExemple complet
Pilote (Pilote (PL#,PL#, PLNOM, ADR, PLNOM, ADR, REFAVIONREFAVION))
<REFAVION : Avion préféré d’un pilote><REFAVION : Avion préféré d’un pilote>
Avion (Avion (AV#,AV#, AVNOM, LOC AVNOM, LOC, , REFAVBIS, REFAVBIS, REFPILOTEREFPILOTE) ) <REFPILOTE Pilote attitré d’un <REFPILOTE Pilote attitré d’un avion ; avion ;
REFAVBIS : Référence avion de rechange>REFAVBIS : Référence avion de rechange>
Vol (Vol (Vol#,Vol#, PL#, AV#, PL#, AV#, REFPIL, REFAVREFPIL, REFAV, VD, VA, , VD, VA, HD, HA)HD, HA)
Quels sont les noms des pilotes préférant un Quels sont les noms des pilotes préférant un B747 qui conduisent un Airbus dont l’avion B747 qui conduisent un Airbus dont l’avion de rechange est l’ avion attitré de Jean? de rechange est l’ avion attitré de Jean?
11/04/23 03:59 103Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Exemple Exemple Quels sont les noms des pilotes Quels sont les noms des pilotes
préférant un B747 qui conduisent préférant un B747 qui conduisent un Airbus dont l’avion de un Airbus dont l’avion de
rechange est l’ avion attitré de rechange est l’ avion attitré de Jean? Jean? SELECT SELECT v.REFPIL v.REFPIL plnom plnom
FROM FROM vol vvol v
WHERE WHERE
((v.REFAV v.REFAV Avnom = ‘Airbus’, Avnom = ‘Airbus’, REFAVBIS REFAVBIS REFPILOTE REFPILOTE Plnom = ‘Jean’) Plnom = ‘Jean’)
and and
((v.REFPILv.REFPILREFAVIONREFAVION Avnom = ‘B747’)Avnom = ‘B747’) ; ;Traitez la en partie avec jointure de Traitez la en partie avec jointure de
SQL2SQL2
11/04/23 03:59 104Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Exemple (bis) Exemple (bis)
ouou
SELECT SELECT
v.REFpil v.REFpil plnom ?, refavionplnom ?, refavion AVNOM = AVNOM = ‘B747’‘B747’
FROM FROM vol vvol v
WHERE v.REFav WHERE v.REFav Avnom – ‘Airbus’ and Avnom – ‘Airbus’ and REFavbis REFavbis Refpilote Refpilote Plnom = ‘Jean’ ; Plnom = ‘Jean’ ;
11/04/23 03:59 105Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Exemple + complet !Exemple + complet !
Pilote (Pilote (PL#,PL#, PLNOM, ADR, PLNOM, ADR, REFAVION, REFAVION, REFCOPILREFCOPIL))
<REFAVION : Avion préféré d’un pilote><REFAVION : Avion préféré d’un pilote><<REFCOPIL : REFCOPIL : Référence Copilote>Référence Copilote>Avion (Avion (AV#,AV#, AVNOM, LOC AVNOM, LOC, REFAVBIS, , REFAVBIS,
REFPILOTEREFPILOTE) ) <REFPILOTE Pilote attitré d’un <REFPILOTE Pilote attitré d’un avion ; avion ; REFAVBIS : Référence avion de rechange>REFAVBIS : Référence avion de rechange>
Vol (Vol (Vol#,Vol#, PL#, AV#, PL#, AV#, REFPIL, REFAVREFPIL, REFAV, VD, VA, , VD, VA, HD, HA)HD, HA)
FORMATION (FORMATION (PL#,PL#, REFPILFREFPILF, , AVNOMAVNOM, DATE), DATE)
11/04/23 03:59 106Copyright 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 Nom des pilotes qui préfèrent un avion dont l’avion de rechange est avion dont l’avion de rechange est localisé à Nice et dont le pilote attitré localisé à Nice et dont le pilote attitré a un copilote habitant Nice qui a reçu a un copilote habitant Nice qui a reçu en 2000 une formation pour conduire en 2000 une formation pour conduire un A300 qui est l’avion préféré dont le un A300 qui est l’avion préféré dont le pilote attitré est un pilote Parisien ?pilote attitré est un pilote Parisien ?
Inventer une Requête utilisant 4 Fois Inventer une Requête utilisant 4 Fois de suite la navigation de suite la navigation ? ?
11/04/23 03:59 107Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Q 4 Q 4 ??
Select refPilSelect refPilNomNom
From volFrom vol
Where Where refAvrefAvrefPiloterefPiloterefAvionrefAvionrefAVbisrefAVbis
AVNom=‘Airbus’;AVNom=‘Airbus’;
En FR ?En FR ?
11/04/23 03:59 108Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Réponse ?Réponse ?
Select P.PLNOMSelect P.PLNOM
From Pilote P , Formation FFrom Pilote P , Formation F
WhereWhere
P.refavionP.refavion refavbis refavbis A.loc = « ‘Nice A.loc = « ‘Nice », Refpilote», Refpilote refcopil refcopil Adr = « Nice Adr = « Nice »»
P.PlP.Pl## = F.PL = F.PL## And F.date= « 2000 » And F.date= « 2000 » and F.Avnom= « A300 », and F.Avnom= « A300 », RefavionRefavionRefpiloteRefpilote Adr = ‘Paris » Adr = ‘Paris »
11/04/23 03:59 109Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
ExerciceExercice
Porter le schéma SQL3 précédent en Porter le schéma SQL3 précédent en schéma ODMG et répondez à une schéma ODMG et répondez à une requête mettant en jeu 4 « requête mettant en jeu 4 « » » Commentez les principales différences Commentez les principales différences
entre les 2 approchesentre les 2 approches
11/04/23 03:59 110Copyright 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)
11/04/23 03:59 111Copyright 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 ;
11/04/23 03:59 112Copyright 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 ;
11/04/23 03:59 113Copyright 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' ;
11/04/23 03:59 114Copyright 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 »)
11/04/23 03:59 115Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Type REF et ROWID : Type REF et ROWID : initialisation ?initialisation ?
CREATE TABLE VolCREATE TABLE Vol(Vol# Char(4),(Vol# Char(4),PL# reference PilotePL# reference PiloteREFPIL REF Pilote REFPIL REF Pilote ...)...)
La valeur du lien « REFPIL" est un RowID inaccessible par La valeur du lien « REFPIL" est un RowID inaccessible par l’utilisateur l’utilisateur (accès avec opérateur ref/ deref) (accès avec opérateur ref/ deref) et non plus et non plus une valeur de clé étrangère (PL#) manipulable par une valeur de clé étrangère (PL#) manipulable par l’utilisateurl’utilisateur
La clé étrangère et le type REF peuvent cohabiter dans La clé étrangère et le type REF peuvent cohabiter dans une même tableune même table
Le mot clé SCOPE FOR permet de limiter la visibilité des Le mot clé SCOPE FOR permet de limiter la visibilité des références à une table particulière (Alter table vol add références à une table particulière (Alter table vol add (scope for REFPIL is pilote1));(scope for REFPIL is pilote1));
11/04/23 03:59 116Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Initialisation ROWID ?Initialisation ROWID ?
Insert into VOL Insert into VOL ( IT100, 1, Nice, Paris, 7,8,( IT100, 1, Nice, Paris, 7,8,(Select (Select &ROW (p)&ROW (p) From Pilote p where p.nom From Pilote p where p.nom = ‘Serge’));= ‘Serge’));
Rappel : &ROW (ref en Oracle) : « Opérateur de Rappel : &ROW (ref en Oracle) : « Opérateur de référencement » associé à un ROWIDréférencement » associé à un ROWID
Note : En Oracle 9, la clause « Note : En Oracle 9, la clause « returning REF intoreturning REF into » permet de récupérer » permet de récupérer le ROWID d’un tuplele ROWID d’un tuple
Exemple : Exemple : Insert into pilote values (1,Serge, Toulouse, Insert into pilote values (1,Serge, Toulouse, Returning Ref (pilote) Returning Ref (pilote) into pil-ref)into pil-ref)insert into Vol values (IT100, 1, Nice,Paris, 7,8, insert into Vol values (IT100, 1, Nice,Paris, 7,8, pil-refpil-ref))
11/04/23 03:59 117Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Initialisation ROWID ?Initialisation ROWID ?
Retour du RAT (« Retour du RAT (« Record at-a-time ») dans Record at-a-time ») dans lele SAT (« SAT (« Set at-a-timeSet at-a-time ») ! ») !
« Chasser le RAT dans SQL2 , il revient au « Chasser le RAT dans SQL2 , il revient au galop avec le type REF dans SQL3 ! »galop avec le type REF dans SQL3 ! »
Un lien multivalué (1:N ou N:M ) se traduit par un type REF Un lien multivalué (1:N ou N:M ) se traduit par un type REF permettant d’avoir des jointures « cablées » au niveau permettant d’avoir des jointures « cablées » au niveau TABLE ou TYPETABLE ou TYPE
La gestion d’initialisation et de manipulation des pointeurs La gestion d’initialisation et de manipulation des pointeurs associés est affaire de développeurs RATassociés est affaire de développeurs RAT
11/04/23 03:59 118Copyright 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 l’opérateur de déréférencement
11/04/23 03:59 119Copyright 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) n’est pas un bon standard
(qui évolue…)!
11/04/23 03:59 120Copyright 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
11/04/23 03:59 121Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Remarques sur les paradigmes de développement et SQL
Développement d’application
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
11/04/23 03:59 122Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Remarques sur les paradigmes de développement et SQL
Développement d’application
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
11/04/23 03:59 123Copyright 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
11/04/23 03:59 124Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Select e.QUESTIONSFrom Etudiants eWhere e.esprit = ‘positif’