Oracle relationnel objet

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

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

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

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

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

Olivier Mondet

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

Création et Gestion des tables

Langage SQL : créer et interroger une base

A QUOI SERVENT LES BASES DE DONNÉES?

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

Le Langage De Description De Données(LDD)

Bases de données avancées

TP Contraintes - Triggers

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

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

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)

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

Partie 0 : Gestion des tablespace et des utilisateurs... 3

I4 : Bases de Données

SQL Historique

Corrigés détaillés des exercices

Auto-évaluation Oracle: cours de base

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

OpenPaaS Le réseau social d'entreprise

CREATION WEB DYNAMIQUE

Intégrité des données

Gestion de base de données

Devoir Data WareHouse

Quelques aspects du Relationnel-Objet du SGBD Oracle

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

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

Notes de cours : bases de données distribuées et repliquées

1. Base de données SQLite

Bases de données relationnelles

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

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

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

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

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

Les bases de données

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

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

Gestion des utilisateurs et de leurs droits

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

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

Encryptions, compression et partitionnement des données

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

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Modélisation et Gestion des bases de données avec mysql workbench

Historisation des données

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

Compétences Business Objects

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

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

Les BASES de DONNEES dans WampServer

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

Le Langage SQL version Oracle

TP3 : Creation de tables 1 seance

I. MySQL : Serveur et SGBD

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

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

BASES DE DONNEES TP POSTGRESQL

Application web de gestion de comptes en banques

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

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

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Java DataBaseConnectivity

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Programmer en JAVA. par Tama

Paginer les données côté serveur, mettre en cache côté client

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

FileMaker 13. Guide de référence SQL

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Bases de Données Avancées

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Présentation du module Base de données spatio-temporelles

Bases de Données Avancées PL/SQL

1 Position du problème

BTS/CGO P10 SYSTEME INFORMATION Année

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

[BASE DE DONNEES MULTIMEDIA]

Cours SQL. Base du langage SQL et des bases de données

Introduction à JDBC. Accès aux bases de données en Java

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

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

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Cours: Administration d'une Base de Données

Bases de données et sites WEB

16H Cours / 18H TD / 20H TP

PRÉAMBULE... 2 CRÉATION DE LA BASE DE DONNÉES...

Oracle Le langage procédural PL/SQL

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Transcription:

Oracle relationnel objet

présnetation La norme SQL 3 aussi appelée SQL 99, a introduit les extensions objet au modèle relationnel. Fonctionnalités objet dans Oracle Types définis par l utilisateur et le type object Collections Tables imbriquées OID: implémentation Les relations : ref Cluster Héritage Encapsulation 2

1- Le type object et les types définis par l utilisateur. Création d un type create or replace type TPersonne as object( id int, nom varchar2(80)) Création d une collection create or replace type TPersonnes as varray(3) of TPersonne Utilisation d un type objet CREATE TABLE cours (idcoursnumber(*,0), titre VARCHAR2(20 BYTE), enseignant TPERSONNE, Etudiants TPERSONNES ) Suppression d un type : Drop type Tpersonne Force; (force est obligatoire si des objets ont déjà été créés) 3

Les objets - Un objet est constitué par : une spécification qui détermine l interface publique du type, qui contient - une structure de données (déclaration d attributs) état - la spécification des méthodes permettant leur manipulation comportement CREATE TYPE <nom> AS OBJECT <spécification> une implémentation (corps), qui contient - l implémentation des méthodes définies par la spécification CREATE TYPE BODY AS <implémentation> Spécification Déclaration des attributs Interface publique Spécification des méthodes Corps Corps des méthodes Implémentation privée 4

Les méthodes Méthodes membres Méthodes statiques Constructeurs (un constructeur par défaut est défini pour chaque type). Méthodes statiques Déclaration static function ou static procedure (et aussi dans l implémentation, il faut utiliser le mot clé static) Le mot clé self n est pas passé en paramètre. Constructeurs Pour appeler le constructeur le mot clé new n est pas obligatoire. 5

Exemple : création du type TBoite create or replace TYPE TBoite AS OBJECT ( lo INTEGER, la INTEGER, ha INTEGER, MEMBER FUNCTION surface RETURN INTEGER, MEMBER FUNCTION volume RETURN INTEGER, MEMBER PROCEDURE afficher (); / 6

Implémentation du type TBoite create or replace TYPE BODY TBoite AS MEMBER FUNCTION volume RETURN INTEGER IS BEGIN RETURN la * ha * lo; ou bien RETURN SELF.la * SELF.ha * SELF.lo; END; MEMBER FUNCTION surface RETURN INTEGER IS BEGIN RETURN 2 * (lo * la + lo * ha + la * ha); END; MEMBER PROCEDURE afficher (SELF IN OUT NOCOPY Tboite) IS BEGIN DBMS_OUTPUT.PUT_LINE('Longueur: ' lo ' ' 'Largeur: ' la ' ' 'Hauteur: ' ha); DBMS_OUTPUT.PUT_LINE('Volume: ' volume ' ' 'Surface: ' surface); END; END; 7

Utilisation du type TBoite Création d une table de type TBoite create table boite of TBoite; Sélection INSERT INTO boite VALUES(10, 10, 10); ou bien INSERT INTO boite VALUES(TBoite(10, 10,10)); Sélection de toutes les lignes SELECT * FROM boite; Sélection du volume et de la surface des boîtes dont lo=10 SELECT s.volume(), s.surface() FROM tboite s WHERE s.lo = 10; Utilisation dans un bloc PL/SQL Ajout d une ligne dans la table boite DECLARE b TBoite; BEGIN affectation du résultat d'une instruction SQL dans une variable SELECT VALUE(s) INTO b FROM boite s WHERE s.lo = 10; b.afficher(); END; 8

Exemple 2: le type TPersonne Spécification du type TPersonne create type TPersonne as Object( idn number, prenom varchar2(20), nom varchar2(20), email varchar2(20), tel varchar2(20), member function getid return number, member procedure afficherdetails); Implémentation du type TPersonne create type body TPersonne as map member function getid return number is begin return idn; end; member procedure afficherdetails is Begin dbms_output.put_line (to_char(idn) ' ' prenom ' ' nom); dbms_output.put_line(email ' ' tel); end; end; 9

Création d une table contacts contenant un champ de type TPersonne create table contacts ( contact TPersonne, contact_date Date); Sélection des id de tous les enregistrement de la table contacts Select c.contact.getid() from contacts c; Ajout d une ligne dans la table contacts insert into contacts values (TPersonne(25,'nom','prenom','em@emails.com','455555'),'23/1 0/2012'); 10

Remarque: Une table de type objet peut être considérée comme une table constituée de lignes et de colonnes ou une table contenant une seule colonne où chaque ligne contient un objet. Chaque objet doit être identifié par un OID unique qui est généré automatiquement par le système (par défaut), ou bien nous pouvons considérer que l OID est la clé primaire de la table Create table nom_table ( ) object identifier is primary key (par défaut object identifier is system generated). Taille de l OID système: 16 octets. 11

Tables imbriquées create or replace TYPE T_Personne AS TABLE OF TPersonne; CREATE TABLE Cours ( idcours number, titre VARCHAR2(20), enseignants T_Personne) NESTED TABLE enseignants STORE AS Enseignant; 12

Le mot clé ref create table Enseignants of TPersonne create table Cours ( idcours int, titre varchar2(20), enseignant ref TPersonne scope is enseignants) Le mot clé «ref» permet de définir une référence dans un objet vers un autre objet, le mot clé «ref» peut remplacer le mot clé «join». L instruction «scope is» permet de spécifier la table référencée par l objet (dans ce cas la colonne stockera uniquement l OID de l objet référencé), si le paramètre «scope» est omis et que plusieurs tables sont de type TPersonne, alors le moteur de la base de données parcourera un ensemble de références d objets afin de localiser l enregistrement. 13

Relations avec ref select c.titre from cours c where c.enseignant.nom='daudet' 14

cluster create cluster HD_Cluster ( id varchar2(2); ) 15

Héritage : under (à partir de 9i) create or replace type TPersonne1 as object ( idpersonne int, nom varchar2(20)) not final create type TEtudiant under TPersonne1 ( cours varchar2(20), annee varchar2(4)) create table Personne of TPersonne1 ( idpersonne not null, primary key (idpersonne)) 16

Encapsulation Deux types d encapsulation Procédures ou fonctions stockées Procédures ou fonctions membres 17

Procédures stockées CREATE USER user3 IDENTIFIED BY 111; GRANT EXECUTE ON supprimercours TO user3; CREATE OR REPLACE PROCEDURE supprimercours( idc cours.idcours%type) AS BEGIN DELETE FROM cours WHERE idcours=idc; END supprimercours; EXECUTE supprimercours (1); 18

Fonction CREATE OR REPLACE FUNCTION nomenseignant( id INT) RETURN VARCHAR2 IS n VARCHAR2(20); BEGIN SELECT nom INTO n FROM enseignant WHERE ippersonne=id; RETURN n; END nomenseignant; 19

Procédures ou fonctions membres CREATE OR REPLACE type TEtudiant1 AS Object ( id INT, cours VARCHAR2(20), member PROCEDURE supprimeretudiant) CREATE OR REPLACE type Body TEtudiant1 AS member PROCEDURE supprimeretudiant IS BEGIN DELETE FROM etudiant2 WHERE etudiant2.id = self.id; END supprimeretudiant; END; CREATE TABLE Etudiant2 OF TEtudiant1 ( id NOT NULL, PRIMARY KEY (id) ) 20

CREATE TYPE Personne2 (idpersonne VARCHAR(10), prenom VARCHAR(20), nom VARCHAR(20), adresse ADDRESS, datenaissance DATE, PRIVATE FUNCTION gettelephone, PUBLIC PROCEDURE getinfos); CREATE TYPE Staff UNDER Personne2 (PUBLIC StaffStartDate DATE, PROTECTED StaffPhone CHAR(10), PRIVATE StaffPayRate DECIMAL(5,2), PRIVATE StaffCommRate DECIMAL(5,2), PUBLIC FUNCTION RetrieveTotalPayment) 21

Méthodes membres Méthodes membres Méthodes statiques Les constructeurs. 22

2- L Objet-relationnel dans Oracle 23

1- Les relations 1-1 L héritage 1-1-1 type: union (overlapping, complete) Chaque instance du type parent est au moins du type de l un des sous types. Les types CREATE OR REPLACE type TPersonne AS Object( id INT, nom VARCHAR2(20), adresse VARCHAR2(20) ) NOT final; CREATE type TEtudiant under TPersonne ( cours VARCHAR2(20), annee VARCHAR2(4)); CREATE type TEnseignant under TPersonne ( departement VARCHAR2(20), classe VARCHAR(4)); 24

Les tables CREATE TABLE Personne OF TPersonne ( id NOT NULL, PRIMARY KEY (id) ); CREATE TABLE Enseignat OF TEnseignant ( id NOT NULL, PRIMARY KEY (id) );/ CREATE TABLE Etudiant OF TEtudiant ( id NOT NULL, PRIMARY KEY (id) ); / 25

1-1-2 exclusion (disjoint, incomplete) CREATE OR REPLACE type TEmploye under TPersonne ( emptype VARCHAR2(8) ) NOT final; / create type TOuvrier under TEmploye ( salaire_journalier number) / Par défaut un type est final, pour les méthodes la valeur par défaut est not final. Alter type nomtype Final (uniquement si il n exite pas déjà des sous types) ou Alter type nomtype Not Final CREATE type TManager under TEmploye ( salaire_annuel NUMBER) / CREATE TABLE Employe OF TEmploye (id NOT NULL, emptype CHECK (emptype IN ('manager', 'ouvrier','null')), PRIMARY KEY (id) ); 26

1-1-3 partition (disjoint, complete) Similaire au cas précédent, l unique différence est que emp_type doit être not null. emtype not null, emptype check (emptype in ( Manager, Ouvrier )). Surcharge (Overload) et Redéfinition (override) des méthodes Pour redéfinir une méthode Utiliser le mot clé «OVERRIDING» devant «member» dans la déclaration et dans la définition de la méthode. Dans une méthode d un type dérivé, l appel d une méthode du type parent se fait de la manière suivante: (self as Type_Parent).nom_methode Types et méthodes abstraites Type: create type ) NOT INSTANTIABLE not final Méthode: NOT INSTANTIABLE MEMBER FUNCTION 27

1-2 Les associations Une association peut être implémentée de deux manières différentes: Clés primaires et clés étrangères Références vers des objets: l attribut qui connecte les deux tables contient une référence vers l emplacement où est stockée la table connectée. 1-2-1 n-n 1 re méthode: CREATE TABLE cours1 ( idcours INT, titre VARCHAR2(10), PRIMARY KEY (idcours) ); / CREATE TABLE etudiant1 ( idetu INT, nom VARCHAR2(20), PRIMARY KEY (idetu) ); / CREATE TABLE cours_etu ( courid INT NOT NULL, etuid INT NOT NULL, PRIMARY KEY (courid,etuid), FOREIGN KEY (courid) REFERENCES cours1 (idcours) ON DELETE CASCADE, FOREIGN KEY (etuid) REFERENCES etudiant1 (idetu) ON DELETE CASCADE );/ 28

2 e méthode: CREATE TABLE Etudiant OF TEtudiant ( id NOT NULL, PRIMARY KEY (id) ); / CREATE TABLE Cours OF TCours ( idcours NOT NULL, PRIMARY KEY (idcours) ); / CREATE TABLE cours_etudiants ( idcours ref TCours, idetudiant ref TEtudiant ); / 29

1-2-2 1-n 1 re méthode: CREATE TABLE Formateur ( idfo INT, nom VARCHAR2(20), PRIMARY KEY (idfo) ); / 2 e méthode: CREATE type TCours2 AS Object ( idcours INT, titre VARCHAR2(20), formateur ref TEnseignant );/ CREATE TABLE cours (idcours INT, titre VARCHAR2(10), PRIMARY KEY (idcours), idfo INT, FOREIGN KEY (idfo) REFERENCES Formateur(idFo) ON DELETE CASCADE ); / CREATE TABLE cours2 OF TCours2 ( idcours INT NOT NULL, PRIMARY KEY (idcours) ); / CREATE TABLE Formateur2 OF TEnseignant ( id NOT NULL, PRIMARY KEY (id) );/ 30

1-2-3 1-1 1 re méthode: Contrainte de participation: la participation de formateur dans l association est totale, la participation de bureau est partielle: la clé primaire de la table avec une participation partielle devient une clé étrangère de la table avec une participation totale CREATE TABLE formateur3 (idfo INT NOT NULL, nom VARCHAR2(20), PRIMARY KEY (idfo), idbureau INT, FOREIGN KEY (idbureau) REFERENCES Bureau(idbureau) ); / CREATE TABLE bureau idbureau INT NOT NULL, Batiment VARCHAR2(10), PRIMARY KEY (idbureau) ); / 31

2 e méthode: CREATE TYPE TBureau AS OBJECT ( idbureau INT, batiment VARCHAR2(20) ) / CREATE TABLE Bureau OF TBureau ( idbureau NOT NULL, PRIMARY KEY (idbureau) ); / CREATE TYPE TPersonne2 AS OBJECT (id INT, nom VARCHAR2(30), bureau REF TBureau ) / CREATE TABLE Formateur5 OF TPersonne2 ( id NOT NULL, PRIMARY KEY (id) ); / 32

1-3 l agrégation 4 types d agrégation Une relation d agrégation peut être partagée ou non. Dépendante ou non dépendante: l existence d un composant peut dépendre de l existence de son composite (la suppression de l agrégat entraine la suppression de tous les objets agrégés) ou non. Une agrégation peut être homogène ou bien hétérogène Deux techniques d implémentation Clustering: Un cluster est un objet de schéma qui contient des données provenant d'une ou de plusieurs tables qui ont une ou plusieurs colonnes en commun. La base de données Oracle stocke ensemble toutes les lignes tables qui partagent la même clé de cluster. Imbrication 33

Exemple une agrégation dépendante et partagée. CREATE cluster HDCluster (ihd INT) CREATE TABLE hd_contr ( ihd INT NOT NULL, ihdc INT NOT NULL, description VARCHAR2(20), PRIMARY KEY (ihd,ihdc), FOREIGN KEY (ihd) REFERENCES HD(ID_HD) ) cluster HDCluster ( ihd ); CREATE INDEX cluster_hd_index ON cluster HDCluster ; CREATE TABLE HD ( id_hd INT NOT NULL, capacite VARCHAR2(10), PRIMARY KEY (id_hd) ) cluster HDCluster ( id_hd ); 34

Agrégation dépendante et non partagée CREATE TABLE HD_Contr (hd_id VARCHAR2(10) NOT NULL, hd_contr_id VARCHAR2(10) NOT NULL, description VARCHAR2(25), PRIMARY KEY (hd_contr_id), FOREIGN KEY (hd_id) REFERENCES Hard_Disk (hd_id)) CLUSTER HD_Cluster(hd_id); CREATE TABLE Hard_Disk (hd_id VARCHAR2(10) NOT NULL, capacity VARCHAR2(20), PRIMARY KEY (hd_id)) CLUSTER HD_Cluster(hd_id); 35

Agrégation dépendante non partagée: utilisation des tables imbriquées CREATE type THDControleur AS Object ( idhdc INT, desccription VARCHAR2(10)); CREATE type HDControleur AS TABLE OF THDControleur CREATE TABLE Disque ( hd_id VARCHAR2(10) NOT NULL, capacit2 VARCHAR2(20), controleur HDControleur, PRIMARY KEY (hd_id) ) NESTED TABLE controleur STORE AS HD_Contr_tab; 36

Utilisation d une table imbriquée INSERT INTO disque VALUES ( '1', '500 Go', HDControleur( THDControleur(11,'Un'), THDControleur(22,'Deux')) ); SELECT g.* FROM disque d, TABLE(d.controleur) g; 37

Exemple 38

Choix entre varray et table imbriquée Différence entre varray et table imbriquée : 1. varray est une collection ordonnée 2. La taille d une collection varray est limitée, varray utilise le support de stockage d une manière plus optimisée qu une table imbriquée. 3. Nous pouvons interroger une table imbriquée, mais pas une collection varray. 4. Les lignes d une table peuvent être indexées, mais une collection varray. Si aucun des deux premiers points n est important alors Si vous avez besoin d interroger les éléments de la collection table imbriquée. Sinon varray (la collection sera récupérée comme un ensemble.) 39

Le package UTL_REF Le package utl_ref contient les procédures pour supporter les opérations basées sur les références. Select_Object retourne l objet référencé Utl_ref.Select_Object(refO, o): affecte l objet référencé par refo dans o. Delete_Object Update_Object Lock_Object 40

Utilisation des types ref Création: create or replace type TPilote under TPersonne ( nombre_vols int, bureaup ref TBureau -- association de type 1-1 ); create or replace type TPersonne as object ( id int, nom varchar2(20)) not final; create table Pilote of TPilote ( id not null, primary key (id), bureaup not null, foreign key (bureaup) references Bureau ) ; 41

Insertion declare bur ref TBureau; begin select ref(b) into bur from bureau b where b.idbureau=1; insert into pilote2 values (1,'p1',0,bur); end; Modification declare bur ref TBureau; begin select ref(b) into bur from bureau b where b.idbureau=1; update pilote2 p set p.bureaup=bur where p.id=2; end; 42

Sélection select p.id,p.nom,p.nombre_vols,deref(p.bureaup).idbureau, deref(p.bur eaup).batiment from pilote2 p; 43

Clusters et tables imbriquées 44

Agrégation dépendante Tables imbriquées (supporte seulement les agrégations partagées) 45