Upload
pascaline-vacher
View
120
Download
15
Embed Size (px)
Citation preview
11/04/23 03:56Copyright 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:56Copyright 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 (SQL99) (SQL99)
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:56 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:56 4Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Standard SQL(petite Standard SQL(petite histoire)histoire)
SEQUEL 1 (1974) de System R d’IBM, SEQUEL 2 SEQUEL 1 (1974) de System R d’IBM, SEQUEL 2 (1977)(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 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)…
SQL2003, SQL2006, SQL2008SQL2003, SQL2006, SQL2008……
SQL post 2003 : XML ++SQL post 2003 : XML ++
SQL 2006 : SQL 2006 : ISO/IEC 9075-14:2006 ISO/IEC 9075-14:2006
ways in which SQL can be used in conjunction with ways in which SQL can be used in conjunction with XML. It defines ways XML. It defines ways of importing and storing XML of importing and storing XML data in an SQL databasedata in an SQL database, , manipulating it within the manipulating it within the database and publishing both XML and conventional database and publishing both XML and conventional SQL-data in XML form.SQL-data in XML form.
² In addition, it enables ² In addition, it enables applications to integrate into applications to integrate into their SQL code the use of their SQL code the use of XQuery, the XML Query , the XML Query LanguageLanguage published by the World Wide Web published by the World Wide Web Consortium (Consortium (W3C), to concurrently access ordinary SQL-), to concurrently access ordinary SQL-data and XML documents.data and XML documents.
11/04/23 03:56 5Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
11/04/23 03:56 6Copyright 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:56 7Copyright 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:56 8Copyright 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:56 9Copyright 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:56 10Copyright 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:56 11Copyright 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é
« Type » de SQL3 vs « Type » de SQL3 vs « Domaine »« Domaine »
« Type » de SQL3« Type » de SQL3 Structuration possible avec attributs Structuration possible avec attributs
(Constructeur ROW,..) comme une « table » (Constructeur ROW,..) comme une « table » SQLSQL
Pas de différence structurelle avec « tables » Pas de différence structurelle avec « tables » sauf la persistencesauf la persistence
« Domaine » de Codd/Date« Domaine » de Codd/Date « VALEURS » uniquement (pouvant être de « VALEURS » uniquement (pouvant être de
complexité arbitraire)complexité arbitraire) « Domaine « de Date : « Type de Données « Domaine « de Date : « Type de Données
Sémantique qui vérifie les propriétés RICE »Sémantique qui vérifie les propriétés RICE »
11/04/23 03:56 12Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
11/04/23 03:56 13Copyright 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:56 14Copyright 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:56 15Copyright 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:56 16Copyright 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:56 17Copyright 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:56 18Copyright 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:56 19Copyright 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 type type (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 Conjoint REF REF Personne Personne WITH IDENTITYWITH 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:56 20Copyright 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 OID <visible>with OID <visible>(nom varchar not null,(nom varchar not null,sexe constant,sexe constant,age virtual...age virtual...date-naissance date,date-naissance date,
ACTOR ACTOR FUNCTIONFUNCTION age age (:P personne_type) return real ...(:P personne_type) return real ...DESTRUCTOR DESTRUCTOR FUNCTIONFUNCTION enlever_personne..; enlever_personne..; End function)End function)
11/04/23 03:56 21Copyright 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:56 22Copyright 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 tCreate table T of type tExemple : 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- distinction OID OID (16 Octets, immuable, non indexable) (16 Octets, immuable, non indexable) et et ROWIDROWID (10 octets, non immuable, indexable) (10 octets, non immuable, indexable)- - PKOIDPKOID (pseudo OID sur les vues : « Primary key (pseudo OID sur les vues : « Primary key OID »)/OID »)/PKREFPKREF : une vue peut servir à créer un OID sur : 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:56 23Copyright 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:56 24Copyright 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:56 25Copyright 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:56 26Copyright 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:56 27Copyright 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:56 28Copyright 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:56 29Copyright 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:56 30Copyright 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:56 31Copyright 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:56 32Copyright 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:56 33Copyright 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:56 34Copyright 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:56 35Copyright 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:56 36Copyright 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:56 37Copyright 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:56 38Copyright 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:56 39Copyright 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:56 40Copyright 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:56 41Copyright 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:56 42Copyright 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:56 43Copyright 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:56 44Copyright 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:56 45Copyright 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:56 46Copyright 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:56 47Copyright 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:56 48Copyright 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:56 49Copyright 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:56 50Copyright 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:56 51Copyright 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:56 52Copyright 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:56 53Copyright 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:56 54Copyright 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:56 55Copyright 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:56 56Copyright 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:56 57Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
ExemplesExemples
11/04/23 03:56 58Copyright 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:56 59Copyright 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:56 60Copyright 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:56 61Copyright 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:56 62Copyright 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:56 63Copyright 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:56 64Copyright 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:56 65Copyright 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:56 66Copyright 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:56 67Copyright 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:56Copyright Serge MIRANDA, "Objets et
BD" (Part IV) 68
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:56 69Copyright 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:56 70Copyright 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:56 71Copyright 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:56 72Copyright 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:56 73Copyright 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:56 74Copyright 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:56 75Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
« DOMAINES » ?
1) Aucune restriction sur la complexité des 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 domaines
DOMAINES = Naturellement, Classes d' OBJETS dans la terminologie OO ! ( Propriétés RICE au niveau des domaines) : « TYPE DE DONNEES sémantique qui vérifie les propriétés RICE » (DATE et 3ieme manifeste)
11/04/23 03:56 76Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
« Domaine » : seul niveau d’abstraction SEMANTIQUE incontournable entre les « valeurs » et les « relations » candidat NATUREL au support de CLASSES d’ OBJETS (propriété RICE)
Ni les « TABLES », ni les « RELVARS », ne peuvent remplacer/Emuler le concept de « DOMAINES »
« 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:56 77Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
11/04/23 03:56 78Copyright 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:56 79Copyright 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:56 80Copyright 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:56 81Copyright 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 (Manifeste de Stonebraker /SQL3 Avec Table/Classe) :
CREATE TABLE PERSONNE
(SS# CHAR(9),
DATE-NAISS DATE,
ADDRESSE CHAR (50));
11/04/23 03:56 82Copyright 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) < REF ds SQL3>
TRAVAILLE_POUR (COMPAGNIE) <Ref ds SQL3>
METHODES
RETRAITE (..): NUMERIC ;
11/04/23 03:56 83Copyright 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:56 84Copyright 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:56 85Copyright 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:56 86Copyright 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:56 87Copyright 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 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:56 88Copyright 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:56 89Copyright 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:56 90Copyright 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:56 91Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Extensions Pointeurs ds SQL3
Trois extensions de SQL2 (pour les tables) :
ROWID (ptr ligne), type REF, « --> »
1- Pointeur Ligne : 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:56 92Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Type REF de SQL3
2- Type "REF" : les valeurs d'une colonne peuvent être des POINTEURS ligne ("adresses de tuples" /ROWID) d'une autre relation.
Exemple : Dans la table pilote, un attribut "refavion" vatraduire 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:56 93Copyright 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:56 94Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
1)Opérateur de REFERENCEMENT : « &ROW » (REF en Oracle)
VALEUR en entrée : POINTEUR-Ligne en sortie
Utilisation réduite en SQL3 sauf pour INSERTION de tuples
2) Opérateur de DEREFERENCEMENT : « » (DEREF en Oracle)
POINTEUR LIGNE en ENTR2E (ROWID) : VALEURS en Sortie
Exploitable dans SELECT/WHEREOpérateur retenu dans
RECHERCHE INFORMATION REFX VALEURS
11/04/23 03:56 95Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Opérateur de déréferencement 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:56 96Copyright 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:56 97Copyright 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:56 98Copyright 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:56 99Copyright 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:56 100Copyright 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:56 101Copyright 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:56 102Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Noms des pilotes attitrés d’un A300 qui préfèrent un B747 ?
11/04/23 03:56 103Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Noms des pilotes attitrés d’un A300 qui préfèrent un B747 ?
Select a.Refpilote PlnomFrom Avion aWhere a.Avnom=A300 and a.RefpiloteRefavionAvnom=B747 ;
11/04/23 03:56 104Copyright 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:56 105Copyright 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:56 106Copyright 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:56 107Copyright 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:56 108Copyright 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:56 109Copyright 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:56 110Copyright 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:56 111Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Question avec le MAX de Question avec le MAX de
Inventer une Requête utilisant 4 Inventer une Requête utilisant 4 Fois de suite la navigation Fois de suite la navigation ? ?
11/04/23 03:56 112Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Q 4 Q 4 ??
Select refPilSelect refPilNomNom
From volFrom vol
Where Where refAvrefAvrefPiloterefPiloterefAvionrefAvionrefAVbisrefAVbis
AVNom=‘AirbusAVNom=‘Airbus’;’;
En FR ?En FR ?
Q5 Q5
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 localisé à Nice et dont le pilote attitré a un copilote habitant Nice attitré a un copilote habitant Nice qui a reçu en 2000 une formation qui a reçu en 2000 une formation pour conduire un A300 ?pour conduire un A300 ?
11/04/23 03:56 113Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
11/04/23 03:56 114Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Réponse Q5Réponse Q5
Select P.PLNOMSelect P.PLNOM
From Pilote P From Pilote P
Where P.refavionWhere P.refavion refavbis refavbis A.loc = « A.loc = « ‘Nice », Refpilote‘Nice », Refpilote refcopil refcopil Adr = « Adr = « Nice », Nice », PLPL## In Select (F.PL In Select (F.PL## From From Formation F Where F.date= « 2000 » Formation F Where F.date= « 2000 » and F.Avnom= « A300 »)and F.Avnom= « A300 »)
Note : à la différence de l ODMG on peut mixer Note : à la différence de l ODMG on peut mixer SQL2 et SQL3 dans une requêteSQL2 et SQL3 dans une requête
11/04/23 03:56 115Copyright 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 approches (définition et entre les 2 approches (définition et manipulation)manipulation)
11/04/23 03:56 116Copyright 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:56 117Copyright 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:56 118Copyright 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:56 119Copyright 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:56 120Copyright 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:56 121Copyright 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:56 122Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Initialisation ROWID ?Initialisation ROWID ?
Insert into VOL Insert into VOL ( IT100, 1, 100, Nice, Paris, 7,8,( IT100, 1, 100, Nice, Paris, 7,8,(Select (Select &ROW (p)&ROW (p) From Pilote p where p.PL = From Pilote p where p.PL = 1 ), Select 1 ), Select &ROW (a)&ROW (a) From Avion a where a.AV From Avion a where a.AV =100 );=100 );
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 le » permet de récupérer le ROWID d’un tupleROWID d’un tuple
Exemple : Exemple : Insert into pilote values (1,Serge, Toulouse, Insert into pilote values (1,Serge, Toulouse, Returning Ref (pilote) into pil-Returning Ref (pilote) into pil-ref)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:56 123Copyright 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:56 124Copyright 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;
Les jointures se font EXCLUSIVEMENT par suivi de pointeurs
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
3) Join Relationnel ou par opérateur de déréférencement
11/04/23 03:56 125Copyright 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:56 126Copyright 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:56 127Copyright 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:56 128Copyright 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:56 129Copyright 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:56 130Copyright Serge MIRANDA, "Objets et
BD" (Part IV)
Select e.QUESTIONSFrom Etudiants eWhere e.esprit = ‘positif’