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;