Vous êtes sur la page 1sur 23

Chapitre3:

Bases De Données Objet-Relationnel


Dr. MALKI Abdelhamid @:a.malki@esi-sba.dz

Ecole Supérieure d’Informatique de Sidi Bel Abbes (ESI-SBA) 2018/2019

Module SIW: Bases de données avancées 1


Module ISI: Bases de données avancées
Les atouts du modèle relationnel
 Fondé sur une théorie rigoureuse et des principes simples Mature,
fiables, performants

 Indépendance programme et données

 SGBD Relationnel : les plus utilisés, connus, maîtrisés

 SQL: une implémentation standard du modèle relationnel, avec des


API pour la plupart des langages de programmation

 Les SGBDs Relationnels incluent des outils performants de gestion de


requêtes, de générateurs d'applications, d'administration,
d'optimisation, etc.
Les inconvénients du modèle relationnel
 La structure de donnée en tables est pauvre d'un point de vue de la modélisation
logique

 La manipulation de structures relationnelles par des langages objets entraîne un


décalage entre les structures de données pour le stockage et les structures de
données pour le traitement (ce qui implique des conversions constantes d'un
format à l'autre)

 La 1NF est inappropriée à la modélisation d'objets complexes

 La normalisation entraîne la genèse de structures de données complexes et très


fragmentées, qui peuvent notamment poser des problèmes de performance ou
d'évolutivité

 Le SQL doit toujours être combiné à d'autres langages de programmation pour être
effectivement mis en œuvre

 La notion de méthode ne peut être intégrée au modèle logique, elle doit être gérée
au niveau de l'implémentation physique

 Les types de données disponibles sont limités et non extensibles


Le modèle objet relationnel
 Le modèle objet-relationnel est né du double constat de la
puissance nouvelle promise par les SGBDs Orientés-Objets et de
l'insuffisance de leur réalité pour répondre aux exigences de
l'industrie des BDs classiques.

 Leur approche est plutôt d'introduire dans les SGBDs Relationnels


les concepts apportés par les SGBDs Orientés-Objets plutôt que de
concevoir de nouveaux systèmes.

Le modèle Objet-Relationnel étend le modèle relationnel avec


des principes objet pour en augmenter les potentialités et
combler les plus grosses lacunes .
Objectifs du modèle Objet-Relationnel
 Réutilisation
◦ -Rapprocher le modèle logique du modèle conceptuel
◦ – Héritage à profondeur multiple (clause UNDER)

 Identité
◦ – identifier un objet de manière unique (OID)

 Complexité
◦ – définition d’objets complexes et/ou fortement structurés (temps,
géo-référencement, multimédia, types utilisateurs, etc.)

 Encapsulation
◦ – boîte noire avec des méthodes de manipulation
Modèle Objet-Relationnel
 Le modèle Objet-relationnel apporte deux nouveautés distinctes et
indépendantes à ne pas confondre :

 Les tables objets qui permettent d'ajouter les identifiants d'objets


(OID), les méthodes et l'héritage aux tables classiques.

 Les tables imbriquées (nested model) qui permettent de dépasser


les limites de la première forme normale et de limiter la
fragmentation de l'information ;

 Avec un SGBD Objet-Relationnel on peut ne pas utiliser ces deux


extensions (on reste alors en relationnel), utiliser l'une des deux ou
bien les deux conjointement.
Le modèle Objet-Relationnel
 Inconvénients du modèle objet-relationnel :

 ne s’appuie pas sur une théorie solide comme le modèle


relationnel

 pas de standardisation : implantations différentes, partielles dans


les SGBD
Type d’objet
 Un type objet est un type abstrait défini par l'utilisateur pour décrire :

◦ la structure  ses attributs et d'une entité du


◦ le comportement,  ses méthodes monde réel.

 Syntaxe:
 CREATE [ OR REPLACE ] TYPE nomType AS OBJECT
(Attribut1 type1, Attribut2 type2, ...., Attribut2N typeN );
Exemple: création d’un type Objet
 Une adresse est composée d’une rue, d’une ville, d’un code postal et
d’un pays.
CREATE TYPE AdresseTy AS OBJECT(

Rue VARCHAR2(50),

Ville VARCHAR2(30),

CodePostal CHAR(5));

 Une personne a un nom, un prénom et une adresse

CREATE TYPE PersonneTy AS OBJECT(

Nom VARCHAR2(30),

Prenom VARCHAR2(30),

Adresse AdresseTy);
Utilisation du type pour définir une colonne:
Création et Insertion
 Une table de clients : un client a un login, est une personne et s'est
inscrit à une date.
CREATE TABLE ClientTable (
login CHAR(20) PRIMARY KEY ,
client PersonneTy,
dateIns DATE NOT NULL);

INSERT INTO ClientTable VALUES ( INSERT INTO ClientTable VALUES (


‘mahamid89’, ‘mahamid89’,
PersonneTy(’karim’, ‘ali’), PersonneTy(’karim’, ‘ali’,
AdressseTy('rue des dunes', ‘SBA', ‘22000’), AdressseTy('rue des dunes', ‘SBA', ‘22000’)),
‘01/05/07'); ‘01/05/07');

INSERT INTO ClientTable VALUES (


‘mahamid89’,’karim’, ‘ali’, 'rue des dunes', ‘SBA', ‘22000’, '01/05/07’);
Utilisation du type pour définir une colonne: Recherche
Pour obtenir tous les clients

Select * From ClientTable; Pour obtenir les noms des clients

Select p.client.nom From ClientTable p

Pour obtenir les villes des clients

Select p.client.Adresse.ville From ClientTable p

Modification du nom de la rue d'un client :

UPDATE ClientTable p
SET p.client.adresse.rue='15 rue Ganbita’
WHERE UPPER (p.client.nom)=‘KARIM';
Table d’objets

 Définir une table ne contenant qu'un type d'objet unique.


◦ Une ligne = une instance du type.
◦ Les colonnes = les attributs de premier niveau du type.

CREATE TYPE EmployeTy AS OBJECT(


nss INTEGER,
Nom VARCHAR2(30),
Prenom VARCHAR2(30),
Salaire number ); CREATE TABLE Employe OF EmployeTy
(nss PRIMARY KEY);

 Un type ne peut pas contenir de contraintes (NOT NULL, CHECK, UNIQUE,


DEFAULT, PRIMARY KEY, FOREIGN KEY, etc.).

 Les contraintes doivent être déclarées au niveau de la table d’objets.


Table d’objets: OID des objets
 Les objets de ligne ne peuvent être stockés que dans une table
d’objet et possèdent un identificateur unique appelé OID.

 Les OID sont définis par défaut ou par la commande

 CREATE TABLE Employe OF EmployeTy


object identifier is system generated ;

 Les OID peuvent être basés sur la clé primaire


 CREATE TABLE Employe OF EmployeTy
(nss PRIMARY KEY) object identifier is primary key ;

 Pour définir un index sur l’OID il faut écrire


CREATE TABLE Employe OF EmployeTy OIDINDEX indexEmp;
Table d’objets: Référence
 On peut indiquer dans la définition d’un type qu’un attribut
contient des références (et non des valeurs) à des données d’un
autre type ; la syntaxe est « REF nom-du-type » :

Dans les objets de type EmployeTy CREATE TYPE EmployeTy AS OBJECT(


nss INTEGER,
l’attribut Depart fait référence (REF) à
Nom VARCHAR2(30),
un objet du type DepartementTy. Prenom VARCHAR2(30),
Salaire number,
Depart REF DepartementTy );

CREATE TYPE DepartementTy AS OBJECT(


IdDepart INTEGER,
Nom VARCHAR2(30),
ville VARCHAR2(30));
CREATE TABLE Departement OF DepartementTy (IdDepart PRIMARY KEY);

INSERT INTO Departement VALUES (1,’production’, ‘sba’);


INSERT INTO Departement VALUES (2,’commercial’, ‘oran’);

Employe
Departement
1 Ali karim 60000 NULL
1 production sba
2 Ahmed souad 50000
2 commercial oran
3 Mohamed said 70000

 CREATE TABLE Employe OF EmployeTy (nss PRIMARY KEY); Ici la fonction REF
retourne l’OID du
département N°1
 INSERT INTO Employe VALUES (1,’Ali’, ‘karim’,60000,Null);

 INSERT INTO Employe SELECT 2, ‘Ahmed’, ‘souad’, 50000, REF(d)

FROM Departement d WHERE d.IdDepart=1;

 INSERT INTO Employe SELECT 3, ‘Mohamed’, ‘said’, 70000, REF(d)

FROM Departement d WHERE d.IdDepart=2;


Table d’objets: Exemple de requêtes

Select e.Nom, e.Prenom, Ali karim null null


e.Depart.nom, e.Depart.ville Ahmed souad production sba
From Employe e Mohamed said Commercial oran

 Pour renvoyer un objet Select Nom, DEREF(Depart) From Employe

à partir de sa référence
Ali null
on utilise DEREF().
Ahmed DepartementTy (1,’production’,’sba’)
Mohamed DepartementTy (2,’commercial’,’oran’)
Table d’objets: Méthodes
 En relationnel objet, les types peuvent admettre soit des fonctions soit des procédures.

 Si le type sur lequel s'appuie la création de la table définit des méthodes, alors les
méthodes seront associées à la table (méthodes de table). Il sera possible d'accéder à
ces méthodes de la même façon que l'on accède aux attributs (projection, sélection...).

CREATE TYPE nom_type AS OBJECT (


nom_attribut1 type_attribut1
...
MEMBER FUNCTION fonction1 (para1 IN|OUT type_para1, ...) RETURN type_fonction1
...
);

CREATE TYPE BODY nom_type IS


MEMBER FUNCTION fonction1 (...) RETURN type_fonction1 IS
BEGIN ... END ;
MEMBER FUNCTION fonction2 ... ... END ;
END ;
Table d’objets: Méthodes(exemple)

CREATE TYPE typCours AS OBJECT (


pknum NUMBER(2), debut DATE,
MEMBER FUNCTION fin RETURN DATE );
/
CREATE TYPE BODY typCours IS
MEMBER FUNCTION fin RETURN DATE IS
BEGIN
RETURN SELF.debut + 5;
END;
END;

CREATE TABLE tCours OF typCours ( pknum PRIMARY KEY );

SELECT c.pknum, c.fin() FROM tCours c;


Modèles imbriqués

 Le principe du modèle imbriqué est qu'un attribut d'une table ne sera


plus seulement valué par une unique valeur scalaire (principe de la
1NF), mais pourra l'être par un vecteur (enregistrement) ou une
collection de scalaires ou de vecteurs, c'est à dire une autre table.

 Il existe deux types de collections imbriquées :


◦ les tables imbriquées ( NESTED TABLE ) dont la taille n’est pas
fixée à priori
◦ les tableaux fixes ( VARRAY )
Tables imbriquées: Déclaration et Création
1. création du type TABLE;

 CREATE TYPE EtudiantTy AS OBJECT( IdE INTEGER, Nom VARCHAR(30), dateNa Date);
 CREATE TYPE ListeEtudiantTy AS TABLE OF EtudiantTy;

2. l’utilisation du type TABLE pour la création de la table imbriquée

CREATE TABLE Formation( IdF INTEGER, niveau VARCHAR(20), LesEtudiants ListeEtudiantTy)

NESTED TABLE LesEtudiants STORE AS EtudiantTable;

Ou:

 CREATE TYPE FormationTy AS OBJECT(IdF INT, niveau VARCHAR, LesEtudiants ListeEtudiantTy)

 CREATE TABLE Formation OF FormationTy


NESTED TABLE LesEtudiants STORE AS EtudiantTable;

EtudiantTable est le nom physique de la table imbriquée (ne sert jamais dans
les requêtes)
Tables imbriquées: Insertion
1. Insertion dans une Table utilisant une table imbriquée

INSERT INTO Formation Values (1, ‘licence’,


ListeEtudiantTy( EtudiantTy(1,’Ali’,’02/04/1998’), EtudiantTy(2,’karim’,’12/06/1997’) ));

INSERT INTO Formation Values (2, ‘master’,


ListeEtudiantTy( EtudiantTy(1,’souad’,’06/11/1996’)));

2. Insertion d’un élément dans une table imbriquée en utilisant TABLE


Exemple: Ajouter un étudiant dans la formation N°2

IDF NIVEAU LesEtudiants


IDF NIVEAU LesEtudiants
IDE NOM DATENA
IDE NOM DATENA
INSERT INTO TABLE (SELECT LesEtudiants 1 Licence 1 ALI 02/04/1998
1 Licence 1 ALI 02/04/1998
FROM Formation WHERE idf=2) 2 Karim 12/06/1997
2 Karim 12/06/1997
VALUES (2, ‘sifou’,’10/09/1997’); IDE NOM DATENA
IDE NOM DATENA
2 Master 1 Souad 06/11/1996
1 Souad 06/11/1996
2 sifou 10/09/1997
Tables imbriquées: Update & Delete

Exemple: Modifier la date de naissance de l’étudiant N°1de la formation Licence

Update TABLE (SELECT LesEtudiants FROM Formation WHERE niveau=‘Licence’) e

SET e.dateNa=’12/12/1999’ WHERE e.Ide=1;

Exemple: supprimer tous les étudiants de la formation N°1

Delete from TABLE (SELECT LesEtudiants FROM Formation WHERE idf=1);

Exemple: supprimer les formations dont l’étudiant ALI est inscrit

Delete from Formation f1 WHERE EXISTS (

SELECT * FROM TABLE (SELECT f2.LesEtudiants FROM Formation f2

WHERE f1.idf=f2.idf) e WHERE e.nom=‘Ali’) ;


Tables imbriquées: Interrogation
Exemple: Retourner les noms des étudiants de la formation N°2

 Select e.nom FROM TABLE (SELECT LesEtudiants FROM Formation WHERE Idf=2) e;

 Select e.nom FROM Formation f, TABLE (f.LesEtudiants) e WHERE f.Idf=2;

Exemple: les noms des étudiants de la formation N°2 qui sont nés avant 2000

 Select e.nom FROM TABLE (SELECT LesEtudiants FROM Formation WHERE Idf=2) e

WHERE e.dateNa<’01/01/2000’;

Exemple: La formation qui a plus d’étudiants

 select f.idf, count(e.ide) from Formation f, TABLE(f.LesEtudiants) e

 group by f.idf having count(e.ide) >= all (select count(e2.ide) from Formation f2 ,

TABLE (f2.LesEtudiants)e2 where f2.idf<>f.idf group by f2.idf);

Vous aimerez peut-être aussi