Cours Bases de données 2ème année IUT Cours 11 : Les tables comme objets (3ème partie) Anne Vilnat http://www.limsi.fr/individu/anne/cours
Plan 1 Tables objet Rappels Exemple d insertion Sélection 2 Vues Objet Définition Création Modifications et clause INSTEAD OF Modifications et vues objet...
Rappel sur les différents types d utilisation des objets Des objets pour : Définir un nouveau type d objet utilisé pour décrire un attribut d une table. Par exemple : une adresse constituée d un nom de rue, de ville,... pour décrire une personne une personne (qui a une adresse) intervenant dans une table d employés Définir une table dont toutes les lignes sont des objets d un type défini par l utilisateur. Par exemple : une table de personnes, dont toutes les lignes sont des objets de type personne Définir un type tableau qui intervient dans la définition d un attribut. Par exemple : un tableau d acteurs à donner comme type à l attribut acteur d une table Film Définir des tables imbriquées...
Rappel : Table dans une table Définition Il est possible d inclure des attributs de type table dans la structure d une table. Comment? En ayant dans la table principale une colonne qui soit une table. Pour une ligne de la table principale, il y a un nombre quelconque de lignes dans la table imbriquée. 2 étapes : création d un type table pour la table imbriquée création de la table principale (maître) contenant la table imbriquée.
Table dans une table : syntaxe Création du type table CREATE [OR REPLACE] TYPE nomtype AS TABLE OF déclaration de type; Création de la table maître CREATE TABLE nomtable ( nomcolonne 1 type 1, nomcolonne 2 type 2,... nomcolonne n type n ) NESTED TABLE nomcolonne i STORE AS nomtablebis; nomcolonne i est une colonne de type table qui fait le lien entre la table maître et la table imbriquée; nomtablebis est le nom de la table qui contient les lignes de la table imbriquée
Table dans une table : Exemple nomtable col 1 col 2 col i col n col 1 col 2 col i col n col 1 col 2 col i col n
Table dans une table : Exemple Exemple CREATE [OR REPLACE] TYPE listeacteursty AS TABLE OF ObIndividuTy; Exemple CREATE TABLE obfilmbis ( numfilm NUMBER(5), titre VARCHAR2(50), realisateur REF obindividuty. acteurs listeacteursty) NESTED TABLE acteurs STORE AS distributiontab;
Table dans une table : Exemple obindividu obfilmbis 43 Le mari de la coiffeuse 84 La liste de Schindler 18 César 1996 LECONTE PATRICE 2871 SPIELBERG STEVEN 2987 PAGNOL MARCEL 1064 ROCHEFORT JEAN 1040 GALIENA ANNA 2812 NEESON LIAM 2045 DEMAZIS ORANE 2132 RAIMU JULES 2045 FRESNAY PIERRE
Table dans une table : Exemple d insertion Exemple INSERT INTO obfilmbis SELECT 43, LE MARI DE LA COIFFEUSE, REF(a), listeacteursty(ref(b), REF(c)) FROM obindividu a, obindividu b, obindividu c WHERE a.numindividu=1996 AND b.numindividu=1064 AND c.numindividu=1040;
Table dans une table : Exemple d insertion (suite) Exemple INSERT INTO obfilmbis SELECT 84, LA LISTE DE SCHINDLER, REF(a), listeacteursty(ref(b)) FROM obindividu a, obindividu b WHERE a.numindividu=2871 AND b.numindividu=2812 ; INSERT INTO obfilmbis SELECT 18, CESAR, REF(a), listeacteursty(ref(b), REF(c), REF(d)) FROM obindividu a, obindividu b, obindividu c, obindividu d WHERE a.numindividu=2987 AND b.numindividu=2045 AND c.numindividu=2132 AND d.numindividu=2048;
Table dans une table : Exemple d insertion Ajout d une ligne dans une table imbriquée : Syntaxe INSERT INTO THE (sous interrogation) VALUES (...) Si Jean Rochefort (1064) jouait dans la liste de Schindler (84) : Exemple INSERT INTO THE (SELECT acteurs FROM obfilmbis WHERE NumFilm=84) SELECT REF(a) FROM obindividu a WHERE a.numindividu=1064;
Insertion dans la table imbriquée : Exemple Si Jean Rochefort jouait dans la liste de Schindler... obindividu obfilmbis 43 Le mari de la coiffeuse 84 La liste de Schindler 18 César 1996 LECONTE PATRICE 2871 SPIELBERG STEVEN 2987 PAGNOL MARCEL 1064 ROCHEFORT JEAN 1040 GALIENA ANNA 2812 NEESON LIAM 2045 DEMAZIS ORANE 2132 RAIMU JULES 2045 FRESNAY PIERRE
Table dans une table : Exemple de sélection Exemple SELECT * FROM obfilmbis; 43, LE MARI DE LA COIFFEUSE,?????? ListeActeursTy(???????????????) 84, LA LISTE DE SCHINDLER,??????, ListeActeursTy(????????????????) 18, CESAR,?????? ListeActeursTy(?????????????????)
Table dans une table : mise à jour et sélection Modification d une colonne dans une table imbriquée : Syntaxe UPDATE THE (sous interrogation) SET (...) [WHERE prédicat]; Sélection sur les colonnes de la table imbriquée Sélection SELECT liste attributs FROM THE (sous interrogation) [WHERE prédicat];
Vues objet Définition Pour créer une abstraction objet au-dessus de l organisation relationnelle : vue objet. Création en 3 étapes : 1 considérer un type objet qui décrit la structure de la vue objet 2 dans la requête : quels attributs de quelles tables relationnelles inclure 3 un identificateur d objet construit avec les attributs de tables relationnelles.
Vues objet : Création Syntaxe CREATE OR REPLACE VIEW nomvue OF nomtypeobjet WITH OBJET OID ( nomcolonne [, nomcolonne,... ] ) AS requête; Rappel CREATE TYPE obindividuty AS OBJECT ( NumIndividu NUMBER(5), Nom VARCHAR2(30), Prenom VARCHAR2(30) ); CREATE TYPE obfilmbisty AS OBJECT ( NumFilm NUMBER(5), Titre VARCHAR2(50), realisateur obindividuty );
Vues objet : Création Syntaxe CREATE OR REPLACE VIEW filmvue OF obfilmbisty WITH OBJET OID (numfilm ) AS SELECT f.numfilm, f.titre, obindividuty(i.numindividu, i.nom, i.prenom) FROM ens2004.film f, ens2004.individu i WHERE f.realisateur=i.numindividu;
Vues objet : Sélection Syntaxe SELECT * FROM filmvue WHERE ROWNUM <10; 43, LE MARI DE LA COIFFEUSE, ObIndividuTy(1996, LECONTE, PATRICE ) 84, LA LISTE DE SCHINDLER, ObIndividuTy(2871, SPIELBERG, STEVEN ) 18, CESAR, ObIndividuTy(2987 PAGNOL, MARCEL )
Clause INSTEAD OF et triggers Petit retour en arrière... Vues et triggers... Le déclencheur INSTEAD OF permet d effectuer des mises à jour sur les tables qui entrent dans la construction d une vue objet ou non. Il remplace un INSERT, UPDATE ou DELETE exécuté sur la vue. Si une vue a un trigger INSTEAD OF, toutes les vues construites à partir de cette vue doivent avoir des triggers INSTEAD OF. Par défaut une clause INSTEAD OF est associée à la clause FOR EACH ROW
Clause INSTEAD OF et triggers Syntaxe CREATE OR REPLACE TRIGGER nomdeclencheur INSTEAD OF événement [OR événement] ON nomvue FOR EACH ROW bloc PL/SQL;
Clause INSTEAD OF et triggers : Modifications, exemple Exemple CREATE OR REPLACE TRIGGER trfilm INSTEAD OF INSERT ON filmvue FOR EACH ROW BEGIN INSERT INTO ens2004.film VALUES(:NEW.numfilm, :NEW.titre, :NEW.realisateur.numindividu); INSERT INTO ens2004.individu VALUES(:NEW.realisateur.numindividu, :NEW.realisateur.nomindividu, :NEW.realisateur.prenomindividu); END;
Clause INSTEAD OF et triggers : Modifications, autre exemple Exemple CREATE TABLE clientsparis ( client NUMBER(6), adresse VARCHAR2(50), credit NUMBER(9,2) ); CREATE TABLE clientslyon ( client NUMBER(6), adresse VARCHAR2(50), credit NUMBER(9,2) ); CREATE TYPE clientty AS OBJECT ( client NUMBER(6), adresse VARCHAR2(50), credit NUMBER(9,2), lieu VARCHAR2(20) );
Clause INSTEAD OF et triggers : Modifications, autre exemple Exemple CREATE VIEW touslesclients (cli) AS (SELECT clientty (client, adresse, credit, Paris ) FROM clientsparis UNION ALL SELECT clientty (client, adresse, credit, Lyon ) FROM clientslyon
Clause INSTEAD OF et triggers : Modifications, autre exemple Exemple CREATE OR REPLACE TRIGGER InsertCli INSTEAD OF INSERT ON tousleslients FOR EACH ROW BEGIN IF (:NEW.client.lieu= Paris THEN INSERT INTO clientsparis VALUES(:NEW.cli.client,:NEW.cli.adresse, NEW:cli.credit ELSE INSERT INTO clientslyon VALUES(:NEW.cli.client,:NEW.cli.adresse, NEW:cli.credit END IF; END;
Clause INSTEAD OF et triggers : conclusion partielle Vues (non objet!) et triggers... en résumé La clause INSTEAD OF permet : de se débarasser des constraintes de modifiabilité des vues (on va directement faire les modifications sur les tables) de se débarasser des contraintes de tables en mutation...
Vues objet : Modifications Revenons aux vues objet... Vues objet et référence Dans un contexte objet, où des vues sont construites sur des tables relationnelles, il faut rétablir la liaison entre les instances de ces vues par la notion de référence. La fonction MAKE REFERENCE ( ) crée une référence sur une instance d une vue objet. Syntaxe MAKE REFERENCE (nomvue, nomattribut [, nomattribut])
Vues objet : Exemple de modifications Exemple vue objet CREATE VIEW obindividubisvue AS OF obindividuty WITH OBJECT OID (numindividu) AS SELECT numindividu, nomindividu, prenomindividu FROM ens2004.individu; CREATE OR REPLACE VIEW filmvue AS SELECT numfilm, titre, MAKE REFERENCE (obindividuty, realisateur) FROM ens2004.film f; SELECT numfilm, titre, DEREF(realisateur) FROM filmvue;