Académique Documents
Professionnel Documents
Culture Documents
CHAPITRE II
Bureau 26
Bloc des enseignants- Université de Bejaia
& LIMED
Nassima.bouadem@univ-bejaia.dz
PLAN
Structure de données simple
Pas de référence entre tables
Pauvereté du système de typage
Programmation interdite dans le SGBD
Sémantique insuffisante
SOLUTON1: LE MODÈLE
RELATIONNEL ÉTENDU (OBJET-
RELATIONNEL)
LES SGBDRO
Les SGBDRO sont nés du double constat de la puissance nouvelle promise par les SGBDOO et de
l'insuffisance de leur réalité pour répondre aux exigences de l'industrie des BD classiques.
Leur approche est plutôt d'introduire dans les SGBDR, les concepts apportés par les SGBDOO plutôt
que de concevoir de nouveaux systèmes (CROZAT, 2014).
Cette approche intègre des éléments de structure complexe dans une relation de type NF 2 (Non First
Normal Form) et pourra contenir un attribut composé d’une liste de valeurs ou de plusieurs attributs
(Sans, 2000).
Dans ce contexte, les SGBDRO peuvent (1) gérer des données complexes (temps, géoréférencement,
multimédia, types utilisateurs, etc.), (2) rapprocher le modèle logique du modèle conceptuel et (3)
réduire les pertes de performance liées à la normalisation et aux jointures
(Sans, 2000).
Par rapport au modèle relationnel standard : on a moins besoin d’aplatir les données, ici on a
une seule table avec des tables imbriquées au lieu de 3 tables on a moins besoin de faire des
jointures pour récupérer les informations sur les accidents du contrat 1111, on accède
simplement à l’attribut accidents.
ADT: ABSTRACT DATA TYPE
Pour introduire un type abstrait de données (ADT: Abstract Data Type) pour
définir nouveaux types dépendant de l’application [4,9]
Replace est pour modifier un type existant sans le supprimer et le recréer à nouveau.
1/ TYPE OBJECT
Le type OBJECT permet de créer des valeurs structurées sous forme de couple <valeur, oid> tels que:
Valeur: une donnée
oid: identificateur d’objet
Exemple: création de type adresse:
Veut dire littérairement ’’variable de type Array’’ qui est concrètement un tableau dynamique:
permet de définir des collections de taille limitée de données ordonnées, indexées avec les doubles
[1]
Exemple:
Création de type Prenoms de chaines de caractères est faite comme suit
Le Type NESTED TABLE: ou table imbriquée, correspond à des collections non ordonnées et non limitées en
taille avec des doubles [4,11].
la création de type NESTED TABLE est faite par le mot clé TABLE OF.
Exemple1
On crée le type nested table ’’ens_diplomes’’ à partir du type ‘’diplomes’’
Exemple2
Création de table d’objets avec la table imbriquée Nested table
Remarque:Une Nested Table n’est pas une table objet, elle ne possède pas d’OID
3/ Type REF
Le type REF d'un attribut dit "attribut référence" ayant comme valeur d'identificateur d'objet OID.
Il permet de référencer une ou plusieurs instances d'un type d'objet afin de réduire les jointures entre
tables [4, 11]. Ce type conserve dans les tables une référence plutôt qu'une clé étrangère.
Exemple: soit le schéma suivant
LE SCHÉMA RELATIONNEL ÉTENDU
Le schéma relationnel étendu décrit les types ADT et les relations à travers le langage SQL[4].Il existe
deux modes d'associations [9,10]:
Associaion symétrique: assure une imbrication partielle entre types. Dans ce mode, deux relations sont
dominantes. Il produit deux tables avec des références entre elles.
Association agrégation: dans ce mode d'association, l'un des types ADT domine l'autre. Ce mode assure
l'imbrication totale qui produit une seule table.
DÉCLARATION & MANIPULATION DU TYPE OBJET
Création
La commande CREATE TYPE permet de créer un type objet. Elle
possède trois parties :
(1) Déclaration de la structure du type
(2) Déclaration des méthodes associées au type
(3) Positionnement du type dans une hiérarchie d’héritage.
DÉCLARATION & MANIPULATION DU TYPE OBJET
DÉCLARATION & MANIPULATION DU TYPE OBJET
Persistance d’objet
Un type objet permet de créer trois catégories d’objets sous Oracle :
Objets colonne : stockés en tant que colonne dans une table ;
Objets ligne : stockés en tant que ligne d’une table objet. Chaque objet
ligne possède un identificateur d’objet OID unique ;
Objet non persistant : existe durant l’exécution d’un programme PL/SQL.
DÉCLARATION & MANIPULATION DU TYPE OBJET
Objet colonne
Un type objet peut être utilisé comme type d’une colonne dans une table
relationnelle (ou objet). Cette colonne contiendra des objets colonne.
DÉCLARATION & MANIPULATION DU TYPE OBJET
Vols
numero
dateVol
Objet colonne nombrePax
depart,
arrivee,
Exemple: CDB
La colonne « CDB » est définie à l’aide du type « pilote_t ».
Elle contiendra des objets colonne.
DÉCLARATION & MANIPULATION DU TYPE OBJET
Vols
Objet colonne numero
dateVol
nombrePax
depart,
CREATE TABLE Vols ( numero NUMBER, dateVol DATE, arrivee,
nombrePax NUMBER(3), depart VARCHAR(30), CDB
arrivee VARCHAR(30),
CDB pilote_t,
CONSTRAINT pk_Vols PRIMARY KEY(numero) );
DÉCLARATION & MANIPULATION DU TYPE OBJET
La notation pointillée est utilisée pour accéder à des colonnes terminales des
objets colonne.
Une table objet dépend d’un type objet. La directive OF dans l’instruction CREATE
TABLE permet de créer une table objet.
Contraintes d’intégrité
Les contraintes (PRIMARY KEY, NOT NULL, CHECK, UNIQUE, etc.) doivent être
déclarées lors de la création de la table objet.
CREATION D’UNE TABLE OBJET
Les objets ligne sont stockés en tant que lignes d’une table objet.
Les valeurs d’un objet ligne occupent toutes les colonnes de la table.
Le constructeur par défaut du type objet est facultatif lors de l’instanciation des
objets ligne.
CONCEPT D’OBJET LIGNE
Exemple:
Un pilote sera stocké en tant qu’objet ligne alors que son état civil sera stocké en
tant qu’objet colonne.
INSERT INTO Pilotes VALUES (pilote_t('PL-11',
etat_civil_t('Peyrard', '05-02-1970'),
adresse_t(1,'G. Brassens', 'Blagnac'),3500));
Les tuples des tables objets sont modifiés par la commande UPDATE et supprimés
par la commande DELETE.
Un alias de la table objet est utilisé pour parcourir les colonnes terminales des
objets colonne.
MANIPULATION D’OBJET LIGNE
Exemple: Modifier et supprimer des pilotes de la table Pilotes
UPDATE Pilotes p
SET p.etat_civil.nom = ‘Sigaudes’, p.paye=3700
WHERE p.brevet = ‘PL-11’ ;
DELETE FROM Pilotes p
WHERE NOT (p.adresse.ville = ‘Blagnac’);
CHARGEMENT D’UN OBJET
VALUE(alias) renvoie le contenu d’un objet sous forme d’un type.
Valeurs NULL
Un objet ligne ne peut être valué à NULL.
Un objet colonne (ou non persistant) peut être initialisé à
NULL.
CHARGEMENT D’UN OBJET
Exemple
INSERT INTO Pilotes VALUES( Pilote_t(‘PL1’, etat_civil_t (‘Bidal’, ’16-
01-1965’), adresse_t (NULL, NULL, NULL), 3000)) ;
L’objet colonne adresse est vide
Une colonne de type T pourra contenir des objets colonne créés à partir
du type T ou de tout sous-type de T.
HERITAGE DE TYPE
Substitution d’objets colonne
Exemple
CREATE TYPE pilote_t AS OBJECT (brevet VARCHAR(6), nom VARCHAR(20), ) NOT FIANL
/
CREATE TYPE pilotechasse_t UNDER pilote_t (baseAerienne VARCHAR(20), surnom VARCHAR(10))
/
La colonne pilote de type pilote_t pourra contenir des objets du type pilote_t ou des objest de tous
sous types ( ici pilotechasse_t et piloteligne_t)
/
HERITAGE DE TYPE
Substitution d’objets colonne
Exemple
Pour insérer des nouveau tuples dans la table Avions on feras ainsi:
Exemple
Exemple: Afficher à partir de la table Avions les noms et les compagnies des
pilotes de ligne.
SELECT a.pilote.nom,
TREAT(a.pilote as piloteLigne_t).compagnie as compagnie
FROM Avions a
WHERE a.pilote IS OF (piloteLigne_t) ;
HERITAGE DE TYPE
Fonction IS OF
PILOTE.NOM COMPAGNIE
------------------------------------------------------
Ente Air-Littoral
HERITAGE DE TYPE
Exercice
1. Afficher les objets ligne de la table Pilotes en tant qu’instance du type piloteLigne_t
2. Afficher à partir de la table Avions les pilotes de chasse et les pilotes de ligne.
3. Afficher à partir de la table Pilotes les noms et les compagnies des pilotes de ligne.
4. Afficher à partir de la table Pilotes les pilotes de chasse et les pilotes de ligne.
5. Afficher l’immatriculation des avions et les noms des pilotes qui ne sont ni pilotes de
chasse ni pilotes de ligne.
6. Afficher les pilotes (table Pilotes) qui ne sont ni pilote de chasse ni pilote de ligne.