0% ont trouvé ce document utile (0 vote)
31 vues39 pages

Introduction à SQL3 et Objet-Relationnel

Transféré par

lazrek safa
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
31 vues39 pages

Introduction à SQL3 et Objet-Relationnel

Transféré par

lazrek safa
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

L ’OBJET-RELATIONNEL

u Présentation de la norme SQL3

u Support de SQL3 dans Oracle 8

u Les systèmes Objet-relationnel

© Béatrice Finance 1
1. Evolution des SGBD relationnels

u Années 80 :
w centrés sur le transactionnel
w applications dites OLTP (One Line Transaction Processing)

u Années 90 :
w développement du décisionnel
w applications dites OLAP (One Line Analysis Processing)
w intégration de données multi-dimensionnelle (cube 3D)

u Années 95 :
w besoins croissants des applications avancées (CAO, AGL, SIG,…)
w avènement des technologies objet et du Web

© Béatrice Finance 2
1. LA NORMALISATION

u SQL2 [ISO92] :
w diversification des domaines :
- dates, monnaies, le temps et les intervalles,
- les chaînes de bits (LOBs, BLOBs, CLOBs)
w meilleur support de l ’intégrité (clause CHECK)
w intégration étendue de l ’algèbre relationnelle (union et jointure
externes, meilleure gestion des valeurs nulles)
w possibilité de SELECT en argument d ’un FROM

u Des problèmes demeurent:


w absence de pointeurs visibles par l ’utilisateur
- restaurer la navigation et le partage référentiel d ’objets
w le non-support de domaines composés
- non-structurés et ne supportent pas les recherches associatives
w la non-intégration des opérations

© Béatrice Finance 3
1. LE SUPPORT D ’OBJETS COMPLEXES

u Nécessité d'introduire des attributs


multi-valués

u Offrir des collections prédéfinies telles


que liste, ensemble, tableau, …

u Imbrication des collections pour


représenter des objets très compliqués

u Exemple :
w Molécule { list <Atome, Connexions>}
w Atome { Noyau, list <Electrons> }

© Béatrice Finance 4
1. L ’OBJET-RELATIONNEL

u Extension du modèle relationnel


w attributs multivalués : structure, liste,
tableau, ensemble, ... OBJET
w héritage sur relations et types
w domaine type abstrait de données Polymorphisme
(structure cachée + méthodes)
w identité d'objets RELATIONNEL
Types Domaine
utilisateurs Table Collections
u Extension de SQL Attribut
Clé
w définition des types complexes avec
Référence
héritage
Opération Identifiant
w appels de méthodes en résultat et
qualification
w imbrication des appels de méthodes Héritage
w surcharge d'opérateurs

© Béatrice Finance 5
1. SQL3

u Objectifs
w supporter de manière intelligente des données multi-media
u Solutions
w support d ’objets complexes (ADTs)
w NF2 (Non Firts Normal Form) :
- forme normale supportant des domaines multivalués
w Modèle relationnel imbriqué (Nested Model)
- un domaine peut lui-même être valué par des tables
u Normalisation longue et difficile
w Committee Draft – 1/96
w Draft International Standard – 12/98
w International Standard – 7/99
u Spécification volumineuse
w plus de 1500 pages

© Béatrice Finance 6
1. LES COMPOSANTS

u Part 1: Framework
w description non-technique de comment le document est structuré.
u Part 2: Foundation
w noyau de spécification, incluant les types de données abstraits.
u Part 3: SQL/CLI
w interface d’appel client.
u Part 4: SQL/PSM
w le langage de spécifications de procédures stockées
u Part 5: SQL/Bindings
w les liens SQL dynamique et “embedded” SQL repris de SQL-92.
u Part 6: SQL/XA
w spécification de l’interface XA pour moniteur transactionnel.
u Part 7: SQL/Temporal
w support du temps dans SQL3

© Béatrice Finance 7
1. LES COMPOSANTS ...

u Part 8: abandonné
u Part 9: SQL/MED
w utilisation de SQL pour accéder à des données non SQL.
u Part 10: SQL/OBJ
w l ’utilisation de SQL depuis un langage objet et C++,
Smalltalk ou Java

u Au-delà de SQL3, vers SQL4 :


w SQL/MM
- pour la spécification de types utilisateurs multi-media
w SQL/RDA
- pour la spécification du protocole de transfert des données entre
le client et le serveur

© Béatrice Finance 8
1. LES PROCEDURES (PSM)

u Langage de programmation de procédures


w déclaration de variables
w assignation
w conditionnels CASE, IF
w boucles LOOP, FOR
w exceptions SIGNAL, RESIGNAL
w possibilité de procédures et fonctions externes

u Possibilité de structuration en modules

© Béatrice Finance 9
1. SQL3 - LES OBJETS

u Extensibilité des types de données


w Définition de types abstraits
w Possibilité de types avec ou sans OID

u Support d’objets complexes


w Constructeurs de types (tuples, set, list, …)
w Utilisation de référence (OID)

u Héritage
w Définition de sous-types
w Définition de sous-tables

© Béatrice Finance 10
1. LES TYPES ABSTRAITS

u CREATE TYPE <nom ADT> <corps de l’ADT>

u <corps de l’ADT>
w <OID option> ::= WITH OID VISIBLE
- objets sans OID par défaut

w <subtype clause> ::= UNDER <supertype clause>


- possibilité d’héritage multiple avec résolution explicite

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

© Béatrice Finance 11
1. QUELQUES EXEMPLES

u Un type avec référence


CREATE TYPE WITH OID PHONE (
country VARCHAR,
area VARCHAR,
number int,
description CHAR(20))

u Un type sans référence


CREATE TYPE PERSON
(nss INT,
nom VARCHAR,
tel phone)

u Un sous-type
CREATE TYPE STUDENT UNDER PERSON (
major VARCHAR,
year INT)

© Béatrice Finance 12
1. LES CONSTRUCTEURS DE TYPE

u Les constructeurs de base (types paramétrés):


w collections : SET(T), MULTISET(T), LIST(T)
CREATE TYPE PERSON (
nss INT,
nom VARCHAR,
prénoms LIST(varchar),
tel SET(phone))

u Les références
w possibilité de référencer un objet créé “without OID”
CREATE TYPE CAR (
number CHAR(9),
color VARCHAR,
owner REF(person))

u Les constructeurs additionnels


w stack, queue, array, insertable array (exemple : texte)
w non intégrés dans le langage mais peuvent être ajoutés

© Béatrice Finance 13
1. LES FONCTIONS

u Les fonctions peuvent être associées à une base,


un type, une table,...
u Syntaxe :
[<function type>] : CONSTRUCTOR, ACTOR, DESTRUCTOR
FUNCTION <function name> <parameter list>
RETURNS <function results> <SQL procedure> | <file name>
END FUNCTION

u Exemple :
CREATE FUNCTION sell (c Ref(Constructor), amount MONEY)
UPDATE Constructor
SET total = total + amount
WHERE Ref(Constructor) = c
END FUNCTION
u Langage de programmation
w SQL et SQL3 PSM, Langage externe

© Béatrice Finance 14
1. LES TABLES

u Caractéristiques
w une table peut posséder des attributs d'un type abstrait
w un tuple contient des références ou des valeurs complexes
w un attribut peut être de type référence (REF <type> ou with OID)

u Exemples
CREATE TABLE Cars OF car ; // utilisation d ’un type prédéfini

CREATE TABLE Constructors OF NEW TYPE Constructor (


name VARCHAR,
total MONEY) ; // définition d ’un nouveau type

CREATE TABLE FrenchConstructors UNDER Constructors(


taxe MONEY) // définition d ’une sous-table

© Béatrice Finance 15
1. L ’APPEL DE FONCTIONS ET D ’OPERATEURS

u Appel de fonctions :
SELECT [Link]
FROM emp j, emp r
WHERE [Link] = 'Joe'
AND distance([Link],[Link]) < 1 ;

u Appel d'opérateurs ou prédicats :


SELECT [Link]
FROM emp e, emp r
WHERE [Link] = 'Joe ’
AND contained([Link], circle([Link],1)) ;

© Béatrice Finance 16
1. LE PARCOURS DES REFERENCES

u Les fonctions Ref et DeRef sont implicites :


CREATE TABLE cars OF TYPE car. ;
SELECT [Link] FROM cars c WHERE color = 'red ’;

u Possibilité de cascader la notation pointée :


SELECT dname FROM dept WHERE 1985 IN [Link] ;

u Généralisation possible aux chemins multiples :


SELECT dname FROM dept
WHERE autos.(year=1985 and name = 'Ford');

u Toute collection peut être utilisée en place d'une table

© Béatrice Finance 17
1. EXEMPLE DE TABLES IMBRIQUEES

Services
N° Chef Adresse Employés Dépenses

Nom Age NDep Montant Motif

24 Paul Versailles Pierre 45 1 2600


134 Livres
Marie 37
2219 8700 Mission

3037 15400 Portable

Nom Age NDep Montant Motif

Eric 42 5 3000 Livres


25 Patrick Paris
Julie 51
7185 4000 Mission

© Béatrice Finance 18
1. COMPARAISON AVEC LE RELATIONNEL

u Accès en relationnel

select effdate, name, vehicleyr


from policy, customers, vehicles
where [Link] = [Link]
and [Link] = [Link]
and model = ‘ferrari’;
u Accès en objet-relationnel

select [Link], [Link], [Link]


from policy p
where [Link] = ‘ferrari’;

© Béatrice Finance 19
L ’objet-relationnel dans Oracle 8

ADTs
References
Nested Tables
Large Objects (LOBs)

[Link]

© Béatrice Finance 20
2. LES TYPES

CREATE TYPE PointType AS OBJECT(


Création d ’un type : x NUMBER,
CREATE TYPE t AS OBJECT ( y NUMBER );
/
list of attributes and methods
);
CREATE TYPE LineType AS OBJECT(
/ end1 PointType,
/ pour qu’Oracle intègre la définition end2 PointType);
/
Suppression d ’un type :
DROP TYPE t; CREATE TABLE Lines (
* toutes les tables contenant t doivent lineID INT,
être détruites au préalable, sinon line LineType);
« t : still in used »
INSERT INTO Lines
VALUES ( 27, LineType(
PointType(0.0, 0.0),
PointType(3.0, 4.0)));

© Béatrice Finance 21
2. LES METHODES

CREATE TYPE LineType AS OBJECT (


end1 PointType,
end2 PointType,
MEMBER FUNCTION length(scale IN NUMBER) RETURN NUMBER,
PRAGMA RESTRICT_REFERENCES(length, WNDS) );
/

u Il faut spécifier le mode de chaque argument : IN, OUT, INOUT


u Pragma : permet d ’indiquer à la BD
w WNDS = write no database state
w indispensable pour utiliser la méthode dans les requêtes

© Béatrice Finance 22
2. LES METHODES ...

CREATE TYPE BODY LineType AS


MEMBER FUNCTION length(scale NUMBER) RETURN NUMBER IS
BEGIN
RETURN scale *
SQRT((SELF.end1.x-SELF.end2.x)*(SELF.end1.x-SELF.end2.x) +
(SELF.end1.y-SELF.end2.y)*(SELF.end1.y-SELF.end2.y)
);
END;
END;
/

u Self : référence le tuple courant sur lequel est appliquée la méthode


u Le langage de définition est PL/SQL, (ou Java dans Oracle8i)

© Béatrice Finance 23
2. LES REQUETES

u Utilisation d ’une méthode:


SELECT lineID, [Link](2.0)
FROM Lines ll;

u Traversée de chemin:
SELECT [Link].end1.x, [Link].end1.y
FROM Lines ll;

u Valeur complexe en retour:


SELECT [Link].end2
FROM Lines ll;
* le résultat de cette requête serait PointType(3,4), le constructeur de
type est utilisé pour afficher un résultat

© Béatrice Finance 24
2. LES RELATIONS

u Les types Oracle8 peuvent être utilisés :


w soit comme types abstraits de données (ADTs)
w soit comme « RowType » selon SQL3

CREATE TABLE Lines1 OF LineType;

w équivalent à :
CREATE TABLE Lines1 (
end1 PointType,
end2 PointType );

w mais en plus on peut utiliser la méthode length :


SELECT AVG([Link](1.0))
FROM Lines1 ll;

© Béatrice Finance 25
2. L ’UTILISATION DES REFERENCES

CREATE TABLE Lines2 (


end1 REF PointType,
end2 REF PointType );
u REF : permet de créer une référence à partir d ’un objet tuple

CREATE TABLE Points OF PointType;

INSERT INTO Lines2


SELECT REF(pp), REF(qq)
FROM Points pp, Points qq
WHERE pp.x < qq.x;
* restriction : pour manipuler des références, il faut que l ’objet soit un tuple
* INSERT INTO LInes2 VALUES( REF(PointType(1,2), REF(PointType(3,4)) n ’est
pas possible car PointType(1,2) n ’appartient à aucune relation

SELECT ll.end1.x, DEREF(ll.end2)


FROM Lines2 ll;

© Béatrice Finance 26
2. LES TABLES IMBRIQUEES

u Pour obtenir une relation comme type d ’un


attribut, il faut définir un nouveau type :

CREATE TYPE PolygonType AS TABLE OF PointType;


/

CREATE TABLE Polygons (


name VARCHAR2(20),
points PolygonType)
NESTED TABLE points STORE AS PointsTable;

© Béatrice Finance 27
2. LES TABLES IMBRIQUEES ...

INSERT INTO Polygons VALUES (


‘ square ’, PolygoneType(
PointType(0.0,0.0),PointType(0.0,1.0),
PointType(1.0,0.0),PointType(1.0,1.0)));

SELECT points
FROM Polygons
WHERE name = ‘ square ’;

SELECT ss.x
FROM THE (SELECT points FROM Polygons WHERE name = ‘ square ’) ss
WHERE ss.x = ss.y;

© Béatrice Finance 28
2. RELATIONS IMBRIQUEES & REFERENCES

CREATE TYPE PolygonRefType AS TABLE OF REF PointType; /

CREATE TABLE PolygonsRef (


name VARCHAR2(20),
pointsRef PolygonRefType)
NESTED TABLE pointsRef STORE AS PointsRefTable;

SELECT ss.COLUMN_VALUE.x
FROM THE ( SELECT pointsRef
FROM PolygonsRef
WHERE name = 'square' ) ss
WHERE ss.COLUMN_VALUE.x = ss.COLUMN_VALUE.y;

* Puisque la relation imbriquée n ’a pas de nom d ’attribut, alors Oracle


fournit un nom par défaut COLUMN_VALUE

© Béatrice Finance 29
2. CONVERSION : RELATION -> OBJET-RELATION

u Supposons une vieille relation de lignes plates :


CREATE TABLE LinesFlat(
id INT, x1 NUMBER, y1 NUMBER, x2 NUMBER, y2 NUMBER);

u Transfert dans la relation Lines :


INSERT INTO Lines
SELECT id, LineType(PointType(x1,y1), PointType(x2,y2))
FROM LinesFlat;

© Béatrice Finance 30
2. CONVERSION : RELATION -> OBJET-RELATION ...

u Soit la relation représentant des polygones à plat :


CREATE TABLE PolyFlat(
name VARCHAR(20), x NUMBER, y NUMBER);

u Transfert d ’un polygone dans la relation Polygons :


INSERT INTO Polygons
VALUES ('square',
CAST(
MULTISET( SELECT x, y
FROM PolyFlat
WHERE name = 'square')
AS PolygonType
)
);

© Béatrice Finance 31
2. CONVERSION : RELATION -> OBJET-RELATION ...

u Transfert de tous les polygones dans la relation


Polygons :

INSERT INTO Polygons


SELECT [Link],
CAST(
MULTISET( SELECT x, y
FROM PolyFlat qq
WHERE [Link] = [Link] )
AS PolygonType
)
FROM PolyFlat pp;

*Pb : insertion d ’autant de n-uplets Polygon que de n-uplets dans PolyFlat

© Béatrice Finance 32
2. CONVERSION : RELATION -> OBJET-RELATION ...

INSERT INTO Polygons


SELECT [Link],
CAST(
MULTISET( SELECT x, y
FROM PolyFlat qq
WHERE [Link] = [Link] )
AS PolygonType
)
FROM PolyFlat pp
WHERE NOT EXISTS(
SELECT *
FROM PolyFlat rr
WHERE [Link] = [Link]
AND ( rr.x < pp.x OR rr.x = pp.x )
AND rr.y < pp.y);
*Idée : ne faire l ’insertion que pour un point suivant l ’ordre lexicographic

© Béatrice Finance 33
2. Large Objects (LOBs)

u Oracle distingue 3types de LOBs :


w BLOBs (Binary Large Objects) & CLOBs (Character Large
Objects) :
- taille < 4 Go
- stocké dans la BD mais à l ’extérieur de la relation

w BFILE (Binary File)


- taille illimitée
- stocké à l ’extérieru de la BD (fichier référencé dans la BD)
- NB : la cohérence des données n ’est pas assurée par Oracle

u Fonctions de manipulation accessibles via PL/SQL :


w read, write, getlength, substr, instr, append, erase, compare, copy

© Béatrice Finance 34
2. Large Objects (LOBs) ...

u Exemples :

CREATE TABLE Personne (


nom VARCHAR(10)
photo BFILE,
cv CLOB,
prog BLOB);

INSERT INTO Personne VALUES (


‘ Tintin ’,
bfilename(‘$envir/images ’, ‘ [Link]),
‘ Tintin est un journaliste très connu,……………. ’,
empty_blob()
);

© Béatrice Finance 35
CONCLUSION

u Etendre un système relationnel signifie ajouter :


w des ADTS ou des LOBs :
- UDTs (User-defined Data Types)
- UDFs (User-defined Functions) ou procédures stockées
w des méthodes d ’accès pour les UDTs
w adaptation de l ’optimiseur :
- statistiques, propriétés des opérateurs, règles de transformation
w des triggers

u Les technologies :
w DB2 relational extenders
w Informix DataBlades
w Oracle Cartridges

© Béatrice Finance 36
3. DB2 Relational Extenders

© Béatrice Finance 37
3. Informix DataBlades

© Béatrice Finance 38
3. Oracle Cartridges

© Béatrice Finance 39

Vous aimerez peut-être aussi