Module 3: Les Bases de Données Objet-Relationnelle

Database Systems · notes

Browse all bases de données documents

Module 3 : Les Bases

de Données Objet-

relationnelle (Section 1)

Riadh ZAAFRANI

Octobre 2020

1ère année MP2L

1

Base de données relationnelles-objets

 Extension du modèle relationnel à l’aide de types

de données abstraits

 Références directes à un OID (réduction du nombre

de jointures).

 Attributs : types structurés et collections

 Perte de la 1FN (NF2 : Non First Normal Form)

 Méthodes définies au niveau des types

 Héritage entre types

2

1

Avantages de l’approche relationnelle-objet

 Encapsulation des données des tables

 Préservation des acquis des

relationnels

données/traitements,

compatibilité ascendante…)

systèmes

(indépendance

fiabilité, performance,

 Extension du langage SQL (norme SQL3)

 Mise en œuvre des concepts objets (classes,

héritage, méthodes)

3

Inconvénients de l’approche relationnelle-objet

 Modèle de données qui ne repose pas sur

théorie

simples

principes

une

/

des

rigoureuse

 Pas de syntaxe commune de la part des

Oracle,

SGBD

(IBM,

éditeurs

PostgreSQL, SAP …)

de

 Migration relationnel  Objet facile,

mais retour en arrière complexe

4

2

Plan

Types d'objets et héritage

Références et associations

Collections

Méthodes

Vues objet

5

Type d’objet

 L'extension à l'objet du modèle relationnel prend en

charge les types abstraits de données qui sont

définis à partir d'une structure de données et d'un

ensemble d'opérations.

 La syntaxe de création d'un type d'objet comporte

la déclaration de la structure de données, ses

méthodes et la partie qui positionne le type dans

une hiérarchie d'héritage.

6

3

Type d’objet

 CREATE [OR REPLACE] TYPE [SCHEMA.]NOM_TYPE

{{ IS / AS } OBJECT

UNDER [SCHEMA.]SUPERTYPE}

AS OBJECT

( NOM _ATTRIBUT TYPE [, ...]

{

{ MEMBER / STATIC }

{ PROCEDURE name (NOM_ARGUMENT TYPE [,.. .])

| FUNCTION name (NOM_ARGUMENT TYPE [,.. .]) RETURN datatype}

| CONSTRUCTOR FUNCTION NOM _TYPE

[ (

[ SELF lN OUT NOM_TYPE]

[,NOM_ARGUMENT datatype[,. ..]]

) ]

RETURN SELF AS RESULT

}

)

[ [NOT ] FINAL];

7

Type d’objet

 UNDER SUPERTYPE : Indique le type de l'objet ancêtre.

 MEMBER : Les méthodes membres sont

explicitement par une instance du type d'objet.

invoquées

 STATIC : Les méthodes statiques sont

invoquées par le

 SELF : C'est

argument

type d'objet et non par une instance du type d'objet.

pour

«

le

un

CONSTRUCTOR » qui désigne l'objet

Il est

également accessible dans les autres méthodes sauf les

méthodes de type «STATIC ».

Une

Advertisement

s'applique

automatiquement à tout objet lors de l'instanciation. Le type

de retour est le type de l'objet construit.

lui même.

implicite

fonction

qui

:

 CONSTRUCTOR

 FINAL : Le type d'objet ne peut plus être utilisé comme

ancêtre pour un autre type d'objet.

8

4

Base de données exemple

ETAT_CIVIL

Nom : String

Prenom : String

DateNaiss : Date

ADRESSE

Rue : String

CP : String

Ville : String

Personne

idPers : int

EtCiv : ETAT_CIVIL

Adr : ADRESSE

ENSEIGNANT

Statut : String

1

RefEns

1..*

Cours

idCours : int

Libellé: String

1

RefCours

1..*

ETUDIANT

1

Diplomes_Collection

1..*

RefForma

1

FORMATION

idForma : int

NomForma : String

9

Types de données

Types de données

Intégrés

Personnalisés

(types structurés et classes)

Scalaires

CHAR, VARCHAR,

NUMBER, DATE…

Collections

VARRAY

TABLE

Références

(pointeurs)

REF

10

5

Types d’objets personnalisés

 Exemples de création de types

 CREATE OR REPLACE TYPE ETAT_CIVIL_t

AS OBJECT (

Nom VARCHAR(50),

Prenom VARCHAR(30),

DateNaiss DATE)

ETAT_CIVIL

Nom : String

Prenom : String

DateNaiss : Date

/

 CREATE OR REPLACE TYPE ADRESSE_t

AS OBJECT (

Rue VARCHAR(100),

CP CHAR(5),

Ville VARCHAR(50))

ADRESSE

Rue : String

CP : String

Ville : String

/

Types d’objets personnalisés

 CREATE OR REPLACE TYPE PERSONNE_t

AS OBJECT (

IdPers NUMBER(5),

EtCiV ETAT_CIVIL_t,

Adr ADRESSE_t)

Personne

idPers : int

EtCiv : ETAT_CIVIL

Adr : ADRESSE

/

12

6

Types récursifs

Personne

idPers : int

EtCiv : ETAT_CIVIL

Adr : ADRESSE

0..1

0..*

 Utilisation d'une référence

Chef

 Ex. CREATE OR REPLACE TYPE PERSONNE_t

Advertisement

AS OBJECT (

Idpers NUMBER(5),

EtCIV ETAT_CIVIL_t,

Adr ADRESSE_t,

chef REF PERSONNE_t)

/

 Ref permet de récupérer la référence de chaque

objet stocké dans la table PERSONNE.

13

Types mutuellement dépendants

RefCours

1

ENSEIGNANT

Statut : String

1

1

Cours

idCours : int

Libellé: String

1

 Utilisation de types incomplets

RefEns

 - Ex.

CREATE TYPE ENSEIGNANT_t

/-- Type incomplet

CREATE TYPE COURS_t AS OBJECT (...,

RefEns REF ENSEIGNANT_t)

/

CREATE TYPE ENSEIGNANT_t AS OBJECT(...,

RefCours REF COURS_t)

/-- On a complété le type incomplet

 Destruction: DROP TYPE ENSEIGNANT_t FORCE;

14

7

Stockage d’un type objet

 Dans un contexte de bases de données, un

type abstrait de données peut être perçu

comme :

 Une nouvelle gamme de colonnes définie

par l’utilisateur qui enrichit celle existante.

Les types peuvent se combiner entre eux

pour en construire d’autres.

 Une structure de données partagée qui

permet qu'un type puisse être utilisé par

une ou plusieurs tables.

15

Stockage d’un type objet

 Un type abstrait de données peut être stocké

dans une table de deux manières:

 Les objets colonne qui sont stockés en

tant que colonne structurée dans une table

relationnelle.

 Les objets enregistrements qui

sont

stockés en tant que ligne d'une table objet.

À ce titre, ils possèdent un identificateur

unique appelé OID (Object IDentifier). Ces

objets peuvent être indexés et partitionnés.

16

8

Persistance des objets

 Objets

colonnes:

décrivant des

relationnelle(s)

types

structurés

champs de table(s)

 Objets lignes: stockés en tant que n-

uplets d'une table objet

 Objets non persistants: utilisés en

mémoire dans un programme PL/SQL

17

Objets colonnes

Table relationnelle

 Ex.

CREATE TABLE les_personnes (

IdPers NUMBER(5) PRIMARY KEY,

EtCiv ETAT_CIVIL_t,

Adr ADRESSE_t);

Instanciation

 Ex.

INSERT INTO les_personnes VALUES (1000,

ETAT_CIVIL_t('Ben Abdallah', 'Salem', '15/10/1982'),

ADRESSE_t('5 av. Madrid', '1000', 'Tunis'));

Interrogation

 Ex.

SELECT IdPers, p.EtCiv.Nom, p.Adr.Ville

FROM les_personnes p;

18

9

Objets lignes

 Table objet

 Ex.

CREATE TABLE les_personnes OF PERSONNE_t (

CONSTRAINT pers_pk PRIMARY KEY (IdPers));

 Baser l'identifiant objet (OID) sur la clé primaire : ajout de la

clause OBJECT IDENTIFIER IS PRIMARY KEY

 Instanciation

 - Ex.

INSERT INTO les_personnes VALUES

(PERSONNE_t (1000,

ETAT_CIVIL_t('Ben Abdallah', 'Salem', '15/10/1982'),

ADRESSE_t('5 av. Madrid', '1000', 'Tunis')));

 Interrogation

 Ex.

SELECT IdPers, p.EtCiv.Nom, p.Adr.Ville

FROM les_personnes p;

Advertisement

19

Objets non persistants

 Déclaration PL/SQL

 Ex.

DECLARE

 Instanciation

une_personne PERSONNE_t;

 Ex.

BEGIN

une_personne := NEW PERSONNE_t (1000,

ETAT_CIVIL_t('Ben Abdallah', 'Salem', '15/10/1982'),

ADRESSE_t('5 av. Madrid', '1000', 'Tunis'));

 Utilisation

 Ex.

une_personne.IdPers := 1111;

une_personne.Adr.Ville := 'Ariana';

DBMS_OUTPUT.PUT_LlNE(une_personne.EtCiv.Nom);

20

10

Mise à jour d’objets persistants

Modification

 Ex. UPDATE les_personnes p

SET p.Adr.Ville = 'Ariana'

WHERE IdPers = 1000;

Suppression

 Ex. DELETE FROM les_personnes p

WHERE p.EtCiv.Nom = 'Ben Mohamed';

21

Chargement d’objets persistants

 Dans une requête SQL

SELECT VALUE(p) FROM les_personnes p;

 Ex.

 Value peut être spécifiée uniquement dans une instruction

SQL et permet de récupérer l’objet de l’enregistrement pour

la table que représente l’argument de la directive. Il s’agit

d’un alias de la table.

 Dans un bloc PL/SQL

 Ex.

DECLARE

une_personne PERSONNE_t;

BEGIN

SELECT VALUE(p) INTO une_personne

FROM les_personnes p WHERE IdPers = 1000;

DBMS_OUTPUT. PUT_LINE

(une_personne.EtCiv.Nom);

END;

/

22

11

Héritage

Superclasse

 Ex.

CREATE TYPE PERSONNE_t AS OBJECT (

IdPers NUMBER(5),

EtCIV ETAT_CIVIL_t,

Adr ADRESSE_t)

[NOT INSTANTIABLE] -- Classe abstraite (optionnel)

NOT FINAL

/

Sous-classe

 Ex.

CREATE TYPE ENSEIGNANT_t UNDER

PERSONNE_t (

Statut VARCHAR(20))

/

23

Substitution de types

 Objets : Un objet peut contenir une

instance de tout sous-type de son

propre type.

 Références: Une référence qui cible un

type peut pointer vers une instance de

tout sous-type de ce type.

 Collections: Une collection d'éléments

d'un type peut contenir des instances

de tout sous-type de ce type.

24

12

Substitution de types

Exemple :

 INSERT INTO les_personnes VALUES (

PERSONNE_t(2000,

ETAT_CIVIL_t('Ben Ahmed', 'Karim', '02/02/1932'),

ADRESSE_t ('Place Barcelone', '1000', 'Tunis')));

 INSERT INTO les_personnes VALUES (

ENSEIGNANT_t(3000,

ETAT_CIVIL_t(‘Ben Jemaa', 'Omar', '01/08/1962'),

ADRESSE_t ('Rue de Rome', '1000', 'Tunis'),

'Professeur'));

25

Fonctions sur les objets colonnes

ADRESSE

Rue : String

CP : String

Ville : String

ADR_ETRANGER

Pays : String

 SELECT TREAT(ADRESSE_t AS ADR_ETRANGER_t)

FROM les_personnes;

-- Recherche sélective des adresses des personnes habitant à

l'étranger

 Fonction IS OF : Traite à un niveau de la hiérarchie les objets

pour sélectionner que ceux des niveaux inférieurs de la

hiérarchie (la racine étant le niveau 0)

 SELECT VALUE(p) FROM les_personnes p

WHERE p.ADRESSE_t IS OF(ADR_ETRANGER_t);

-- Caractéristiques des personnes habitant à l'étranger

26

Advertisement

13

Héritage de type et non de table

Plan

Types d'objets et héritage

Références et associations

Collections

Méthodes

Vues objet

27

28

14

Mise en œuvre de références

 Définition

 - Ex. CREATE TYPE COURS AS OBJECT(

IdCours NUMBER(2),

Libelle VARCHAR(50),

RefEns REF ENSEIGNANT)

  • NB : RefEns pointe vers l'OID d'un enseignant.

 Instanciation

 Ex. CREATE TABLE les_cours OF COURS(

CONSTRAINT pk_cours PRIMARY KEY(ldCours));

 Une référence peut aussi être une colonne d'une table

relationnelle.

2929

Mise en œuvre de références

 Insertion

 Ex. INSERT INTO les_cours

VALUES(1, 'Economie', (SELECT REF(e) FROM

les_enseignants e WHERE e.ldPers = 9000));

 NB : L'OID de les_enseignants ne doit pas être basé sur

la clé primaire pour que la référence fonctionne.

 Mise à jour

 Ex. UPDATE les_cours c

SET c.RefEns = (SELECT REF(e) FROM

les_enseignants e WHERE e.ldPers = 9002)

3030

WHERE c.ldCours = 1;

15

Jointures implicites

 Dans la clause WHERE

 Ex.

SELECT c.Libelle FROM les cours c

WHERE c.RefEns.EtCiv.Nom = 'Chater';

 Dans la clause SELECT

 Ex.

SELECT c.RefEns.EtCiv.Nom

FROM les cours c

WHERE c_Libelle = 'Économie';

 Déréférencement

 Ex.

SELECT DEREF(RefEns) FROM les_cours

WHERE IdCours = 1;

Substitution de références

 Exemple

 CREATE TYPE REF _PERS(Ref REF PERSONNE)

/

 CREATE TABLE Index_personnes OF REF_PERS;

 INSERT INTO Index_personnes VALUES

(SELECT REF(p) FROM les_personnes p

WHERE p.ldpers = 1000);

 INSERT INTO Index_personnes VALUES

(SELECT REF(e) FROM les_enseignants e

WHERE e.ldPers = 9000);

3131

3232

16

Associations

 Associations 1-N

 Ex. COURS-ENSEIGNANT

 Associations M-N

ETUDIANT 0..*

0..*

FORMATION

 Ex.

CREATE TABLE NOTATION (

RefEtu REF ETUDIANT,

RefEpr REF EPREUVE,

Note NUMBER(4,1));

3333

Intégrité référencielle

 Cohérence parent-enfant

 Ex. La suppression d'un enseignant auquel des cours

sont rattachés doit être impossible.

 Instanciation

 Ex. CREATETABLE les_cours OF COURS(

CONSTRAINT pk_cours PRIMARY KEY(ldCours),

CONSTRAINT fk_cours_ref_ens1

RefEns REFERENCES les_enseignants);

3434

17

Intégrité référencielle

 Cohérence enfant-parent

 Ex. L'insertion d'une référence vers un enseignant

inexistant doit être impossible.

 Instanciation

 Ex. CREATE TABLE les_cours OF COURS(

CONSTRAINT pk_cours PRIMARY KEY(ldCours),

CONSTRAINT fk_cours_ref_ens1

RefEns REFERENCES les_enseignants,

CONSTRAINT fk_cours_ref_ens2

CHECK (RefEns IS NOT NULL));

3535

18