Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parEléonore Angèline Rondeau Modifié depuis plus de 8 années
1
1 Bases de Données Avancées 29 janvier 2016
2
2 Le Modèle Objet-Relationnel
3
3 Bibliographie [Connolly, 2004] Connolly T., Begg C., Strachan A. (2004): chapitre 29 Database Systems A Practical Approach to Design, Implementation and Management Addison Wesley [Gardarin, 2003] Gardarin, G. (2003): chapitre 13 Bases de Données Objet et Relationnel Eyrolles [Godin, 2006] Godin, R: Chapitre 7 Systèmes de gestion de bases de données par l’exemple Loze-Dion, Montréal [Melton, 2001] Melton, J. Simon A. (2001) SQL 1999: Understanding Relational Language Components Morgan Kaufmann Publishers, 2001
4
4 Motivations
5
Besoins des nouvelles applications objets complexes intégrer données et comportement manipulation de données à travers la composition Intégration avec le formalisme objet tout objet: analyse, conception, développement, bases de données persistance des données dans l'environnement objet Nécessité des modèles de données offrant ces concepts des systèmes supportant ces modèles 5
6
Modélisation de données Modèle de données permet de représenter le monde réel composé de: un ensemble de concepts un ensemble de règles pour gérer ces concepts Exemples de modèles de données modèle entité-association modèle relationnel modèle objet 6
7
7 Exemple Réseau d’agence immobilière
8
8 Concept du modèle de classes classe: propriétaire maison Étage Appartement Pièces Contraintes un appartement doit avoir au moins une salle de bains une maison peut avoir plusieurs propriétaires
9
9 Concept du modèle de classes Associations propriétaire : maison propriétaire : appartement maison : étage étage : pièce appartement : pièce Différents types d'association Composition généralisation/spécialisation association
10
10 Modélisation de données Modèle relationnel un seul concept: la relation seules les données sont représentées une limitation: la 1ère forme normale (1FN) une obligation: la normalisation
11
11 Modélisation de données Dans les nouvelles applications représenter données et traitements distinguer classes et associations raffiner le concept d'association généralisation/spécialisation composition Possibilités d'amélioration étendre le modèle relationnel SGBD relationnel-objet introduire de nouveaux modèles de données SGBD orientés objet
12
12 Extensions du modèle relationnel
13
13 Extensions du MR Objectifs: répondre aux besoins des nouvelles applications utiliser l'acquis des systèmes relationnels existants combler les insuffisances du modèle relationnel Insuffisance du modèle relationnel pauvreté des types de base 1ère forme normale : attributs mono-valués impossibilité de définir de nouveaux opérateurs ==> ensemble fermé de types et d'opérateurs de base
14
14 Extensions du MR Différentes extensions possibles et nécessaires : levée de la 1ère forme normale intégration du concept de type abstrait de données (ADT) Nouveaux systèmes Les systèmes objet-relationnels (SGBROR) En anglais: object-relational database systems
15
15 Levée de la 1FN
16
16 1FN Définition 1ère Forme Normale (1FN) : Tout attribut doit avoir une valeur atomique Conséquence un attribut ne peut être : une autre relation une liste de valeurs les compositions doivent être mises à plat
17
17 Comment s’en libérer Introduction de modèles NF2 non en 1ère Forme Normale (non first NF ou NF2) possibilité de définir des attributs comme des listes de valeurs de nouveaux opérateurs doivent être introduits : NEST et UNNEST Extension du LDD pour définir des types structurés pour créer des relations construites à partir de ces types Modification des opérateurs de base restriction, projection, jointure doivent être revus!
18
Exemple Un appartement est composé d'une liste de pièces Dans le modèle relationnel PièceNapNpieceNomSuperficie 11Salon30 12Salle à diner 20 13Cuisine10 14Chambre20 15Salle de bain 6 22Chambre15 21Salle40 18
19
Utilisation d’un modèle NF2 AppartementNapPieces 1,,, … 2,,… 19
20
Modèle NF2 Nouveaux Opérateurs : NEST et UNNEST NEST : 1FN -->NF2 permet de regrouper ensemble les composants UNNEST : NF2 --> 1FN décompose et ramène en 1ère Forme Normale 20
21
Nest et Unnest PièceNapNpieceNomSuperficie 11Salon30 12Salle à diner 20 13Cuisine10 14Chambre20 15Salle de bain 6 22Chambre15 21Salle40 AppartementNapPieces 1,,, … 2,,… Nest Unnest 21
22
Modèle NF2 Extensions des systèmes relationnels nécessité de modifier le noyau de base du SGBD pour supporter les opérateurs relationnels sur des objets complexes (relations plus en 1FN) pour traiter efficacement les manipulations de ces objets Nécessité de faire évoluer le langage de définition de données (LDD) permettre la définition de nouveaux types permettre la création de relations définies à partir de ces nouveaux types 22
23
23 SQL3 et les Objets
24
24 Objectif Permettre de définir des types de données: spécifiques aux applications réutilisables (héritage) extensibles Permettre d’intégrer des fonctions et procédures introduction de la notion de type abstrait de données (ADT) Définition de procédures et fonctions associées aux types
25
Nouveautés dans SQL3 le type tuple permet d’utiliser le constructeur tuple pour construire de nouveaux types le type référence permet d’associer un identifiant à un tuple les types collection actuellement uniquement tableau (ARRAY) sont prévus: ensemble, listes... sous-types et sur-types héritage 25
26
Nouveautés dans SQL3 Les types abstraits de données appelés User-Defined Types (UDT) permettent d’associer fonctions et procédures à un type les persistent stored modules (PSM) permettent le stockage de code les triggers 26
27
27 SQL3: Le support des objets
28
Comment étendre le relationnel à l’OO Concept de table quasi inchangé Nouveau concept, TYPE, qui décrit : les structures complexes et multivaluées le format des objets les méthodes hiérarchie d'héritage des types Un nouveau constructeur de domaine : REF pour définir les liens de composition Tables de 3 sortes tables "normales" de tuples en 1ère forme normale tables de tuples en non 1FN : tables de valeurs structurées tables d'objets 28
29
29 Les types abstraits User Defined Types User-Defined Type, ou UDT, est essentiellement une définition de classe avec structure et méthodes. Effets directes: 1.Chaque ligne d'une relation admet un type type de la relation 2.Chaque colonne d'une relation peut avoir un type UDT.
30
User Defined Types UDT Contiennent la définition de la structure des données (type) le comportement (opérateurs: procédures ou fonctions) 30
31
User Defined Types UDT Syntaxe CREATE TYPE NomType AS (liste d’attributs avec leur types) [redéfinition des fonctions = et <] [définition des méthodes] Exemple CREATE TYPE SocType AS ( name CHAR(20), addrCHAR(20), activity CHAR(20), ); CREATE TYPE PersonneType AS ( nameCHAR(20), birthDateDATE ); 31
32
32 UDT sous Oracle Syntaxe Oracle : 1.Ajouter “OBJECT” : CREATE … AS OBJECT. 1.Suivi de "/" pour stocker le type (persistance).
33
33 Exemples 1. Type avec OID pouvant être utilisé comme un objet: CREATE TYPE phone WITH OID (pays varchar, zone varchar, nombre int, description char(20)) 2. Type avec référence CREATE TYPE étudiant (NSS int, nom varchar, tel phone) 3. Sous-type CREATE TYPE étudiant UNDER personne (cycle varchar, année int)
34
34 Exemples 4. Type énuméré CREATE TYPE jour-ouvré (lun, mar, mer, jeu, ven) 5. Type avec OID et fonction CREATE TYPE employé WITH OID (nom char(10), datenais date, repos jour-ouvré, salaire float, FUNCTION age (E employé) RETURNS (int) {calcul de l’âge de E} END FUNCTION; );
35
35 Exemples 6. Autre type sans OID avec fonction CREATE TYPE adresse WITHOUT OID (rue char(20), codepost int, ville char(10), FUNCTION dept (A adresse) RETURNS (varchar) END FUNCTION); 7. Création de procédure SQL de mise à jour associée au type employé CREATE PROCEDURE augmenter (E employé, montant money) {UPDATE employé SET salaire=salaire+montant WHERE employé.OID=E} END PROCEDURE
36
36 Les constructeurs d’objets complexes: type Collection Objectifs disposer de constructeurs permettant de définir des collections constructeurs de collections ensemble : collection non ordonnée sans double SET sac : collection non ordonnée avec double MULTISET liste : collection ordonnée avec double LIST tableau : collection ordonnée et indexée ARRAY
37
Les types Collection dans SQL3 Exemple on définit l ’attribut Prénoms comme un tableau de 3 prénoms CREATE TYPE PropType ( NAS char(10); Nom char(20), Prénoms char(20) ARRAY(3), PropId REF(PropType)); 37
38
Les types Collection Exemple on définit un ensemble de personnes CREATE TYPE Personnes ( Contenu SET (personne)); Ou un ensemble d’identifiants de personnes CREATE TYPE Personnes ( Contenu SET (REF(personne))); 38
39
Sous-type et sur-type Objectifs permettre la réutilisation de définition de types permettre de spécialiser des types Syntaxe CREATE TYPE sous-type UNDER sur-type AS (liste des attributs spécifiques) Exemple CREATE TYPE TEnfant UNDER TPersonne AS (JouetPréféré char(20)) 39
40
Les tables différentes possibilités utiliser les types pour définir les classes définir les attributs lors de la création de table Exemple CREATE TABLE Propriétaires AS ( NAS char(10); Nom char(20), Prénom char(20), PropId REF(PropType)); 40
41
Les tables: exemple CREATE TABLE Accidents ( Accident int, rapport text, photo image); Ou encore CREATE TYPE conducteur ( Conducteur varchar, age int); CREATE TYPE accident (accident int, rapport text, photo image) CREATE TABLE police (npolice int, nom varchar, adresse adresse, conducteurs SET(conducteur), accidents LIST(accident));) 41
42
Les tables: exemple Facilité de passer d’un type à une table de tuples de ce type et réciproquement: CREATE TABLE employés OF employé; CREATE TABLE vins (NV int, CRU varchar, degré float) OF NEW TYPE vin; 42
43
Tables et sous-tables Objectif Possibilité de définir l’héritage lors de la création de tables syntaxe CREATE TABLE sous-table UNDER table AS (liste des attributs spécifiques) 43
44
Tables et sous-tables: exemple create type personne (nom varchar2(10), adresse varchar2(30), datenais date) ; create type employé under personne (affectation varchar2(10), repos jour-ouvré); create type étudiant under personne (université varchar2(20) no-étudiant integer) ; create table personnes of personne (primary key (nom)) ; create table employés under personnes of employé ; 44
45
Tables et sous-tables: exemple CREATE TYPE Tpersonne AS OBJECT (AVS CHAR(11), nom VARCHAR(20), prénoms Tprénoms, conjoint REF TPersonne) NOT FINAL NOT FINAL : mot clé obligatoire si le type a des soustypes CREATE TYPE Tétudiant UNDER Tpersonne (faculté VARCHAR(18), cycle VARCHAR(18)) CREATE TABLE LesPersonnes OF Tpersonne CREATE TABLE LesEtudiants OF Tétudiant Attention : Il n'y a pas inclusion de population entre LesEtudiants et LesPersonnes. Les tables sont indépendantes l'une de l'autre. 45
46
Tables et sous-tables: exemple LesPersonnes peut contenir des objets de type Tpersonne et Tétudiant INSERT INTO LesPersonnes VALUES(11111,'Rochat', Tprénoms('Philippe'), NULL) => création d'un objet de type Tpersonne et insertion dans la table LesPersonnes INSERT INTO LesPersonnes VALUES (Tétudiant(22222, 'Muller', Tprénoms('Annie', 'Marie'), NULL, 'HEC', 'Master') => création d'un objet de type Tétudiant et insertion dans la table LesPersonnes De même, l'attribut référence conjoint peut contenir un oid d'objet de type Tpersonne ou Tétudiant 46
47
L’appel de fonctions et d’opérateurs dans les requêtes Accès aux fonctions: Nom et âge des employés de moins de 35 ans: SELECT E.Nom, AGE(E) FROM employés E WHERE AGE(E)<35; 47
48
L’appel de fonctions et d’opérateurs dans les requêtes Accès aux attributs composés: Soit: CREATE TABLE employésLoc UNDER employés AS (adress adresse) Nom et jour de repos des employés du centre habitant Kairouan SELECT nom, repos FROM employésLoc E WHERE DEPT(E.adress) = " centre " AND ville(E.adress) = " Kairouan " ; 48
49
L’appel de fonctions et d’opérateurs dans les requêtes Exemple: Soit le type point et une fonction distance entre deux points: Type point (abs x, ord y, FUNCTION Distance(P1 point, P2 point) RETURN (REAL) ); Soit l’implémentation des employés par la table: Employés (numemp int, nom varchar, adress adresse, position point); 49
50
L’appel de fonctions et d’opérateurs dans les requêtes Noms et adresses de tous les employés à moins de 100 unités de distance de l’employé Mohamed: SELECT E.nom, E.adress FROM employés G, employés E WHERE G.nom=« Mohamed » AND Distance(G.position, E.position)<100; 50
51
L’appel de fonctions et d’opérateurs dans les requêtes Accès aux opérateurs SELECT r.name FROM emp, emp r WHERE emp.name = 'Joe' and Contained (r.location, circle(emp.location,1)) ; 51
52
Objectifs permet de définir des références sur les tuples utilisé pour implémenter les identifiants d'objet La référence peut être rendue accessible, en définissant dans le type des tuples, une référence au tuple lui-même lors de la création de table on spécifie que cette référence est générée par le système Syntaxe REF (NomType) Identité – Attribut Reference 52
53
Deux types d’attributs référence!! EXTERNAL KEY : valeur de la clé non orienté CREATE TABLE Ancêtre (num NUMBER(3) PRIMARY KEY, nom VARCHAR(20), prénoms Tprénoms, père NUMBER(3) REFERENCES Ancêtre, mère NUMBER(3) REFERENCES Ancêtre) REF nom-type : lien de composition objet (oid) orienté pas d'inverse géré par le SGBD pas de mise à jour faite par le SGBD lors des suppressions d'objets composants => Attention aux références invalides ! 53
54
Attribut référence objet CREATE TYPE Tancêtre AS OBJECT ( num NUMBER(3), nom VARCHAR(20), prénoms Tprénoms, père REF Tancêtre, mère REF Tancêtre ) CREATE TABLE LesAncêtres OF Tancêtre (PRIMARY KEY(num)) 54
55
Identité – Attribut Reference CREATE TYPE T-Personne AS OBJECT ( AVS NUMBER, nom VARCHAR(18), prénom VARCHAR(18), conjoint REF T-Personne, /*attribut référence qui contiendra un oid de type T-Personne*/ …. ) / Attention, le type suivant ne contient pas d'attribut référence: CREATE TYPE T-Personne2 AS OBJECT ( AVS NUMBER, nom VARCHAR(18), prénom VARCHAR(18), voiture T-Voiture, /*attribut à valeur complexe de type T- Voiture*/ …. ) / 55
56
Manipulation des att. Référence objet Trois nouveaux opérateurs permettent de récupérer l'oid ou la valeur d'un objet REF(objet) => l'oid de l'objet VALUE(objet) => valeur structurée sous la forme nom-type(valeur) DEREF(oid) => valeur structurée sous la forme nom-type(valeur) 56
57
Manipulation des att. Référence objet SELECT p.nom, p.conjoint FROM LesPersonnes p; donne le nom des personnes avec l'oid de leur conjoint. Et l'instruction : SELECT p.nom, DEREF(p.conjoint) FROM LesPersonnes p; donne pour chaque personne p, son nom, et la "valeur" de son conjoint, à savoir : son numéro AVS, son nom, son prénom et l'oid de son conjoint (c'est à dire l'oid de la personne p elle-même). 57
58
Manipulation des att. Référence objet Rappel : CREATE TYPE Tancêtre AS OBJECT (num NUMBER(3), nom VARCHAR(20), prénoms Tprénoms, père REF Tancêtre, mère REF Tancêtre) Insérer dans LesAncêtres une nouvelle personne : (12, Philippe Michel Rochat, de père le numéro 10 et de mère le numéro 11) INSERT INTO LesAncêtres VALUES ( 12, 'Rochat', Tprénoms('Philippe', 'Michel'), (SELECT REF(x) FROM LesAncêtres x WHERE x.num=10), (SELECT REF(x) FROM LesAncêtres x WHERE x.num=11) ) 58
59
Nested Tables Nested Tables = Table imbriquée –Un attribut de type table –Table maître (principale) = table contenant au moins un attribut de type table –Principe : une ligne de table maître => un nombre quelconque de lignes dans la table imbriquée. 59
60
Nested Tables Création : 2 étapes 1. Créer le type de la table imbriquée CREATE TYPE nom-type1 AS TABLE OF nom-type2; nom-type2 : type usuel, type défini par l’utilisateur. 2.Créer la table maître avec la table imbriquée Create une_table ( Nom_col type, …, nom_col_i nomtype1 ) NESTED TABLE nom_col_i STORE AS nom_table 60
61
Nested Tables : exemple Create type ty_passager (nom VARCHAR2 (35), pays VARCHAR2 (50)); 1. Create type ty_liste_passagers as TABLE OF ty_passager ; 2. Create TABLE vol ( num char(6), date DATE, pilote varchar2 (35), liste_passagers ty_liste_passagers) NESTED TABLE liste_passagers STORE AS table_passagers ; 61
62
Insertion simultanée de lignes Objectif : insérer au même temps une ligne dans la table maître et plusieurs lignes dans la table imbriquée Exemple INSERT INTO vol VALUES ('TU727', TO_DATE('20/10/06'), ty_liste_passagers ( ty_passager ('Ali','TUNISIE'), ty_passager ('Fatma','TUNISIE'), ty_passager ('Alain','France') )); 62
63
Ajout d'une ligne dans une nested table Problème : ajouter une ligne à une table imbriquée associée à une ligne de la table maître Préalable : sélectionner la ligne (et la colonne) de la table maître concernée par une requête INSERT INTO TABLE (requête) VALUES(…); Exemple : ajout d'un passager au vol TU723 INSERT INTO TABLE (SELECT liste_passagers FROM vol WHERE num='TU723') VALUES (ty_passager (('SALAH','TUNIS'))); 63
64
64 Modification d'une colonne dans une table imbriquée Problème : identique à celle de l'ajout Instruction UPDATE adaptée UPDATE TABLE (requête) SET … WHERE …; Exemple : Modifier le passager du vol TU723 salah UPDATE TABLE (SELECT liste_passagers FROM vol WHERE num='TU723') SET PAYS =‘Tunis' where nom ='SALAH'; 64
65
Stockage des tables imbriquées Oracle stocke chaque table imbriquée comme dans une relation R dans laquelle tous les tuples pour un attribut A sont stockés. Dans notre exemple c’est la table table_passagers 65
66
Interroger une nested table Une requête sur une table maître portant sur un champs « nested » produit des tuples avec deux constructeurs : –1 pour la table nested –1 pour le type des tuples dans la table 66
67
Exemple Select liste_passagers from vol where num=‘TU727’; ty_liste_passagers ( ty_passager (‘Ali’, ‘Tunisie’) ty_passager (‘Amor’, ’Maroc’) ) 67
68
68 CREATE TYPE emps as TABLE OF personne; CREATE TYPE service AS OBJECT ( numserv number, nom varchar(5), directeur personne, membres emps; CREATE TABLE LesServices OF service NESTED TABLE membres STORE AS membres_tab; Interroger une collection dans la clause SELECT imbrique les éléments de la collection dans le n-uplet résultat : Select s.membres from Lesservice s; Renvoie la collection des membres sous la forme imbriquée : Membres (id, nom, datnais) --------------------------- emps(personne(1,max,12-06-60),personne(2,toto,15-05-65)) emps(personne(3,lulu,12-12-63),personne(4,joe,13-01-82)) Exemple 68
69
69 Conversion d’une nested table Une table imbriquée peut être convertie à une relation ordinaire en appliquant le mot clé TABLE() Cette relation peut donc être utilisée dans la clause FROM Trouver le noms des passagers du vol TU723 de nationalité tunisienne Select pp.nom From table (select liste_passagers from vol where num=‘TU727’) pp Where pp.nationalite=‘Tunisienne’ 69
70
70 Exemple SELECT m.* FROM service s, TABLE(s.membres) m; Renvoie la collection des membres, sous forme désimbriquée : Id Nom date ---------------------------- 1 Max 12-06-60 2 Toto 15-05-65 3 Lulu 12-12-63 4 Joe 13-01-82
71
71 Exemple L’expression table peut contenir une sous-requête d’une collection : Select * From table (select s.membres from service s where numserv= 432) Renvoie la collection des membres du service 432. Remarques : la sous-requête doit renvoyer un type collection la clause select de la sous-requête doit contenir un seul attribut la sous-requête doit renvoyer une seule collection
72
72 L’expression TABLE permet de désimbriquer des collections multiniveaux : create type ville as object ( nom varchar(20), population number); create type villes as table of ville; create type region as object ( nom varchar(20), agglomérations villes); create type regions as table of region; create table pays (nom varchar(15), reg regions, …); La relation pays contient une table imbriquée de régions, chaque région ayant une table imbriquée de villes. le nom de toutes les villes???
73
73 Select v.nom From pays p, table(p.reg) r, table(r.ville) v; 73
74
74 Mise à jour d’éléments d’une nested table Pour mettre à jour des éléments d’une collection de type table of, il faut utiliser l’expression TABLE dans l’instruction du DML (insert, update, delete); – Insertion de nouveaux éléments dans une collection – Suppression d’un élément – Mise à jour d’un élément Oracle ne permet pas ce type de modification sur les colonnes de type VARRAY. Seules les modifications atomiques sont autorisées.
75
75 Insertion d’un nouveau membre dans le service 123 : INSERT INTO TABLE (SELECT s.membres FROM service s WHERE numserv= 123) VALUES (1,‘martin’,’12 juin 60’); Modification d’un membre du service 123 : UPDATE TABLE (SELECT s.membres FROM service s WHERE numserv= 123)m SET VALUE(m) = personne(1,‘martin’,‘12 mai 60’) WHERE m.id = 1;
76
76 Les modifications dans les collections multiniveaux peuvent être faites de façon atomique, sur la collection en entier, ou sur des éléments sélectionnés. INSERT INTO pays VALUES(‘France’, regions (region(‘Auvergne’, villes (ville(‘Clermont’,63) (ville(‘Moulins’,03)) region(‘Rhône-Alpes’, ville(ville(‘Chambéry,73) (ville(‘Lyon’,69)) ) )); Exemple
77
77 Soit v_regions une variable de type regions UPDATE pays p SET p.regions = :v_regions WHERE p.nom = ‘France’; Met à jour les régions de France avec le contenu de la variable v_regions. Exemple
78
78 Recherche et héritage Spécifier la portée de la requête dans le graphe d’héritage Rechercher le nom des personnes de prénom Mohamed qui ne sont pas des enfants SELECT Nom FROM ONLY Personne WHERE Prénom = ‘ Mohamed’
79
Nouvelle condition élémentaire VALUE(objet) IS OF nom-sous-type condition vraie ssi l'objet est du type "nom- soustype" Exemple : SELECT p FROM LesPersonnes p WHERE VALUE(p) IS OF Tétudiant => rend les objets de LesPersonnes qui sont de type Tétudiant 79
80
Nouvelle condition élémentaire SELECT value(c) FROM Compagnie c WHERE c.employes IS OF (manager_t, …) 80
81
81
82
82
83
83 Le standard SQL3 Aspects importants: le changement dans la continuité ajouter de nouvelles fonctionnalités aux SGBD relationnels sans tout changer compatibilité avec les versions précédentes du standard Statut: standard approuvé décrit dans le livre de Melton et Simon certains aspects déjà implémentés dans les systèmes commerciaux Oracle8, Informix, IBM/UDB 83
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.