Академический Документы
Профессиональный Документы
Культура Документы
Il faut donc :
grer de manire efficace les accs aux disques
proposer une dfinition structure des donnes
viter les redondances
UN SGBD .
Le Systme de Gestion des Bases de Donnes
(SGBD) :
scurit
accs aux fichiers de donnes
aspect multi-utilisateurs
PHILOSOPHIE OBJET
Faiblesses du modle relationnel
Absence de pointeurs visibles : pour lier des donnes qui se
correspondent, on a besoin de faire des jointures (oprations
coteuses)
Non support des domaines composs : on ne peut pas avoir pas
exemple un attribut qui correspond une adresse avec le numro de
la rue, le nom de la rue, la ville,
Impossible cause de la premire forme normale, qui impose
latomicit des attributs
Pas doprations dfinies sur les donnes
CARACTRISTIQUES DU MODLE
RELATIONNEL OBJET
DIFFERENCE AVEC LE
RELATIONNEL STANDARD
Par rapport au modle relationnel standard :
on a moins besoin daplatir les donnes, ici on a
une seule table avec des tables imbriques au
lieu de 3 tables
on a moins besoin de faire des jointures pour
rcuprer les informations sur les accidents du
contrat 1111, on accde simplement lattribut
accidents.
SYNTAXE :
<constructeur de type> ( <valeurs des diffrents champs du type t_adresse>)
UTILISATION DALIAS
SELECT e.adresse FROM employes e ; -- Prciser
un alias de table
Remarque
On peut crire des contraintes comme en relationnel standard lors
de la cration de la table, on peut dfinir des cls, etc.
CREATE TABLE adresses OF t_adresse (ville DEFAULT
ANGERS) ;
on insre un n-uplet
un OID lui est attribu lors de linsertion
Exemple
TABLE employes
nom
prnom
num_dep
budget
employes
200 000
Exemple
INSERT INTO etudiants VALUES (12345,
Jacques, tvadresses(tadresse(Elyse, Paris))) ;
-- on a un VARRAY qui contient un seul lment
INSERT INTO etudiants VALUES (9999, Dom,
tvadresses(tadresse(Matignon, Paris, null)));
-- on a un VARRAY qui contient les deux lments
du VARRAY dont un nest pas renseign
INSERT INTO etudiants VALUES (2340, Nico,
null);
-- aucun VARRAY nest cr
Remarque
Si on veut travailler sur le VARRAY de Nico, il faut
bien sr en crer un. Si on veut travailler dans
une requte SQL, il faut travailler sur lensemble
du VARRAY.
Exemple
UPDATE etudiants SET adresses =
tvadresses(tadresse(Elysee, Paris),
tadresse(Bitz, Correze)) WHERE nom =
Jacques ;
Si on veut travailler sur un seul lment, il faut
utiliser un bloc PL/SQL.
Autre exemple
INSERT INTO etudiants VALUES (54321, Lionel, tvadresses()) ;
DECLARE lesadr tvadresses ;
BEGIN
SELECT adresses INTO lesadr FROM etudiants WHERE nom = Lionel ;
lesadr.extend; -- on ajoute un lment au VARRAY
lesadr(1) := tadresse(Bon Repo, Ile de R) ;
UPDATE etudiants SET adresses = lesadr WHERE nom = Lionel ;
END ;
-- ici a ne marche pas car le tableau fixe est vide, tout lheure, a marchait
pour Dom car on avait le deuxime lment (non renseign mais il existait).
Ici, il faut donc crer la place du premier lment avant de le traiter. On
aurait pu aussi mettre jour le VARRAY dans une requte SQL standard
puis excuter le bloc PL/SQL
LES MTHODES
Une mthode (ou opration) est la modlisation
dune action applicable sur un objet, caractrise
par un en-tte appel signature dfinissant son
nom, ses paramtres dappel et de retour, et qui
permet de modifier ltat de lobjet ou de renvoyer
un rsultat
En relationnel objet, les types peuvent admettre
soit des fonctions soit des procdures.
LES MTHODES
On dclare les mthodes :
- soit au dbut lors de la dclaration de lobjet
- soit plus tard avec commande ALTER TYPE
LES PROCDURES
Elles sont dfinies de la mme manire que les
fonctions. On peut :
soit les dfinir lors de la cration du type
soit les ajouter par la suite avec la commande
ALTER TYPE
VARCHAR ( 10 ) ,
datenaiss
DATE ,
END age ;
MEMBER PROCEDURE modifnaiss ( newdate IN DATE )
BEGIN
SELF.datenaiss := newdate ;
END modifnaiss ;
END
/
--
SURCHARGE
On peut dfinir une mme mthode avec des
paramtres diffrents
Exemple
CREATE TYPE t_etudiant AS OBJECT (
noine
NUMBER ,
nom
VARCHAT ( 30 ) ,
:= newnumero ;
END modif ;
MEMBER PROCEDURE modif (newnom IN VARCHAR ) IS
BEGIN
SELF.nom := newnom ;
END modif ;