Types, Objets, Tables
Transcription
Types, Objets, Tables
Présentation Le modèle théorique Les types objet dans ORACLE Types, Objets, Tables Eric Leclercq 15 décembre 2004 Les tables Les tables objet Présentation Le modèle théorique Les types objet dans ORACLE Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Les tables Les tables objet Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Point de vue théorique I Indépendance vis à vis du SGBD I Définition à partir de la notion de type abstrait de données (TAD) Definition Un type abstrait de données est une abstraction des données définie par une interface et une implémentation. L’interface spécifie les opérations offertes aux utilisateurs. L’implémentation est composée de la structure de données et des algorithmes qui précisent les opérations offertes. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Le modèle de données L’extension du modèle relationnel prend en charge les TAD qui sont définis par une structure et des opérations. L’extension met aussi en œuvre d’autres mécanismes : I identité d’objet (références) I encapsulation (méthodes) I héritage I collections Dans les SGBD OR, un TAD peut être perçu comme : I une nouvelle gamme de type définie par l’utilisateur (les types peuvent se combiner pour en former d’autres) ; Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Le modèle de données L’extension du modèle relationnel prend en charge les TAD qui sont définis par une structure et des opérations. L’extension met aussi en œuvre d’autres mécanismes : I identité d’objet (références) I encapsulation (méthodes) I héritage I collections Dans les SGBD OR, un TAD peut être perçu comme : I une nouvelle gamme de type définie par l’utilisateur (les types peuvent se combiner pour en former d’autres) ; I des structures de données réutilisables qui peuvent être utilisées dans la définition de plusieurs tables. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Tables I Le concept de table est toujours présent dans le modèle OR. I La structure d’une table OR est définie à l’aide d’un type. En conséquence les attributs (colonnes) peuvent être : I I I I atomiques (entier, chaı̂nes de caractères, dates etc.) ou référence ; multi-valués (collections) ; complexes (définis à partir de types utilisateur). I Toute combinaison est types précedents est autorisée. I L’utilisation de collection est contradictoire avec la première forme normale. I Par conséquent l’intégrité n’est plus garantie. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet 1NF ? Example un pilote peut appartenir à plusieurs compagnies la modification d’un des éléments entraine le parcours complet de la table des compagnies si les pilotes sont modélisés sous la forme de collection dans la table compagnie. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Références, modèle par valeur I L’utilisation des OID mis en oeuvre via les référence est contrinre au modèle relationnel qui est un modèle basé sur les valeurs ; I L’avantage des références est de pouvoir s’affranchir des jointures ; I Les jointures sont implicites (notation pointées) ce qui permet de naviguer dans la structure ; I En revanche les associations sont orientées et de nouveau un problème d’intégrité peut apparaı̂tre. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Illustration modèle à valeur vs modèle à références Opposition entre intégrité référentielle déclarative et intégrité référentielle prise en charge par les programmes. Example Sous la forme de tables décrire l’asssociation entre les compagnies aériennes et les avions qu’elle possèdent. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Héritage I Deux catégories de types existent : I I les types non instanciables (similaires aux classes abstraites) les types instanciables définis pour créer des objets (persistants ou non) Example Parmis les types Personnes, Employés sol et Pilotes déterminer les types instanciables des types non instanciables Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Encapsulation I Selon l’approche objet, un objet ne doit être manipulé que par des traitements autorisés ; I Ces traitements constituent les méthodes ; I Dans les LPOO 3 niveaux d’encapsulation sont généralement proposés : privé, public, protected I Oracle ne propose pas encore un telle finesse ; I L’encapsulation devra être explicitement programmée : interdire INSERT, UPDATE, DELETE et programmer des méthodes spécifiques. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Types de données I Types intégrés : I I I Collection : VARRAY, TABLE (NESTED TABLE) Références : REF Scalaires : – – – – – – I BOOLEAN CHAR, NCHAR, VARCHAR, VARCHAR2, NUMBER, DECIMAL, DATE, BFILE, BLOB, CLOB, NCLOB, LONG, LONG RAW, RAW, ROWID Types personnalisés : construit avec TYPE Chaque objet est défini à partir d’un type décrivant une structure de données et des méthodes. Ce type est positionné dans une hiérarchie d’héritage. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Utilisation des types de données Un type Oracle peut être utilisé pour : I la construction d’autres types ; I définir une ou plusieurs tables objets (OBJECT TABLE) ; I une colonne dans un table objet relationnelle ; I la construction de vues objet (OBJECT VIEWS). Les tables objet Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Objets et persistance I Il existe 3 types d’objets : I I I I COLUMN OBJECTS : stockés comme une colonne ou attribut structuré dans une table relationnelle ; ROW OBJECT : stockés en tant que ligne dans une table objet. Ils possèdent un OID. Ils peuvent être indexés et partitionnés ; les objets non persistant (par opposition aux deux prcédents) qui n’existent que durant l’exécution d’un programme PL/SQL (bloc, procédure, déclencheur) Types personnalisés : construit avec TYPE Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Création d’un type La commande CREATE TYPE déclare le TAD. Elle comporte 3 parties : 1. une partie pour la structure ; 2. une partie pour la déclaration des méthodes ; 3. le positionnement du type dans la hiérarchie d’héritage. Syntaxe : CREATE [OR REPLACE] TYPE schema.nomType {AS OBJECT | UNDER schema.nomSurType | ...} ( colonne1 type1, ... méthode1(paramètres), ... ) [[NOT] INSTANTIABLE] [[NOT] FINAL] / Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Précision des options I OR REPLACE : permet de recréer le type si il existe déjà I AS OBJECT : permet de positionner le type comme racine d’une hiérarchie d’héritage I UNDER : désigne le sur-type. La commande SQL*PLUS DESC permet de décrire un type, il faut aussi l’appliquer sur les types composants. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Restrictions I pas de type avec des attributs : BOOLEAN, ROWID, LONG, LONG RAW ; I pas de définition dynamique des types dans PL/SQL ; I en revanche il est possible de manipuler des variables typée dans les programmes PL/SQL ; I impossible d’utiliser un lien C/S (database link) pour interroger, insérer, mettre a jour une table distante contenant un type ; I les noms des types sont limités à 30 caractères. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Dictionnaire de données et types De nouvelles vues ont été définies pour prendre en compte les types. I USER COLL TYPES décrit les collections ; I USER INDEXTYPES décrit les index sur les types ; I USER TYPES décrit les types ; I USER TYPES ATTR décrit les attributs des types ; I USER TYPES METHODS décrit les méthodes des types ; I USER TYPE VERSIONS décrit les versions des types. Les vues DBA permettent d’obtenir les mêmes définitions pour toute la base. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Instanciation I I I La commande NEW permet d’instancier les objets non persistants ; Invoque un constructeur (méthode portant le même nom que le type) ; En l’absence de constructeur le constructeur par défaut admet en paramètre autant de valeur que d’attribut ; Example DECLARE nonPersistant Pilote_Type; BEGIN nonPersistant:=NEW Pilote_Type(’1AZ11’, etat_civil(’Jean’,’Dupond’,’11/10/58’), adresse_type(5,’Rue Durand’,’Dijon’), 12300); Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Suppression d’un type I La commande DROP TYPE détruit un type ; I DROP TYPE nom type [FORCE |VALIDATE] ; I FORCE permet de forcer la suppression même si des objets sont rattachés au type (ils deviennent alors inacessibles) I VALIDATE s’applique seulement aux sous-types et déclenche une vérification pour chaque type ; I Un erreur est retournée si tentative de destruction d’un type dont dépendent des sous-types ou si une table dépand du type. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Création des tables relationnelles Ce mécanisme permet d’utiliser des types dans les tables relationnelles Syntaxe : CREATE [GLOBAL TEMPORARY] TABLE [schéma.]table nomTable (colonne type [DEFAULT expr] [contrainteColonne [contrainteColonne] ... | contrainteRefColonne], ... [contrainteTable | contrainteRefTable]) [ON COMMIT {DELETE | PRESERVE} ROWS] Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Sémantique I I I GLOBAL TEMPORARY : indique le la table est temporaire, les données ne sont visible que par la session qui les a insérées type : un type scalaire ou objet (collection, références) contrainteColonne : désigne une contrainte définie en même temps que l’attribut (in line constraint) [CONSTRAINT nomContrainte] { [NOT] NULL | UNIQUE | PRIMARY KEY | REFERENCES [schéma.]{nomTable | nomVue} [(col,...)] [ON DELETE {CASCADE | SET NULL}] | CHECK (condition)} I contrainteRefColonne : permet de préciser le domaine de valeur des références { SCOPE IS [schéma.]tableObjet | WITH ROWID | [CONSTRAINT nomContrainte] REFERENCES [schéma.]{nomTable | nomVue} [(col,...)] [ON DELETE {CASCADE | SET NULL}]} Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Sémantique I contrainteTable : désigne un contrainte portant sur plusieurs éléments [CONSTRAINT nomContrainte] { UNIQUE (col,...) | PRIMARY KEY (col,...) | FOREIGN KEY (col,...) REFERENCES [schéma.]{nomTable | nomVue} [(col,...)] [ON DELETE {CASCADE | SET NULL}] | CHECK (condition)} I contrainteRefTable : permet de préciser le domaine de valeur des références { SCOPE FOR (colRed) IS [schéma.]tableObjet | REF (colRef) WITH ROWID | [CONSTRAINT nomContrainte] FOREIGN KEY (colRef) REFERENCES [schéma.]{nomTable | nomVue} [(col,...)] [ON DELETE {CASCADE | SET NULL}]} Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Sémantique I ON COMMIT : seulement pour les tables temporaires. Précise le persistence duran la transaction (DELETE ROWS) ou durant la session (PRESERVE ROWS) Exercice : Utiliser le type pilote, définir une table vol avec un pilote et un co-pilote. Insérer quelques données en utilisant les constructeurs. Lorsque le pilote n’est pas déterminer, définir une valeur par défaut. Selectionner quelques lignes de la table, utiliser deux syntaxes différentes pour exprimer votre requête. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet La notion d’OID I Une table qui n’est pas crée à partir d’un type n’est pas une table objet I Les enregistrements n’ont pas d’OID, aucune référence ne peut les cibler I SELECT REF(v) FROM Vols v ; => ORA-00904 I La directive OF dans les ordres de création des tables permet de spécifier le type de la table et de décrire les objets qui y seront stockés Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Création des tables objet relationnelles Syntaxe : CREATE [GLOBAL TEMPORARY] TABLE [schéma.]table nomTable OF [schéma.]nomType (colonne type [DEFAULT expr] [contrainteColonne [contrainteColonne] ... | contrainteRefColonne], ... [contrainteTable | contrainteRefTable]) [ON COMMIT {DELETE | PRESERVE} ROWS] [OBJECT IDENTIFIER IS {SYSTEM GENERATED | PRIMARY KEY}] [OIDINDEX [index] ({descriptionPhysique | TABLESPACE nom})] Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Spécificités I OBJECT IDENTIFIER IS : indique la méthode de génération des OID I OIDINDEX est une option disponible si le système gère automatiquement les OID, elle permet de déclarer un index sur la colonne Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Valeurs NULL I I Un objet non persistant qui est initialisé à NULL (atomically null) est différent d’un même objet ayant toutes ses valeurs (colonnes) à NULL Un objet ligne (row object ne peut pas être valué à NULL Example DECLARE p1 Pilote_t; DECLARE p2 Pilote_t; BEGIN p1:=NEW Pilote_t’AZE12’, etat_civil_t(’toto’,’01/01/96’), adresse_t(NULL, NULL, NULL), 2600); p2:=NEW Pilote_t’AZE12’, etat_civil_t(’titi’,’01/01/96’), NULL, 2600); L’accès à l’adresse de p2 déclanche une erreur. Présentation Le modèle théorique Les types objet dans ORACLE Les tables Valeurs NULL et colonnes OR Example INSERT INTO Pilote VALUES (’PAZ1’, etat_civil_t(’toto’,’01/10/56’), adresse_t(NULL, NULL, NULL), 2360); INSERT INTO Pilote VALUES (’PZE2’, etat_civil_t(’titi’,’02/04/67’), NULL, 3450); La modification de la colonne adresse du premier élément est possible, mais pas la seconde. Les tables objet Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Index sur objets Il est possible de définir un index sur un objet colonne d’une table (objet ou relationnelle). Il est également possible d’indexer des collections Example CREATE INDEX idr_r_nPil ON Vols (CDB.etat_civil.nom); CREATE INDEX idx_o_nPil ON Pilote (etat_civil.nom); Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Triggers (déclencheurs) I I Il est possible de définir plusieurs déclencheurs sur les tables objet :NEW permet d’accéder aux valeurs du nouvel objet dans le corps du trigger Example CREATE TABLE trace(command VARCHAR(200)); CREATE TRIGGER trig_pil AFTER INSERT ON Pilote FOR EACH ROW BEGIN INSERT INTO trace VALUES (:NEW.idf, :NEW.etat_civil.daten, ...) END; Présentation Le modèle théorique Les types objet dans ORACLE Les tables Les tables objet Requêtes objet I I I Toutes les fonctionnalités de SQL2 de l’instruction SELECT sont applicables aux tables objet. Il est possible d’utiliser *, DISTINCT, des expression des tris, des fonctions ensemblistes (MINUS, UNION) des regroupement (GROUP BY) Depuis la version 8 la clause FROM peut contenir un instruction SELECT Example SELECT Compa.compagnie, Compa.nbPil/Pil.total*100 "%Pilotes" FROM (SELECT compagnie, COUNT(*) nbPil FROM Pilote GROUP BY Compagnie) Compa, SELECT COUNT(*) total FROM Pilote) Pil;