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

❑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),

Publicité

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.

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

Publicité

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

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

Publicité

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

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