les standards des sgbd du futur (survol) prof serge miranda juin 2005 data base forum
TRANSCRIPT
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’