UNIVERSITE DE M SILA BDDA 2014/2015



Documents pareils
A QUOI SERVENT LES BASES DE DONNÉES?

A QUOI SERVENT LES BASES DE DONNÉES?

Bases de Données relationnelles et leurs systèmes de Gestion

BASES DE DONNEES ORIENTEES OBJETS BDA10.1

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

I4 : Bases de Données

Cours Bases de données 2ème année IUT

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Hala Skaf-Molli. Nancy-Université 14 mai 2007

Corrigés détaillés des exercices

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

CREATION WEB DYNAMIQUE

Langage SQL : créer et interroger une base

Quelques aspects du Relationnel-Objet du SGBD Oracle

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Le Langage De Description De Données(LDD)

Application web de gestion de comptes en banques

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

TP Contraintes - Triggers

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Bases de données relationnelles

Création et Gestion des tables

Chapitre 5 LE MODELE ENTITE - ASSOCIATION

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

PHP 5. La base de données MySql. A. Belaïd 1

Intégrité sémantique dans les bases de données relationnelles

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Bases de données avancées

Bases de Données Relationnelles. Le Modèle Relationnel

AGRÉGATION «ÉCONOMIE ET GESTION»

UML et les Bases de Données

Intégrité des données

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Gestion de base de données

Compte-rendu de projet de Système de gestion de base de données

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Connexion à une base de données. Connexion à une base de données. Connexion à une base de données Développement d'une application

Olivier Mondet

1 Position du problème

Bases de Données. Plan

Devoir Data WareHouse

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

Génie Logiciel avec Ada. 4 février 2013

Le langage SQL (première partie) c Olivier Caron

Diagramme de classes

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Héritage presque multiple en Java (1/2)

Le Langage SQL version Oracle

Ecole Polytechnique de Louvain INGI Fichiers et bases de données

Bases de données avancées Introduction

Bases de Données Avancées

SQL Historique

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Rappel sur les bases de données

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

FileMaker 13. Guide de référence SQL

Introduction au Système de Gestion de Base de Données et aux Base de Données

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Compétences Business Objects

[BASE DE DONNEES MULTIMEDIA]

Oracle. SQL 3 - Objet - XML. Auteur : Clotilde Attouche. Version 1.1. Du 6 Mars 2010

OpenPaaS Le réseau social d'entreprise

TP3 : Creation de tables 1 seance

Administration des bases de données. Jean-Yves Antoine

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Mysql avec EasyPhp. 1 er mars 2006

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

Chapitre 10. Architectures des systèmes de gestion de bases de données

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Chapitre 5 : Les procédures stockées PL/SQL

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Historisation des données

Le langage SQL Rappels

II. Modèle conceptuel le modèle entité-association

Les BASES de DONNEES dans WampServer

1. Base de données SQLite

16H Cours / 18H TD / 20H TP

TP Bases de données réparties

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Bases de données élémentaires Maude Manouvrier

Modélisation Conceptuelle. Partie 2: Le modèle Entité-Association

Pour les débutants. langage de définition des données

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Bases de données - Modèle relationnel

Transcription:

Modèle Relationnel /Objet Le modèle objet-relationnel (OR) reprend le modèle relationnel en ajoutant quelques notions qui comblent les plus grosses lacunes du modèle relationnel Pourquoi étendre le modèle relationnel? - La reconstitution d objets complexes éclatés sur plusieurs tables relationnelles est coûteuse car elle occasionne de nombreuses jointures - Pour échapper aux éclatements-jointures, l'or réhabilite les références qui permettent d'implanter des structures complexes - les attributs multivaluées (tableaux, ensembles ou listes). -L'utilisation de références facilite aussi l'utilisation des données très volumineuses du multimédia en permettant leur partage simplement et à moindre coût (sans jointure) Les nouvelles possibilités offertes aux utilisateurs sont les suivantes : - Définir de nouveaux domaines à structure complexe, appelés types, - associer à chaque type des méthodes, - créer des hiérarchies de types - créer des objets qui sont composés d'une valeur structurée et d'un oid, - établir des liens de composition par des attributs référence qui contiennent l'oid de l'objet composant. - créer des tables contenant soit des tuples normaux (en première forme normale), soit des tuples en non première forme normale (des valeurs structurées), soit des objets. 1. Types Les utilisateurs ont à leur disposition les domaines usuels de SQL tels que VarChar, Number, Date Ils peuvent aussi définir de nouveaux domaines (appelés types) propres à leur base de données grâce au constructeur TYPE dont il existe plusieurs formes. Les deux premières (VARRAY et nested TABLE) permettent d'avoir des attributs multivalués. La troisième forme (OBJECT) a une double fonction: elle permet de créer des valeurs structurées (notamment pour les attributs complexes), et de créer des objets, c'est à dire des couples <valeur structurée, oid>. 1-1 Les types VARRAY : Ce type permet de créer des attributs multivalués sous la forme de tableaux à une dimension. L'instruction suivante: CREATE TYPE nom-type AS VARRAY (nb-max) OF nom-type2 ; déclare un nouveau type de nom "nom-type" dont chaque élément est un tableau à une dimension (un vecteur) de taille maximale "nb-max", et dont les éléments sont tous du type "nom-type2". Le type nom-type2 peut être n'importe quel type, prédéfini de SQL (VarChar, Date, Number ) ou défini par l'utilisateur. 1-2 Les types table emboîtée ("nested TABLE") : Ce type permet de créer des multivalués sous la forme de tables relationnelles qui vont être incluses dans les autres tables où elles serviront de domaine à un attribut. L'instruction suivante: CREATE TYPE nom-type AS TABLE OF nom-type2 ; déclare un nouveau type de nom "nom-type" dont chaque élément est une table relationnelle dont les tuples sont tous du type "nom-type2". Le type nom-type2 peut être n'importe quel type, prédéfini de SQL ou défini par l'utilisateur. Lors de l'emploi de ce type, nom-type, comme domaine d'un attribut d'une autre table, par exemple de l'attribut A de la table T, le système Oracle crée physiquement une table annexe (la nested TABLE) dans laquelle il stockera les tuples (les valeurs) de l'attribut A. L'utilisateur doit, lors de la création de la table T, définir le nom de cette table annexe. Pour cela, l'instruction CREATE TABLE contient une clause supplémentaire afin que l'utilisateur puisse nommer cette table annexe : CREATE TABLE. NESTED TABLE nom-attribut-de-type-table-emboîtée STORE AS nom-table-annexe ; Accès aux valeurs multivaluées (Types VARRAY et TABLE) - opérateurs usuels de SQL - condition élémentaire : élément IN collection

- condition élémentaire : EXIST collection - Nouveau : déclaration d'une variable sur une collection -SELECT FROM nom-table t, TABLE (t.attribut-multivalué) v => accès et mise à jour soit de toute la collection, soit d'un de ses éléments - Exemples CREATE TYPE Tprénoms AS VARRAY(4) OF VARCHAR(20); CREATE TABLE Personne ( AVS CHAR(11), nom VARCHAR(20), prénoms Tprénoms, adr Tadresse ) -Personnes dont un prénom est Annie : SELECT p FROM Personne p, TABLE(p.prénoms) pr WHERE pr.column_value = 'Annie' SELECT p FROM Personne p WHERE 'Annie' IN (SELECT * FROM TABLE (p.prénoms)) 1-3Les types OBJECT : Ce type crée des valeurs structurées et/ou des objets. L'instruction suivante: CREATE TYPE nom-type AS OBJECT( nom-attribut1 nom-type1, nom-attribut2 nom-type2,, nom-attributn nom-typen ) déclare un nouveau type de nom "nom-type" dont chaque élément est un objet structuré comportant les attributs nom-attribut1 (de domaine nom-type1), nom-attribut2 (de domaine nom-type2), et nomattributn (de domaine nom-typen). Les types nom-typei peuvent être n'importe quel type, prédéfini de SQL ou défini par l'utilisateur. Cette instruction permet aussi de déclarer un jeu de méthodes associées aux objets de ce type (en préfixant la déclaration de la méthode du mot clé MEMBER). Chacun de ces types, VARRAY, TABLE emboîtée et OBJECT, ne permet de définir que des structures contenant un seul constructeur : Pour créer une structure contenant plusieurs constructeurs, il faut définir un type intermédiaire par constructeur. Par exemple, pour représenter une personne avec ses enfants, et pour chaque enfant ses prénoms, on devra créer les types suivants: CREATE TYPE T-Personne AS OBJECT ( nom VARCHAR(20), prénoms T-ListePrénoms, enfants T- ListeEnfants ) CREATE TYPE T-ListePrénoms AS VARRAY OF VARCHAR(20) ; CREATE TYPE T-Enfant AS OBJECT( prénoms T-ListePrénoms, sexe CHAR,dateNais DATE ) CREATE TYPE T-ListeEnfants AS VARRAY OF T-Enfant ; Accès aux valeurs complexes (type OBJECT) - Accès aux composants via la notation pointée CREATE TYPE Tadresse AS OBJECT ( rue VARCHAR(20), numéro VARCHAR(4), localité VARCHAR(20), NPA CHAR(4) ) ; CREATE TABLE Personne ( AVS CHAR(11), nom VARCHAR(20), prénoms Tprénoms, adr Tadresse ) SELECT p.adresse.localité FROM Personne p WHERE p.avs = 12345123451 2. Tables Les tables sont les récipients qui stockent les valeurs ou les objets. Les tables peuvent être : - soit des tables du relationnel classique (contenant des valeurs de type tuple en première forme normale). - soit des tables à structure complexe contenant des valeurs structurées (en non première forme normale). - soit enfin des tables contenant des objets (qui eux-mêmes peuvent être structurés en non première forme normale). 2-1 Création d'une table relationnelle classique On emploie l'instruction CREATE TABLE du relationnel classique: CREATE TABLE nom-table ( nom-attribut1 nom-type1, nom-attribut2 nom-type2,, nomattributn nom-typen ) Cette table contiendra des valeurs de type tuple en première forme normale.

2-2 Création d'une table relationnelle en non première forme normale On emploie l'instruction CREATE TABLE du relationnel classique mais en utilisant un ou plusieurs types créés précédemment par un constructeur CREATE TYPE. CREATE TABLE nom-table ( nom-attribut1 nom-type1,nom-attribut2 nom-type2,, nomattributn nom-typen ) où au moins un des nom-typei est le nom d'un type construit (VARRAY, TABLE emboîtée, ou OBJECT). 2-3 Création d'une table d'objets On emploie l'instruction: CREATE TABLE nom-table OF nom-type Où nom-type est le nom d'un type OBJECT (qui doit avoir été créé auparavant). Le format de la table est celui de nom-type. Cette table contiendra des objets, identifiés par leurs oids et structurés selon le type "nom-type". On peut associer aux tables quelle que soit leur sorte les contraintes usuelles de SQL : -PRIMARY KEY (nom-col*) -UNIQUE (nom-col*) -FOREIGN KEY (nom-col*) REFERENCES nom-table [(nom-col*)] [action] -CHECK ( condition) 3. Identité et attributs-référence Tout ce qui est de type OBJECT possède une identité (un oid) et peut donc être référencé par un lien de composition. Pour référencer un objet, on utilise la clause "REF nom-type", comme dans l'exemple ci-dessous: CREATE TYPE T-Personne AS OBJECT ( AVS NUMBER,nom VARCHAR(18), prénom VARCHAR(18), conjoint REF 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... ) / Impact sur le langage de manipulation des données Trois nouvelles clauses permettent de manipuler les oids et les valeurs des objets. REF(objet): La clause REF(variable-objet) donne en résultat l'oid de l'objet. C'est souvent utile pour les mises à jour. Par exemple, soit la table d'objets LesPersonnes: CREATE TABLE LesPersonnes OF T-Personne ; L'instruction: INSERT INTO LesPersonnes (AVS, nom, prénom, conjoint) VALUES ( 17924457911, 'Rochat', 'Philippe', ( SELECT REF(p) FROM LesPersonnes p WHERE p.nom='muller' AND p.prénom='annie' )) ; insère un objet (Philippe Rochat) et initialise son lien de référence conjoint (sur Annie Muller). VALUE(objet): La clause VALUE(variable-objet) a l'effet complémentaire; elle fournit en résultat la valeur structurée de l'objet (avec le nom de son type). DEREF(oid): Dans le cas où une requête fournit un oid, on peut passer à la valeur de l'objet par l'emploi explicite de la clause DEREF(oid). Par exemple, l'instruction : SELECT p.nom, p.conjoint FROM LesPersonnes p; donnera le nom des personnes avec l'oid de leur conjoint. Et l'instruction : SELECT p.nom, DEREF(p.conjoint) FROM LesPersonnes p; donnera 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). Un nouveau type de condition permet de tester si un attribut référence a été (ou non) initialisé : attribut-référence IS DANGLING Cette condition est vraie si et seulement si l'attribut référence n'a pas été initialisé. Exemple: SELECT p.nom FROM LesPersonnes p WHERE p.conjoint IS DANGLING;

4-METHODES Chaque type OBJECT peut avoir des méthodes CREATE TYPE nom-type AS OBJECT ( déclaration des attributs, déclaration des signatures des méthodes ) 4-1 Signature d'une méthode MEMBER FUNCTION nom-méthode ( nom-paramêtre1 [ IN / OUT ] type1,.) RETURN type MEMBER PROCEDURE nom-méthode ( nom-paramêtre1 [ IN / OUT ] type1,.) 4-2 Corps d'un type OBJECT Contient le code de ses méthodes Le code peut contenir des : - instructions PL/SQL (ou JAVA) - instructions SQL - appels de méthodes CREATE TYPE BODY nom-type AS MEMBER FUNCTION / PROCEDURE nom-méthode1 ( nom-paramêtre11 [ IN / OUT ] type11,.) BEGIN code de-la-méthode1 END MEMBER FUNCTION / PROCEDURE nom-méthode2 ( nom-paramêtre21 [ IN / OUT ] type21,.) BEGIN code de-la-méthode2 END ; 5-Hiérarchie de types OBJECT il est possible de créer des hiérarchies de types OBJECT, puis,d'utiliser ces types et leurs sous-types lors des créations de tables. Pour créer un type pour lequel on va déclarer des sous-types, il faut ajouter la clause NOT FINAL à son instruction CREATE TYPE; sinon, par défaut le type créé sera considéré par Oracle comme "final", c.à.d sans sous-type. Pour créer un sous-type d'un type non final, il faut rajouter la clause UNDER nom-sur-type. Le sous-type héritera alors des attributs et méthodes du sur-type. Attention, l'héritage multiple est interdit : un type ne peut avoir qu'un seul sur-type. Exemple : CREATE TYPE T-Personne AS OBJECT ( AVS NUMBER,nom VARCHAR(18), prénom VARCHAR(18),adresse VARCHAR(200) ) NOT FINAL ; CREATE TYPE T-Etudiant UNDER T-Personne( faculté VARCHAR(18), cycle VARCHAR(18) ) Le type T-Etudiant est un type OBJECT, qui contient 6 attributs, AVS, nom, prénom, adresse, faculté et cycle. Dans le cas d'une table d'objets de type T-Personne et dans celui d'un attribut de type T-Personne, suivant le principe de substituabilité, l'utilisateur peut y insérer des valeurs de type T-Personne ou de type T-Etudiant. Exemples : CREATE TABLE LesPersonnes OF T-Personne ; /* création d'une table d'objets */ INSERT INTO LesPersonnes VALUES (T-Person (11111111, TTT', 'SSSS', 'Rue des oiseaux, 1, MMMM ) /* création et insertion d'un objet de type T-Personne */ INSERT INTO LesPersonnes VALUES ( T-Etudiant (22222222, 'Muller', 'Annie', 'Rue du marché, 22, RRRR', 'FS', 'master') /* création et insertion d'un objet de type T-Etudiant */ CREATE TABLE LivresEmpruntés (livre VARCHAR(20), emprunteur T-Personne) ; /* création d'une table de tuples structurés (non 1NF) */ INSERT INTO LivresEmpruntés VALUES ('SQL3', T-Person (11111111, TTT', 'SSSS', 'Rue des oiseaux, 1, MMMM )/* insertion d'un tuple structuré dont l'attribut emprunteur est de type T-Personne */ INSERT INTO LivresEmpruntés VALUES ('Les Bases de Données', T-Etudiant (22222222, 'Muller', 'Annie', 'Rue du marché, 22, RRRR', 'FS', 'master')/* insertion d'un tuple structuré dont l'attribut emprunteur est de type T-Etudiant */

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 Référence d Objet : SELECT REF(oc) FROM object_customers oc WHERE oc.id = 1; REF(OC) --------------------------------------------------------------------- 0000280209D66AB93F991647649D78D08B267EE44858C7B9989D9D40689FB4DA92820 AFFE2010003280000 Cet IOD identifie la localisation de l objet dans la basede données. Table de référence : CREATE TABLE purchases (id INTEGER PRIMARY KEY, customer_ref REF t_person SCOPE IS object_customers, product_ref REF t_product SCOPE IS object_products); La clause Scope limite une référence d objet à pointer vers des objets dans une table spécifique. Overriding Methods CREATE TYPE t_person3 AS OBJECT (id INTEGER,first_name VARCHAR2(10),last_name VARCHAR2(10), MEMBER FUNCTION display_details RETURN VARCHAR2 ) NOT FINAL; CREATE TYPE BODY t_person3 AS MEMBER FUNCTION display_details RETURN VARCHAR2 IS BEGIN RETURN 'id=' id ', name=' first_name ' ' last_name; END; END; On va créer un sous type nommé named t_business_person3 under t_person3, la fonction display_details() est redéfinie : CREATE TYPE t_business_person3 UNDER t_person3 (title VARCHAR2(20),company VARCHAR2(20),OVERRIDING MEMBER FUNCTION display_details RETURN VARCHAR2); CREATE TYPE BODY t_business_person3 AS OVERRIDING MEMBER FUNCTION display_details RETURN VARCHAR2 IS BEGIN RETURN 'id=' id ', name=' first_name ' ' last_name ', title=' title ', company=' company END;END; L utilisation de OVERRIDING keyword indique que la méthode display_details() dans t_business_ person3 va surcharger la méthode display_details() dans t_person3. Type d objet Non instanciable : Un type d objet non instanciable empéche la création d objet de ce type «type abstrait» Exemple: vous pouvez créer t_vihicule comme un supet type pour les sous types t_voiture et t_bus, dans ce cas tu peux créer des objets de type t_voiture ou t_camion mais jamais pour t_véhicule CREATE TYPE t_vehicle AS OBJECT (id INTEGER,make VARCHAR2(15),model VARCHAR2(15)) NOT FINAL NOT INSTANTIABLE; CREATE TYPE t_car UNDER t_vehicle (convertible CHAR(1)); CREATE TYPE t_motorcycle UNDER t_vehicle (Type varchar2(10)); Méthode statique ou membre : Les méthodes "STATICS" diffèrent des méthodes "MEMBER" car elles sont invoquées sur la classe et non, comme les méthodes membres, sur l'objet.

CREATE TYPE t_person3 AS OBJECT (id INTEGER,first_name VARCHAR2(10),last_name VARCHAR2(10),MEMBER FUNCTION display_details RETURN VARCHAR2,Static function nbr return number; ) NOT FINAL ; / CREATE TYPE BODY t_person3 AS MEMBER FUNCTION display_details RETURN VARCHAR2 IS BEGIN RETURN 'id=' id ', name=' first_name ' ' last_name; END; Static FUNCTION nbr RETURN number IS BEGIN RETURN select count (*) from personnes; END; END; Modifier la définition d un type objet : alter type Pour la définition d un type objet, on ne peut qu ajouter de nouvelles méthodes membre, on ne peut en aucun cas modifier ou ajouter d attributs. Par exemple, bien que la table Les_Etudiants utilise le type Etudiant, il est possible d ajouter la méthode Statut grâce à la commande alter type : alter type Etudiant replace as object ( p Personne, a Adresse, member function Age (AujourDhui Date) return Natural, member function Statut (AujourDhui Date) return Varchar2, member function Nom return Varchar2 ) ; create or replace type body Etudiant as... member function Age (AujourDhui Date) return Natural is begin return p.age (AujourDhui) ; end Age ;... end ; Le passage conceptuel vers le relationnel-objet Objectifs Savoir déduire un modèle logique relationnel-objet depuis un modèle conceptuel E-A ou UML. 1. Association 1:N et 1 :1 Les associations 1:N et 1:1 sont gérées comme en relationnel. On peut néanmoins favoriser l'usage d'objets pour les clés étrangères composées de plusieurs attributs, ainsi que pour les attributs des classes d'association. Il est aussi possible de gérer la clé étrangère avec un OID à la place d'une c lé étrangère classique. Q u e s t i o n

1. Association 1:N et 1 :N Les associations 1:N et 1:N sont gérées comme en relationnel. On peut créer une table qui contient les IODs des objets participants. 1.2 Composition En RO, les compositions sont gérées avec le modèle imbriqué, à l'instar des attributs composés et multi-valués : en effet par définition l'élément composant ne peut être partagé par plusieurs composites, le modèle imbriqué n'introduit donc pas de redondance. 1. Créer un type correspondant au schéma de la table des composants 2. Créer une collection de ce type 3. Imbriquer cette collection dans la table des composites CREATE OR REPLACE TYPE typbureau AS OBJECT ( centre char(2), batiment char(1), numero number(3) ); CREATE OR REPLACE TYPE typlistetelephones AS TABLE OF number(10); CREATE OR REPLACE TYPE typspecialite AS OBJECT ( domaine varchar2(15),technologie varchar2(15) ); CREATE OR REPLACE TYPE typlistespecialites AS TABLE OF typspecialite; CREATE TABLE tintervenant ( pknom varchar2(20) PRIMARY KEY,prenom varchar2(20) NOT NULL, bureau typbureau, ltelephones typlistetelephones, lspecialites typlistespecialites)nested TABLE ltelephones STORE AS tintervenant_nt1,nested TABLE lspecialites STORE AS tintervenant_nt2; Application : Relationnel-Objet

Q u e s t i o n 1 Définir les types d'objet Produit, Client et Facture et les tables d'objet associées. Utiliser des OID plutôt que les clés étrangères, pour pointer les produits et clients depuis la table des factures. Utiliser une collection d'objets imbriquée dans Facture pour gérer les lignes de facturation (relation N:M entre Facture et Produit). Une ligne de facture contient donc une référence sur l'objet Produit demandé ainsi que la quantité demandée. Utiliser la structure NESTED TABLE d'oracle pour gérer l'imbrication des lignes de facturation dans la table facture. Réalisez l'implémentation de la méthode total() Penser à utiliser SELF pour désigner l'enregistrement courant.