Les Bases de Données Objet-relationnelle (Section 3)

Institut Supérieur d'Informatique
1/18
100%
Rendu du PDF...
Page 1 sur 18Lecteur de document UniversityLib

Les Bases de Données Objet-relationnelle (Section 3)

Institut Supérieur d'Informatique · Database Management Systems (Oracle, SQL3) · course

Voir tous les documents en bases de données

Institut Supérieur d’Informatique - Université Tunis El Manar

Module 3 : Les Bases

de Données Objet-

relationnelle (Section 3)

Riadh ZAAFRANI

Novembre 2020

1ère année MP2L

1

1

2

Objectifs du cours

◼A la fin de cours, vous serez en mesure

de :

➢Créer et implémenter des méthodes en

SQL3

➢Comparer des objets

➢Créer des vues objets en SQL3

2

1

Plan

◼Méthodes

◼Comparaison d’objets

◼Vues objet

3

Caractéristiques des méthodes sous Oracle

❑ Encapsulation non automatique.

❑ Surcharge possible

❑ Trois catégories de méthodes

❑ Membre (MEMBER) : s'applique à un objet

❑ Statique (STATIC)

: s'applique à un type

(encapsulation)

❑ Constructeur (CONSTRUCTOR) : instanciation

❑ Appel: Requête, autre méthode, PL/SQL,

programme externe

4

3

4

2

Déclaration

❑Exemple

❑ CREATE TYPE COURS_t AS OBJECT(

ldCours NUMBER(2),

Libelle VARCHAR(50),

RefEns REF ENSEIGNANT_t,

MEMBER PROCEDURE ChangeLib (NouvLib

VARCHAR),

STATIC FUNCTION NbCours RETURN NUMBER,

CONSTRUCTOR FUNCTION COURS_t (

Idc NUMBER,

Lib VARCHAR,

IdE NUMBER)

RETURN SELF AS RESULT)

/

5

Implémentation

❑Exemple

❑ CREATE TYPE BODY COURS_t AS

❑ MEMBER PROCEDURE ChangeLib (NouvLib

VARCHAR) IS

BEGIN

END;

UPDATE les_cours

SET Libelle = NouvLib

WHERE IdCours = SELF.ldCours;

-- À suivre

6

5

6

3

Implémentation

❑ STATIC FUNCTION NbCours RETURN NUMBER

IS

n INTEGER;

BEGIN

SELECT COUNT(*)

INTO n

FROM les_cours;

RETURN n;

END;

-- À suivre

7

8

Implémentation

❑ CONSTRUCTOR FUNCTION COURS_t (ldC

NUMBER, Lib VARCHAR, IdE NUMBER)

RETURN SELF AS RESULT IS

BEGIN

SELF.ldCours := IdC:

SELF.Libelle := Lib;

SELECT REF(e) INTO SELF.RefEns

FROM les_enseignants e

WHERE e.ldPers = IdE;

RETURN SELF;

END;

❑ END;

/

7

8

4

Appel

Publicité

❑Exemple

❑ DECLARE

un_cours COURS_t;

nb_cours INTEGER;

nouveau_cours COURS_t;

BEGIN

SELECT VALUE(c) INTO un_cours FROM les_cours c

WHERE c.ldCours=1;

un_cours.ChangeLib('lnformatique');

nb_cours := COURS_t.NbCours();

nouveau_cours := NEW COURS_t(5, 'Statistiques',1000);

INSERT INTO les_cours VALUES(nouveau_cours);

END;

/

9

Surcharge

9

❑Définition multiple d'une méthode

❑ Au sein d'une même classe

❑ Dans une sous classe

❑Exemple 1

❑ CREATE TYPE COURS_t AS OBJECT(

--(...)

STATIC PROCEDURE Ajout(ldC Number,

Lib VARCHAR, IdE NUMBER),

STATIC PROCEDURE Ajout(Lib VARCHAR,

IdE NUMBER))

10

/

10

5

Surcharge au sein d'une même classe

❑ CREATE TYPE BODY COURS_t AS

STATIC PROCEDURE Ajout(ldC Number,

Lib VARCHAR, IdE NUMBER) IS

BEGIN

INSERT INTO Ies_cours VALUES (ldC, Lib, (SELECT

REF(e) FROM les_enseignants e WHERE e.ldPers = IdE));

END;

STATIC PROCEDURE Ajout(Lib VARCHAR, IdE NUMBER) IS

new_id INTEGER;

BEGIN

SELECT MAX(ldCours)+1 INTO new_id FROM les_cours;

INSERT INTO les_cours VALUES (new_id, Lib, (SELECT

REF(e) FROM les_enseignants e WHERE e.ldPers = IdE));

END;

END;

/

11

Surcharge dans une sous classe

❑ Exemple 2

❑ CREATE TYPE PERSONNE_t AS OBJECT (

--(...)

NOT FINAL MEMBER PROCEDURE Affiche)

END;

/

❑ CREATE TYPE ENSEIGNANT_t UNDER PERSONNE_t (

--(…)

OVERRIDING MEMBER PROCEDURE Affiche)

END;

/

12

11

12

6

Plan

◼Méthodes

◼Comparaison d’objets

◼Vues objet

13

13

Comparaison d’objets : Fonctions MAP et ORDER

❑Les types prédéfinis d'Oracle possèdent tous

un ordre par défaut. Dans le cas de deux

variables « VARCHAR2 », par exemple, vous

pouvez déterminer si

inférieure,

supérieure ou égale à l'autre. Sans cela, il ne

serait pas possible de trier les valeurs du type

de données spécifié.

l'une est

❑En revanche, les types d'objets ne possèdent

pas d'ordre implicite, seule l'égalité des objets

peut être comparée.

14

14

7

Comparaison d’objets : Fonctions MAP et ORDER

❑Les méthodes

«ORDER»

«MAP»

permettent de remédier à cela. En outre, ces

méthodes autorisent la comparaison d'objets

non seulement dans PL/SQL, mais aussi

dans SQL.

et

❑Ces méthodes peuvent aussi servir à trier des

objets stockés dans la base de données, ce

qui veut dire qu'elles peuvent être utilisées

dans une clause «ORDER BY» ou dans un

index.

Publicité

15

15

Comparaison d’objets : Fonction MAP

▪ Exemple de définition 1

▪ CREATE OR REPLACE TYPE personne_t

MAP MEMBER FUNCTION cle_personne RETURN

VARCHAR2);

/

▪ CREATE OR REPLACE TYPE BODY personne_t AS

MAP MEMBER FUNCTION cle_personne RETURN VARCHAR2

IS

BEGIN

RETURN SELF.NOM II SELF.PRENOM II

to_char(SELF.DATE_NAlSSANCE, 'YYYYMMDD');

END cle_personne;

END;

/

16

16

8

Comparaison d’objets : Fonction MAP

▪ Exemple d’utilisation 1

▪ DECLARE

personne1 personne_t:=personne_t('BlZOÏ', 'Razvan','03/02/1995');

personne2 personne_t:=personne_t('BIZOÏ', 'Razvan','03/03/1995');

BEGIN

DBMS_OUTPUT.PUT_LINE( 'personne1' || personne1.cle_personne);

DBMS_OUTPUT.PUT_LINE( 'personne2' || personne2.cle_personne);

IF personne1> personne2 THEN

DBMS_OUTPUT.PUT_LINE( 'personne1> personne2');

ELSE

END IF;

DBMS_OUTPUT.PUT_LINE( 'personne1 < personne2');

END;

/

▪ personne1 BIZOïRazvan19950203

personne2 BIZOïRazvan19950303

personne1 < personne2

17

Comparaison d’objets : Fonction MAP

▪ Exemple de définition 2

▪ CREATE TYPE FRACTION_t AS OBJECT (

numerateur INTEGER,

denominateur INTEGER,

MAP MEMBER FUNCTION Calcul RETURN REAL)

/

▪ CREATE TYPE BODY FRACTION_t AS

MAP MEMBER FUNCTION Calcul RETURN REAL IS

BEGIN

RETURN numerateur / denominateur;

END;

END;

/

18

17

18

9

Comparaison d’objets : Fonction MAP

▪ Exemple d’utilisation 2

▪ DECLARE

f1 FRACTION_t;

f2 FRACTION_t;

BEGIN

f1 := NEW FRACTION_t (10, 4);

f2 := NEW FRACTION_t (249,100);

IF f1 > f2 THEN

-- (…)

END IF;

END;

/

19

Comparaison d’objets : Fonction ORDER

▪ Vous pouvez créer une méthode « MAP » ou

«ORDER » pour un type d'objets donné, mais

pas les deux à la fois : Une seule fonction MAP

ou ORDER par classe

groupes

d'importants

▪ Ainsi une méthode « MAP » sera plus efficace

d'objets,

pour

trier

puisqu'elle convertit

l'ensemble d'objets en un

type plus simple, qui sont alors triés directement.

▪ Avec la méthode « ORDER », seuls deux objets

peuvent être comparés à la fois, ce qui oblige à

appeler cette méthode de façon répétée.

19

20

20

10

Comparaison d’objets : Fonction ORDER

▪ ORDER est utilisée pour des objets trop

complexes pour être traités par MAP

▪ Vous pouvez créer une méthode « ORDER »,

qui reçoit un argument du même type que

l'objet et

Publicité

retourne un résultat numérique

contenant l'une des valeurs suivantes:

▪ >0 si l'argument est supérieur à « SELF ».

▪ <0 si l'argument est inférieur à « SELF ».

▪ 0 si l'argument est égal à « SELF ».

21

21

Comparaison d’objets : Fonction ORDER

▪ Exemple de définition 1

▪ Nous pouvons, par exemple,

créer une

méthode «ORDER» qui trie les personnes par

leur date de naissance, comme illustré ci-

dessous.

▪ CREATE OR REPLACE TYPE personne_t

ORDER MEMBER FUNCTION

comparaison_personne(aSELF lN personne_t)

RETURN NUMBER;

/

22

22

11

Comparaison d’objets : Fonction ORDER

◼ CREATE OR REPLACE TYPE BODY personne_t AS

ORDER MEMBER FUNCTION comparaison_personne(aSELF IN

personne_t) RETURN NUMBER IS

BEGIN

CASE

WHEN aSELF.DATE_NAISSANCE = SELF.DATE_NAISSANCE THEN

RETURN 0;

WHEN aSELF.DATE_NAISSANCE> SELF.DATE_NAISSANCE THEN

ELSE

RETURN 1;

RETURN -1;

END CASE;

END comparaison_personne;

END;

/

23

23

Comparaison d’objets : Fonction ORDER

▪ Exemple de définition 2

▪ CREATE TYPE FRACTION_t AS OBJECT

(

num INTEGER,

den INTEGER,

ORDER MEMBER FUNCTION

Compare (f FRACTION_t)

RETURN INTEGER)

/

24

24

12

Comparaison d’objets : Fonction ORDER

◼ CREATE TYPE BODY FRACTION_t AS

ORDER MEMBER FUNCTION Compare (f FRACTION_t)

RETURN INTEGER IS

BEGIN

IF (f.num/f.den) < (SELF.num/SELF.den) THEN

RETURN -1;

ELSIF (f.num/f.den) > (SELF.num/SELF.den) THEN

ELSE

RETURN 1;

RETURN 0;

END IF;

END;

END;

/

25

Comparaison d’objets : Fonction ORDER

▪ Exemple d'utilisation 2

▪ DECLARE

f1 FRACTION_t;

f2 FRACTION_t;

BEGIN

f1 := NEW FRACTION_t (10, 4);

f2 := NEW FRACTION_t (249, 100);

IF f1.Compare(f2) > 0 THEN

--(...)

END IF;

END;

/

26

25

26

13

Plan

◼Méthodes

◼Comparaison d’objets

◼Vues objet

27

27

Vues objet

◼ On peut utiliser des vues objet pour

construire des objets virtuels à partir de

données relationnelles, permettant ainsi

aux programmeurs de faire évoluer des

schémas existants pour prendre en charge

des objets.

◼ Cette possibilité permet à des applications

relationnelles et objet de coexister dans la

Publicité

même base de données.

28

28

14

Vues objet

◼ Supposons que nous ayons modélisé notre

base CLIENT sous forme relationnelle, mais

que la direction ait décidé que toutes les

nouvelles applications

seraient orientées

objet.

◼ La création d'une vue objet des données

cette

existantes

faciliterait

relationnelles

transition.

29

Intérêt

▪ Même utilité que les vues relationnelles

▪ Simplification de l'accès aux données

▪ Sauvegarde indirecte de requêtes complexes

▪ Présentation

données

variable

des

selon

29

les

utilisateurs(sécurité)

▪ Support de l'indépendance logique

▪ Migration facilitée vers la technologie objet.

▪ Utilisation de méthodes sur des données tabulaires

▪ Interfaçage aisé avec des langages orientés objets

▪ Coexistence d’applications relationnelles et objet

dans la même base de données.

30

30

15

Exemple

▪ CREATE TABLE les_personnes (

IdPers NUMBER(5) PRIMARY KEY,

EtCiv ETAT_CIVIL_t,

Adr ADRESSE_t);

▪ CREATE TABLE les_enseignants (

IdPers NUMBER(5) PRIMARY KEY,

Statut VARCHAR(20));

31

31

Type structure de vue

▪ Exemple

▪ CREATE TYPE ENS_COMPLET_t AS OBJECT (

IdPers NUMBER(5),

EtCiv ETAT_CIVIL_t,

Adr ADRESSE_t,

Statut VARCHAR(20))

/

32

32

16

Création de vue objet

▪ Exemple

▪ CREATE VIEW vue_ens OF ENS_COMPLET_t

WITH OBJECT IDENTIFIER(ldPers) AS

SELECT p.ldPers, EtCiv, Adr, Statut

FROM

les_personnes p, les_enseignants e

WHERE p.ldPers = e.ldPers;

33

33

Vue objets modifiables

▪ Exemple

▪ CREATE TRIGGER cascade_insert

INSTEAD OF INSERT ON vue_ens

FOR EACH ROW

BEGIN

INSERT INTO les_personnes

VALUES (:NEW.ldPers, :NEW.EtCiv, :NEW.Adr);

INSERT INTO les_enseignants

VALUES (:NEW.ldPers, :NEW.Statut);

END;

/

34

34

17

Institut Supérieur d’Informatique - Université Tunis El Manar

Module 3 : Les Bases

de Données Objet-

relationnelle (Section 3)

Riadh ZAAFRANI

Novembre 2020

1ère année MP2L

Merci pour votre attention

35

35

18