Les standards des SGBD du Futur (survol) Prof Serge Miranda Juin 2005 DATA BASE forum.

Post on 03-Apr-2015

104 views 1 download

Transcript of Les standards des SGBD du Futur (survol) Prof Serge Miranda Juin 2005 DATA BASE forum.

Les standards des Les standards des SGBD du FuturSGBD du Futur

(survol)(survol)

Prof Serge MirandaProf Serge Miranda

Juin 2005Juin 2005

DATA BASE forum

Un peu de PUB…Un peu de PUB…

PlanPlan

Les quadrants de Les quadrants de StonebrakerStonebraker

Présentaion de Présentaion de SQL3 et ODMG su SQL3 et ODMG su un exempleun exemple

Bilan synthétiqueBilan synthétique

24 ParisPaul

ConducteurAge

45Paul

17Robert

Rapport

134

219

Photo

037

Accident

Table ? Objet ?

Police NomAdresse Conducteurs Accidents

Exemple de table et objet (Oracle)

Surfeurs sur la vague OR….

Faiblesses du modèle relationnel

• Opérations séparées des données– procédures stockées non intégrées DM– absence d'attributs cachés

• Support de domaines atomiques– 1ère forme normale de Codd– inadapté aux objets complexes

(documents structurés)– introduction des BLOB….

• Mauvais support des applications non gestion :CAO, CFAO, BD Géographiques,BD techniques

Langage Prog.OBJET

Modèle Relationnelde Codd (V1)

Modèle OR(Objet- Relationnel)

Modèle OR ?

PropriétésRICE

PropriétésTIPS

Propriétés TIPS + RICE

1- Compatibilité ascendante"Réutiliser et enrichir l'existant" CNAF (4 Dec 1996)2- "Evoluer en douceur vers l'objet"

Evolution de l'informatique etOBJET

1965LP OS

1970 LP

IA SGF SGBD

OS : Operating SERVICES ?

Evolution de l'informatique

Services OS :

Gestion des ressources physiques

algorithme de pagination Sécurité

Confidentialité d'ACCES Contrôle de Synchronisation (sémaphores,verrouillage, deadlock, ... )

Modélisation : (" processus ") •.... pas de langage de programmation

1970 OS SGBDR SGF

Services SGBD-R ( Propriétés TIPS ): (P) GestionPersistance

LRU ++

(T) Sécurité & Transactionnel

Intégrité

S) Structuration/ Schéma via des modèles de données

• (I) Interface utilisateur Non procédurale(SQL)

Evolution de l'informatique et OBJET

198OOS

SGBD-R

SGBD-ROS

LP

IA

1990 OS

Objet LP SGBD-R

IA

Evolution de l'informatique

2000 ?" Il est dur de prédire, particulièrement ... le futur " N.Boehr

?

? ?

SERVICES ?

Evolution du logiciel et OBJETS

DONNEES TRAITEMENTS

OBJETS

SGBD-R L.P ( SQL ) ( Prog. structurée )

GENIE LOGICIEL

COMMUNICATION

Approche Objet et développement d'application

INTERFACE

APPLICATION

SGBD

Approche Objet

IntégrationObjet

DB

PB : " IMPEDANCE MISMATCH «  et productivité du développeur

Marché BD et standards ?Marché BD et standards ?(Stonebraker 96 et Gartner)

SGBD- R SGBD-OR

Traitements

SQL

NonSQL

(1) (2)

SGF SGBD- OO(3)

(1) : 8 G$ en 1995 (30 % de croissance)

(3) : 1/100 de (1) en 1995 et 2008

(2) : 1/2 de (3) en 1995 ; 2*(1) en 2008 !

SQL2 SQL3

ODMG

Simples Complexes Données

Visions de l'Objet

VISION DOUBLE :

(i) LP : objet "encapsulé”

Opérateurs SPECIFIQUES (classes, propriétés)

héritage (instantiation) Polymorphisme

(ii) BD : objet "structuré”

opérateurs GENERIQUES (algèbre, ...) Persistance Concurrence / reprise sur panne

Dualité des concepts structurels

Propriétés RICE d'unSGBD OBJET

(Miranda, 2002) Dunod

(Incrémentales par rapport à un SGBD relationnel)

R (Réutilisabilité) : "Héritage" ou "polymorphisme"

==> Graphe héritageI (Identification système)

C (Constructeurs d'objets complexes) Orthogonalité TUPLE et SET

==> Graphes d'agrégationE ("Encapsulation")

"Messages", "Méthodes", "CLASSES d’Objets »

DEFINITION : Une CLASSE d ’OBJETS - est un (« valeurs potentielles ») - possède un (« valeurs réelles »)

TYPE de DONNEES qui vérifie les propriétés RICE....

Définition Classe d’Objets ?

DEFINITION : Une CLASSE d ’OBJETS - est un (« valeurs potentielles ») - possède un (« valeurs réelles »)

TYPE de DONNEES qui vérifie les propriétés RICE....

Consortium ODMGConsortium ODMG

Créé en 1991 par Rick Cattell (SUN, Javasoft) comme Créé en 1991 par Rick Cattell (SUN, Javasoft) comme sous groupe de l’ OMG (sous groupe de l’ OMG (Object Management Group) Object Management Group) avec les éditeurs suivants: 02 Tech., Objectivity, Object avec les éditeurs suivants: 02 Tech., Objectivity, Object Design, Ontos, VersantDesign, Ontos, Versant

OMG : CORBA,…OMG : CORBA,…

plus de 50 organisations de l’industrie et de plus de 50 organisations de l’industrie et de l’informatique en 2000l’informatique en 2000

(Lucent, Lockheed, CA, Microsoft, Baan, ...)(Lucent, Lockheed, CA, Microsoft, Baan, ...)

Objectifs:Objectifs: Promouvoir les OO DBMS,Promouvoir les OO DBMS, FUD FUD , au delà des , au delà des

niches et standard avant …SQL3 !niches et standard avant …SQL3 ! Créer un standard pour garantir l’indépendance Créer un standard pour garantir l’indépendance

entre OODBMS (entre OODBMS (Portability)Portability)

Historique du standard Historique du standard « 00 »« 00 »

Objectif « portabilité Objectif « portabilité Code »Code » Première réunion à l’initiative de Rick Première réunion à l’initiative de Rick

Catell chez Sun en Sept 91Catell chez Sun en Sept 91 ODMG 1.0 (1993) : 5 EditeursODMG 1.0 (1993) : 5 Editeurs

ODL, OQL, Interface C++, SmalltalkODL, OQL, Interface C++, Smalltalk ODMG 2.0 (1996) : 10 Editeurs (Poet, ODMG 2.0 (1996) : 10 Editeurs (Poet,

Lucent, Windward, American Man, Barry)Lucent, Windward, American Man, Barry) Interface JavaInterface Java (Java Binding) (Java Binding) , , Meta Model, OIFMeta Model, OIF

ODMG 3.0 (2000)ODMG 3.0 (2000) enrichissement interface Javaenrichissement interface Java Accent sur intégration avec OMG et X3H2 ( SQL3)Accent sur intégration avec OMG et X3H2 ( SQL3)

Composants du standard ODMG 3.0Composants du standard ODMG 3.0

SGBDOO

OQL OML C++ OML Smalltalk

Adaptation du modèle objet de l'OMGAdaptation du modèle objet de l'OMG Interfaces d'accès à un SGBDOOInterfaces d'accès à un SGBDOO

OML Java

ODL

OIF

Composants du Composants du standard standard ODMG 3.0ODMG 3.0

Modèle de données Objet dérivé de Modèle de données Objet dérivé de l’OMGl’OMG

Langages de spécificationsLangages de spécifications ODL : langage de définition d’objetsODL : langage de définition d’objets OIF (OIF (object Interchange Formatobject Interchange Format) : ) :

import/exportimport/export Langage de requête : OQL (avec Langage de requête : OQL (avec

retour sur base SQL)retour sur base SQL) OML (avec Liaisons)OML (avec Liaisons)

C++, SMALLTALK et JAVAC++, SMALLTALK et JAVA

Composants du Composants du standard standard ODMG 3.0ODMG 3.0

Modèle de données Objet dérivé de Modèle de données Objet dérivé de l’OMGl’OMG

Langages de spécificationsLangages de spécifications ODL : langage de définition d’objetsODL : langage de définition d’objets OIF (OIF (object Interchange Formatobject Interchange Format) : ) :

import/exportimport/export Langage de requête : OQL (avec Langage de requête : OQL (avec

retour sur base SQL)retour sur base SQL) OML (avec Liaisons)OML (avec Liaisons)

C++, SMALLTALK et JAVAC++, SMALLTALK et JAVA

RICE et ODMGRICE et ODMG RR * HERITAGE MULTIPLE (C++)* HERITAGE MULTIPLE (C++) II * OID* OID CC * STRUCTURE* STRUCTURE

* COLLECTIONS : * COLLECTIONS : SET, BAG, LIST, ARRAY, SET, BAG, LIST, ARRAY,

DictionaryDictionary* pointeurs bidirect. * pointeurs bidirect. REFREF et et

INVERSEINVERSE EE * Objets avec méthodes* Objets avec méthodes

1. Expression de chemin mono-valuée

- Séquence d'attributs ou associations (« relationship ») mono-valués de la forme X1.X2…Xn telle que chaque Xi à l'exception du dernier contienne une référence à un objet ou un litéral unique sur lequel le suivant s'applique.

- Utilisable en place d'un attribut SQL dans SELECT ou WHERE

2) Collection dépendante

- Collection obtenue à partir d'un objet, soit parce qu'elle est imbriquée dans l'objet ou pointée par l'objet.

- Utilisable dans FROM

OQL (nouveautés « SQL »)

Exemple ODLExemple ODL

Liaison C++Liaison C++

CLASS employe { CLASS employe {

E# INT,E# INT,

Nom STRING,Nom STRING,

Adresse ADDRESS <Adresse ADDRESS <autre classeautre classe>>

//méthodes...}//méthodes...}

Exemple ODLExemple ODL

CLASS CLASS pilote : employepilote : employe { {Nbre-H-Vol# INT,Nbre-H-Vol# INT,salaire FLOAT,salaire FLOAT,SET REF <vol> assure INVERSE est_assuré_parSET REF <vol> assure INVERSE est_assuré_par//méthodes...}//méthodes...}

CLASS vol {CLASS vol {V# STRING,V# STRING,REF <pilote> est_assuré_par INVERSE assure,REF <pilote> est_assuré_par INVERSE assure,REF <avion> utilise INVERSE est_utilisé_dansREF <avion> utilise INVERSE est_utilisé_dans,.,.VD...}VD...}

Exemple ODLExemple ODL

CLASS avion : {CLASS avion : {av# INT,av# INT,

avnom STRING,avnom STRING,

……

SET REF <vol> est_utilisé_dans SET REF <vol> est_utilisé_dans INVERSE utiliseINVERSE utilise

……}}

Exemple OQLExemple OQLQuels sont les numéros des vols Quels sont les numéros des vols

assurés par un pilote de nom assurés par un pilote de nom 'Serge' ?'Serge' ?

1) 1) SELECT v.v#SELECT v.v#FROM FROM

v IN volv IN volp IN v.est_assure_parp IN v.est_assure_par

WHERE p.Nom = 'Serge' ;WHERE p.Nom = 'Serge' ;

Exemple OQLExemple OQLQuels sont les numéros des vols Quels sont les numéros des vols

assurés par un pilote de nom assurés par un pilote de nom 'Serge' ?'Serge' ? 2 2 Select v.v# Select v.v#

from v IN volfrom v IN volwherewhere

v.est_assure_par.Nomv.est_assure_par.Nom=‘Serge’;=‘Serge’;

<Expression<Expression monovaluée monovaluée X1.X2.X3X1.X2.X3>>

Exemple OQLExemple OQL Quels sont les noms des avions conduits Quels sont les noms des avions conduits

par un pilote Niçois ?par un pilote Niçois ?<Parcours d’ associations multivaluées en <Parcours d’ associations multivaluées en

utilisant des collections dépendantes>utilisant des collections dépendantes>1) 1) SELECT SELECT a.avnoma.avnomFROMFROM a in avion a in avion <in COLLECTION<in COLLECTION>>

v in a.est_utilisé_dans v in a.est_utilisé_dans <in COLLECTION><in COLLECTION>

p in v.est_assuré_parp in v.est_assuré_parWHEREWHERE p.adr = ‘ Nice ’ ;p.adr = ‘ Nice ’ ;

Exemple OQLExemple OQL Quels sont les noms des avions Quels sont les noms des avions

conduits par un pilote Niçois ?conduits par un pilote Niçois ?<Parcours d’ associations multivaluées en <Parcours d’ associations multivaluées en

utilisant des collections dépendantes>utilisant des collections dépendantes>2)2)SELECT SELECT a.avnoma.avnomFROMFROM a in avion a in avion <in COLLECTION<in COLLECTION>>

v in a.est_utilisé_dans v in a.est_utilisé_dans <in <in COLLECTION>COLLECTION>

WHEREWHERE v.est_assuré_par.adrv.est_assuré_par.adr= ‘Nice’= ‘Nice’ <Expression><Expression>

ExemplesExemples

Noms des pilotes Niçois qui Noms des pilotes Niçois qui assurent un vol au départ de Nice assurent un vol au départ de Nice avec un avion localisé à Nice ?avec un avion localisé à Nice ?

Noms des pilotes qui habitent Noms des pilotes qui habitent dans la ville de localisation d’un dans la ville de localisation d’un Airbus ?Airbus ?

Exemple quantificateur Exemple quantificateur universeluniversel

Quels sont les noms des pilotes Quels sont les noms des pilotes qui conduisent TOUS les Airbus qui conduisent TOUS les Airbus localisés à Nice ?localisés à Nice ?

Select p.plnomSelect p.plnomFrom p in piloteFrom p in pilote

V in p.assureV in p.assureFor all a in V.utilise : a.avnom For all a in V.utilise : a.avnom

= ‘airbus = ‘airbus ’ ’ and a.loc = ‘Nice’;and a.loc = ‘Nice’;

SQL3… SQL3…

(« SQL99 »)(« SQL99 »)

SELECT quelque chose avec image et son FROM quelque part ++ WHERE condition ++

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……

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’ CLASSE D’ OBJETSOBJETS

CREATE TABLECREATE TABLECREATE TYPECREATE TYPE

1) « 1) « TABLETABLE », :  », : Create tableCreate table

structure de données de base (structure de données de base (relation NF2 possible)relation NF2 possible) pour le pour le stockage en mémoire persistantestockage en mémoire persistante et la et la manipulation ensembliste manipulation ensembliste avec VALEURS et POINTEURS avec VALEURS et POINTEURS ((double paradigmedouble paradigme !) !)

1.1 1.1 « Table Objet »« Table Objet » possible (clause «  possible (clause « With IdentityWith Identity »)  ») ROWID ROWID Type REF possible Type REF possible

1.2 Table « relationnelle » sinon1.2 Table « relationnelle » sinon

Concept OBJET dans Concept OBJET dans SQL3 ?SQL3 ?

2) 2) «  TYPE » : «  TYPE » : Create typeCreate type (classe (classe d’objets)d’objets)

2.1) - (2.1) - (« « VALUE ») ADTVALUE ») ADT Pas d’ OID, valeur pour attribut dans relationPas d’ OID, valeur pour attribut dans relation Types de baseTypes de base

2.2) - (« 2.2) - (« OBJECT ») ADT OBJECT ») ADT (Create (Create type with OID <visible>)type with OID <visible>)

OID pour chaque instance (pas d’ OID par défaut)OID pour chaque instance (pas d’ OID par défaut) Types possibles pour attributs ou autres ADT, variables Types possibles pour attributs ou autres ADT, variables

SQL…SQL… Type REF (avec OID) possible associéType REF (avec OID) possible associé

SQL3 SQL3

RR : :

* HERITAGE MULTIPLE hybride* HERITAGE MULTIPLE hybride (clause"(clause"UNDERUNDER" pour les TABLES et " pour les TABLES et

les les TYPES)TYPES)

* * POLYMORPHISMEPOLYMORPHISME (Surcharge) et(Surcharge) etTEMPLATES TEMPLATES (types génériques/ (types génériques/

paramétrés)paramétrés)

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

SQL3 et RICESQL3 et RICE 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 baseSupport d’objets complexes (tables ou

ADT) :- Constructeur de Collections : "SET", "LIST", "MULTISET" (agrégation de

tables) - Constructeur tuple/produit cartésien (ROW)

SQL3 SQL3

CC : : TYPES (ADT) et TABLESTYPES (ADT) et TABLES

TABLESTABLES avec avec

« « With identity » (ROWID) With identity » (ROWID) : : classe d’objetsclasse d’objets

sans ROWID : table relationnellesans ROWID : table relationnelle

des attributs "des attributs "storedstored" ou "" ou "virtualvirtual" "

("("updatableupdatable", "", "readread--onlyonly", "", "constantconstant")")

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

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 REFREF PilotePilote <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 adresse,SET adresse, <Ensemble d’adresses ; insertion avec SET (ROW(‘..’))><Ensemble d’adresses ; insertion avec SET (ROW(‘..’))>

REVISION boolean)REVISION boolean)Imbrication définition sur ADT (ex Adresse) possible à plusieurs niveauxImbrication définition sur ADT (ex Adresse) possible à plusieurs niveauxAttributs « PRIVATE » non visibles pour l’utilisateur ; « PROTECTED » Attributs « PRIVATE » non visibles pour l’utilisateur ; « PROTECTED »

visibles seulement pour les sous typesvisibles seulement pour les sous types

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>

...)...)

Nouveautés SQL3Nouveautés SQL3

Trois extensions de SQL2 (pour les tables) :

ROWID, 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’ ;

SQL3SQL3

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é

SQL3SQL3

Type "REF" dans 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 !

SQL3SQL3

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 :

Informations sur les pilotes assurant un vol au départ de Paris ?

Select deref (REFPIL) from vol where VD= ‘Paris’ ;

Notation ‘.’ possible dans Oracle 9 pour «  »

ExempleExemple

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>

ExempleExemple

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 pWHERE p.adr = 'Nice' ;

Exemple SQL3Exemple SQL3 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.PlnomFROM Pilote pWHERE p.refavion -->refpilote

-->Adr = 'Nice' ;

Double JOIN en SQL3Double JOIN en SQL3

• 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 ’;

AUTO JOINTUREAUTO JOINTURE

• 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 ’ ;

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é <REFPILOTE Pilote attitré d’un avion ; d’un 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, , VD, VA, HD, HA)VA, HD, HA)

Quels sont les noms des pilotes Quels sont les noms des pilotes

préférant un B747 qui préférant un B747 qui conduisent un Airbus dont conduisent un Airbus dont

l’avion de rechange est l’ avion l’avion de rechange est l’ avion attitré de Jean? attitré de Jean? SELECT v.REFPIL SELECT v.REFPIL plnom plnom

FROM FROM vol vvol v

WHERE WHERE

(v.REFAV (v.REFAV Avnom = ‘Airbus’, REFAVBIS Avnom = ‘Airbus’, REFAVBIS REFPILOTE REFPILOTE Plnom = ‘Jean’) Plnom = ‘Jean’)

and and

(v.REFPIL(v.REFPILREFAVIONREFAVION Avnom = ‘B747’) Avnom = ‘B747’) ; ;

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 une et non plus une valeur de clé étrangère (PL#) manipulable par l’utilisateurvaleur de clé étrangère (PL#) manipulable par l’utilisateur

La clé étrangère et le type REF peuvent cohabiter dans une La clé étrangère et le type REF peuvent cohabiter dans une même tablemê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 (scope références à une table particulière (Alter table vol add (scope for REFPIL is pilote1));for REFPIL is pilote1));

Initialisation ROWID ?Initialisation ROWID ?

Insert into VOL Insert into VOL ( IT100, 1, Nice, Paris, 7,8,( IT100, 1, Nice, Paris, 7,8,(Select &ROW (p) From Pilote p where Pnom = (Select &ROW (p) From Pilote p where Pnom = ‘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 « returning REF into » permet de récupérer le Note : En Oracle 9, la clause « returning REF into » 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 Returning Ref (pilote) into pil-ref)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))

Paradigmes de devt et Paradigmes de devt et SQLSQL

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

Select e.QUESTIONSFrom Etudiants eWhere e.esprit = ‘positif’