Introduction
Richard Grin
R. Grin
Objet-relationnel
page 2
Modle objet-relationnel
Le modle objet-relationnel (OR) reprend le modle relationnel en ajoutant quelques notions qui comblent les plus grosses lacunes du modle relationnel La compatibilit est ascendante : les anciennes applications relationnelles fonctionnent dans le monde OR La norme SQL99 (SQL3) reprend beaucoup d'ides du modle OR
L'utilisation de rfrences facilite aussi l'utilisation des donnes trs volumineuses du multimdia en permettant leur partage simplement et moindre cot (sans jointure)
R. Grin
Objet-relationnel
page 5
Le relationnel a ses avantages, en particulier n sa grande facilit et efficacit pour effectuer des recherches complexes dans des grandes bases de donnes n la facilit de spcifier des contraintes dintgrit sans programmation n une thorie solide et des normes reconnues
R. Grin
Objet-relationnel
page 7
R. Grin
Objet-relationnel
page 8
SQL99 (SQL3)
Cette partie du cours sappuie autant que possible sur les spcifications de SQL99 Le langage de programmation SQL99 ajoute SQL2 des variables et instructions de contrle pour en faire un langage procdural complet ; ce cours ne porte pas sur ces extensions Les exemples concrets sont donns dans le langage SQL de la version 10g dOracle ; les diffrences avec SQL99 seront signales
R. Grin Objet-relationnel page 12
R. Grin
Objet-relationnel
page 11
Le relationnel objet ajoute des types prdfinis la norme SQL (tudis plus loin dans le cours) : n rfrence n collection n LOB (li aux objets de grande taille)
R. Grin
Objet-relationnel
page 13
R. Grin
Objet-relationnel
page 14
Types distincts
Le dveloppeur peut aussi crer ses propres types de donnes : n types distincts n types structurs
Ces types permettent de mieux diffrencier les domaines des colonnes ; ils sont forms partir des types de base :
CREATE TYPE codePays as char(2); CREATE TYPE matricule as integer;
Par exemple, pour diffrencier le domaine des colonnes matricule et numDept Ces types sutilisent exactement avec les mmes instructions que le type de base sousjacent
Types structurs
Correspondent aux classes des langages objets Ils peuvent contenir des constructeurs, attributs ( variables dinstances), fonctions et procdures ( mthodes) Les membres peuvent tre public, protected ou private Les fonctions et procdures peuvent tre crites en SQL ou en un autre langage Supportent lhritage
Un type ne peut contenir de contrainte dintgrit La commande create or replace type permet de redfinir un type sil existe dj
R. Grin Objet-relationnel page 18
Hritage
R. Grin
R. Grin
Objet-relationnel
page 21
R. Grin
Objet-relationnel
page 22
Supprimer un type
drop type employe_type;
Type de ligne
SQL99 possde aussi la notion de type de ligne qui correspond aux structures du C : cest un ensemble non encapsul dattributs Le type peut tre nomm ou non
R. Grin
Objet-relationnel
page 23
R. Grin
Objet-relationnel
page 24
create table EMP (nomE varchar(35), adresse ROW(numero integer, rue varchar(30),))
CREATE ROW TYPE adresse_t (numero integer, rue varchar(30),) On peut ensuite utiliser ce type pour une dclaration dattribut ou mme pour crer une table partir de ce type (comme pour les autres types)
R. Grin
Objet-relationnel
page 25
R. Grin
Objet-relationnel
page 26
Tables
Objet-relationnel
page 28
On peut crer une table partir de ce type et indiquer des contraintes dintgrit :
create table employe OF employe_type (primary key (matricule));
R. Grin
Objet-relationnel
page 29
R. Grin
Objet-relationnel
page 30
Hritage de tables
Une table peut hriter dune ou plusieurs tables Pas support par Oracle 10g
R. Grin
Objet-relationnel
page 31
R. Grin
Objet-relationnel
page 32
relationnelles
R. Grin
Objet-relationnel
page 34
Insertion de donnes
Si le type est un type utilis par un autre type, lutilisation du constructeur du type est obligatoire :
insert into employe (matr, nom, sal, adresse) values (1, 'Toto', 12000, adresse_type(12, 'Victor Hugo', 'Nice'))
R. Grin
Objet-relationnel
page 35
R. Grin
Objet-relationnel
page 36
Modifications
Utiliser la notation pointe comme en SQL92 mais avec un alias si un type est concern :
update employe e set salaire = 12000, e.adresse.numero = 23 where nom = 'Dupond';
SQL99 fournit aussi la notation .. pour dsigner un attribut dune colonne de type structur :
update employe set employe.adresse..numero = 12 where employe.nom = 'Dupond';
R. Grin
Objet-relationnel
page 37
R. Grin
Objet-relationnel
page 38
Sous Oracle :
select e.nom, e.age() from employe e where e..age() < 40
Rfrences
R. Grin
Objet-relationnel
page 39
R. Grin
Objet-relationnel
page 40
Rfrences
On peut indiquer dans la dfinition dun type quun attribut contient des rfrences (et non des valeurs) des donnes dun autre type ; la syntaxe est REF nom-du-type :
create type employe_type as object (matricule integer, nom varchar(30), . . . dept REF dept_type);
En SQL99 :
select nom, e.dept->lieu from employe e
R. Grin
Objet-relationnel
page 41
R. Grin
Objet-relationnel
page 42
insert into employe(matricule, nom, dept) select 1240, 'Dupond', REF(d) from dept d where dept.numDept = 10; rfrence vers le dept de numro 10
R. Grin Objet-relationnel page 43
Attention, cette instruction peut trs bien mettre la valeur NULL dans la colonne dept car le select renvoie NULL si le dpartement de numro 10 nexiste pas !
R. Grin Objet-relationnel page 44
Pour viter le problme de lexemple prcdent, il faut ajouter la contrainte NOT NULL sur la colonne dept :
dept REF dept_type NOT NULL
R. Grin
Objet-relationnel
page 45
R. Grin
Objet-relationnel
page 46
Exemple de SCOPE
Rfrence perdue
SCOPE ne suffit pas pour imposer une contrainte stricte Ainsi la rfrence peut tre pendante (dangling) ou perdue , cest--dire ne pas correspondre une ligne existante, si la ligne rfrence au dpart a t ensuite supprime
indique que dept rfrencera une ligne de la table dept_table (et pas une ligne dune autre table cre partir du type dept_type)
R. Grin
Objet-relationnel
page 47
R. Grin
Objet-relationnel
page 48
References
Pour viter les rfrences perdues il faut remplacer la contrainte SCOPE par une contrainte REFERENCES (comme avec les tables relationnelles) :
dept REF dept_type references dept_table
Collections
R. Grin
Objet-relationnel
page 49
R. Grin
Objet-relationnel
page 50
Types de collections
Pour reprsenter une colonne multivalue, on peut utiliser les collections ou les tableaux : n tableaux de taille fixe (array) n ensembles, au sens mathmatiques ; pas de doublons (set) n sacs, avec des doublons (bag ou multiset) n listes, ordonnes et indexes par un entier (list) Dautres types de collections peuvent tre ajoutes par les SGBD
Exemple de collection
create type employe_type (matricule integer, nom varchar(30), prenoms LIST(varchar(15)), enfants SET(personne), . . .);
R. Grin
Objet-relationnel
page 52
On peut utiliser une collection comme une table en la faisant prcder par le mot-cl TABLE :
select nom from employe E where nom in (select * from TABLE(E.prenoms))
Oracle 10g noffre que 2 types de collections : n table imbrique (NESTED TABLE) qui est une collection non ordonne et non limite en nombre dlments n tableau prdimensionn (VARRAY) qui est une collection dlments de mme type, ordonne et limite en taille
R. Grin
Objet-relationnel
page 53
R. Grin
Objet-relationnel
page 54
Tables imbriques
Une table relationnelle (pas ncessairement OR) peut contenir une ou plusieurs tables imbriques Pas tudi dans ce cours ; se reporter au manuel Oracle pour plus de prcisions
Tableaux dimensionns
Un VARRAY est une collection ordonne et limite en nombre, dlments dun mme type On peut imbriquer plusieurs tableaux dimensionns en utilisant des pointeurs sur des tableaux
R. Grin
Objet-relationnel
page 55
R. Grin
Objet-relationnel
page 56
Exemple de VARRAY
create type telephones_type as VARRAY(3) OF varchar(10); insert into personne (nom, telephones) values('Dupond', telephones_type('0492077987', '0492074567'));
Rfrence
Programmer objet avec Oracle de Christian Soutou Vuibert
R. Grin
Objet-relationnel
page 57
R. Grin
Objet-relationnel
page 58
10