La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Plan du cours - Bases de données objet : objectifs, principe, mise en oeuvre sous Oracle - Aspect système des bases de données : fichiers, index et hachage.

Présentations similaires


Présentation au sujet: "Plan du cours - Bases de données objet : objectifs, principe, mise en oeuvre sous Oracle - Aspect système des bases de données : fichiers, index et hachage."— Transcription de la présentation:

1 Plan du cours - Bases de données objet : objectifs, principe, mise en oeuvre sous Oracle - Aspect système des bases de données : fichiers, index et hachage - Organisation et administration d'un SGBD - PL/SQL

2 Rappels sur le modèle relationnel Structure conceptuelle simple et visuelle - Le schéma définit la structure de la table - les n-uplets représentent les différents éléments Les tables respectent des propriétés définies sur les dépendances fonctionnelles

3 Rappels sur le modèle relationnel Avantage du modèle relationnel - organisation structurée et cohérente des données - permanence des données - accessibilité par des utilisateurs concurrents le modèle le plus utilisé dans l'industrie

4 Rappels sur le modèle relationnel Faiblesse du modèle relationnel - Absence de pointeurs visibles ( sans jointure à calculer )‏ - non-support de domaine composés (FN1)‏ (ex : adresse), des objets multimédia Mauvais support pour CAO, BD géographique,... qui gèrent des données : - de structures complexes - multimédia

5 Rappels sur le modèle relationnel On veut donc un SGBD qui permet de traiter : - des éléments de structure complexe - des opérations sur ces éléments - des pointeurs reliant les éléments (peut permettre l'héritage Pour traiter ce genre d'information, il nous faut des SGBD objets

6 L'objet et les BD Deux manières d'utiliser l'objet avec les BD On part de langages objet dans lequels on intégre les caractéristique des SGBD --> SGBD orientés objet : O2(basé sur C++),Objet Store On part de SGBD relationnels dans lesquels on insère des objets --> SGBD Relationnels Objet : Oracle (SQL3), Informix Universal Server,...

7 L'objet et les BD Constat les SGBDOO sont les plus 'propres' et les mieux adaptés pour traiter les objets mais ils sont très peu introduits dans l'industrie Les SGBDRO sont basés sur des SGBD robustes et éprouvés qui sont très répondus dans l'industrie mais qui ne sont pas du tout prévus pour l'objet

8 SGBDRO

9 On veut un modèle qui intègre des objets complexes dans un modèle relationnel

10 Exemple de table et de n-uplet N constat Pers. Photo 111 Carla 379 Jean Nom Age Carla 41 Jean 22 Elysée,7500 0 Paris N.Sarkozy12345 AccidentsConducteursAdresseNomN°contrat 1 n-uplet de la base On a moins besoin ‘d’aplatir’ les données On a donc besoin de moins de jointure

11 Bases de données Objet 2 types sont utilisés dans les BD objet : Types de base standard (Char,Varchar,Number(p,s),date…)‏ Types utilisateurs l’utilisateur peut définir des types qui seront ensuite utilisés comme des types standard  Types Objets contiennent une structure complexe et éventuellement des opérations et des méthodes

12 Exemple de création de type utilisateur CREATE TYPE t-adresse AS OBJECT ( no NUMBER, rue VARCHAR(50), ville VARCHAR(30), codepostale CHAR(5)‏ );

13 Utilisation des types dans une table objet-relationnelle Une table objet-relationnelle est une table qui contient des éléments ayant un type-objet. Les éléments sont des objets et peuvent être identifiés par leur OID (Object Identifier)‏

14 Utilisation des types dans une table objet-relationnelle CREATE TABLE adresses OF t_adresse ; CREATE TABLE adresses OF t_adresse (ville DEFAULT 'Angers'); On peut définir des contraintes

15 Insertion dans une table objet- relationnelle L’insertion peut se faire de 2 manières : –Soit en utilisant le constructeur de type (Vision d’une table d’objets)‏ –Soit en insérant les valeurs des attributs de l’objet (Vision d’une table relaionnelle standard)‏

16 Insertion dans une table objet- relationnelle INSERT INTO adresses VALUES (t_adresse(2,'bd Lavoisier','Angers','49045')) ; INSERT INTO adresses VALUES (2,'bd Lavoisier','Angers','49045') ; Objet particulier à ajouter à la table Valeurs des attributs à ajouter à la table

17 Interrogation dans une table objet-relationnelle (1)‏ SELECT a.no, a.rue, a.ville, a.cp FROM adresses a ;  Pour accéder aux valeurs des attributs des objets norue villeCP 2Bd LavoiAngers49045 Comme pour le relationnel standard Utiliser des alias pour les noms des tables

18 Intérrogation dans une table objet-relationnelle (2)‏ SELECT Value (a) FROM adresses a ;  Pour accéder aux objets value (a) (no,rue,ville, cp)‏ t_adresse(2,'bdLavoisier','Angers','49045')‏ Pour récupérer les objets

19 Intérrogation dans une table objet-relationnelle (3)‏ SELECT REF (a) FROM adresses a ;  Pour accéder aux OID pour récuperer les OID des objets On récupère des références sous forme de suite de lettres et de chiffres

20 Utilisation d'un type objet CREATE TABLE employes (num NUMBER, dept NUMBER, salaire NUMBER, adresse t_adresse) ; dans une table relationnelle : pour définir une relation CREATE TYPE t_etudiant AS OBJECT (ine VARCHAR(10), nom VARCHAR(50), adresse t_adresse) ; dans un autre type objet : pour définir d’autres types objet

21 Insertion dans une table relationnelle dont l'un des attributs est un type utilisateur INSERT INTO emloyes VALUES (15, 'Info', 2000, t_adresse(2,'bd Lavoisier','Angers','49045') ; ici on ajoute un objet donc on utilise le constructeur de type

22 Intérrogation d'une table relationnelle comportant des objets SELECT * FROM employes ; SELECT e.adr FROM employes e; SELECT e.adr.no FROM employes e;

23 Remarques (1)‏ Ici, il s'agit d'une table relationnelle standard et pas d'une table objet-relationnelle donc les objets n'ont pas d'OID, ce qui entraine que REF (e.adr) ou value (e.adr) n'ont pas de signification.

24 Remarques (2)‏ Si on veut utiliser des objets qui sont utilisés à plusieurs endroits (dans plusieurs tables), le mieux est de les conserver dans une table objet-relationnelle à part et de faire référence à ces objets (à l'aide des OID) à partir des tables qui les utilisent ABC259 OID d'une adresse dans la table adresse qui est une table objet-relationnelle

25 Utilisation d'un type objet par l'intermédiaire des pointeurs Si on déclare un type objet, on peut créer des tables qui contiennent non pas l'objet tout entier mais une référence à cet objet (on ne conserve que l'OID)‏ Lors de l'interrogation, ça fonctionne de la même manière que si l'objet était physiquement présent dans la table mais ça permet de ne pas perdre inutilement de place de stokage et ça évite les redondances

26 Exemple de définition de types utilisant des pointeurs CREATE TYPE t_ville AS OBJECT (nom VARCHAR(30), population NUMBER); CREATE TYPE t_pays AS OBJECT (nom VARCHAR(30), capitale REF t_ville population NUMBER); CREATE TABLE pays OF t_pays ; En créant un autre type objet CREATE TABLE pays (nom VARCHAR(30), capitale REF t-ville, population Number);

27 Insertion dans les tables utilisant des pointeurs CREATE TABLE villes OF t_ville; INSERT INTO villes VALUES t-ville('Paris',2 000 000); INSERT INTO villes VALUES t-ville('Rome', 2 700 000); INSERT INTO pays(nom,population) VALUES (France, 60 000 000); Ville Pays OID1 OID2 OIDI

28 Insertion dans les tables utilisant des pointeurs Pour insérer la capitale de la France, On veut modifier le n-uplet qui correspond à la France Pays OIDI OIDII UPDATE pays SET capitale = (SELECT REF(v) FROM villes v WHERE v.nom ='Paris') WHERE nom =”FRANCE” Pour insérer l'objet qui correspond à l'italie INSERT INTO pays SELECT 'Italie', REF(v), '57 000 000' FROM villes v WHERE v.nom ='Roma')

29 Interrogation dans les tables utilisant des pointeurs Les données sont intérrogées comme si les valeurs était effectivement conservées dans la table Select * From pays; 50 000 000JYX35…Italie 60 000 000ABC129XY…France PopulationCapitaleNom Select p.nom, p.population, p.capitale.nom From pays p; 50 000 000Italie 60 000 000France PopulationNom Rome Paris Capitale.nom

30 La fonction DEREF et REF La fonction REF renvoie une référence à partir d'un objet La fonction DEREF renvoie un objet à partir de sa référence

31 Types incomplets Un objet peut référencer un objet du même type CREATE TYPE t_employe AS OBJECT (nom VARCHAR(10), prenom VARCHAR(50), superieur t_employé) ; Par contre, on ne peut pas créer un type qui utilise un type qui n‘est pas encore crée

32 Types incomplets CREATE TYPE tville AS OBJECT ; Pour créer, par exemple, un type ville qui pointe vers le type pays et un type pays qui pointe sur le type ville CREATE TYPE tpays AS OBJECT ( ---- ref tville) ; CREATE TYPE tville AS OBJECT ( ---- ref tpays) ;

33 Types incomplets Même problème avec la suppression, on ne peut pas supprimer un type utilisé par un autre type ou une table On utilise la commande DROP.... FORCE

34 Simulation de l'héritage ds les BDRO Comme les SGBDR ne sont pas initialement prévus pour gérer les objets, il faut le faire “manuellement” dans les SGBDRO

35 Collections Pour représenter une colonne multivaluée, on peut utiliser les collections : ensembles (au sens mathématiques ; pas de doublons)‏ sacs (avec des doublons)‏ listes (ordonnées et indexées par un entier)‏

36 les Collections imbriquées Il existe 2 types de collections imbriquées : les tables imbriquées dont on ne connait pas la taille a priori (NESTED TABLE)‏ les tablaux fixes (VARRAY)‏ Ces tables contiennent des élements de même type. Elles correspondent à des associations 1-N Une table imbriquées est une collection illimitée, non ordonnée d'éléments de même type Sous Oracle, on ne peut avoir qu'un niveau de table imbriquée

37 Déclaration de type et de tables utilisant des tables imbriquées (1)‏ Create type temploye AS OBJECT (noine varchar(20), nom varchar(30), age Number); Create TYPE templyes AS Table of temploye Create Table departement (numdep Number, budget Number, employes temployes); NESTED TABLE employes STORE AS tabemp; Création de tables relationnelles Précise le nom physique de la table imbriquée

38 Déclaration de type et de tables utilisant des tables imbriquées (2)‏ Tabemp conserve l'ensemble des éléments de toutes les tables imbriquées mais on ne l'interrogera jamais telle quelle puisqu'on considère qu'on a affaire à des tables différentes pour chacun des n-uplets Departements

39 Déclaration de type et de tables utilisant des tables imbriquées (3)‏ Create TYPE departement AS OBJECT (numdep Number, budget Number, employes temployes); Create TABLE departements of departement NESTED TABLE employes STORE AS tabemp; Création de tables objet-relationnelles

40 Insertion dans une table utilisant des tables imbriquées INSERT into departements Values (1, 200 000, temploye(12345,'toto',25), temploye(2222,'titi',28)); INSERT into departements Values (2, 200 000, temploye()); INSERT into departements Values (4, 100 000); Departements

41 Insertion dans une table imbriquée La commande THE INSERT INTO THE (SELECT employes FROM departements WHERE nomdep =1)‏ VALUES (789,'toto',20) Insérer dans une table imbriquée l'élément que l'on veut insérer

42 Insertion dans une table imbriquée INSERT INTO THE (SELECT employes FROM departements WHERE nomdep =2)‏ VALUES (5432,'mimi',27) ça marche : on ajoute un élément à la liste vide existante

43 Insertion dans une table imbriquée INSERT INTO THE (SELECT employes FROM departements WHERE nomdep =4)‏ VALUES (978,'nono',50) ça ne marche pas : la liste n'existe pas UPDATE departements SET emloyes = temployes() where numdep =4; puis écrire la requête d'insertion UPDATE departements SET emloyes = temployes( temploye(987,'nono',50)) where numdep =4;

44 Interrogation de la table relationnelle SELECT * FROM departements; On obtient la table relationnelle avec les tables imbriqées sous forme de constructeur de type

45 Interrogation de la table imbriquée SELECT e.nom FROM THE (SELECT employes FROM depatement WHERE numdep =1) e; On ne peut sélectionner qu'une seule table imbriquée. Il faut donc que la requête à l'interieur du THE ne corresponde qu'à un seul n-uplet, sinon il y a une erreur d'exécution

46 La commande CURSOR SELECT d.numdep, CURSOR ( SELECT e.nom FROM TABLE (employes) e) FROM depatement d; On peut utiliser le THE dans une commande de suppression (DELETE) ou de mise à jour (UPDATE° de la même façon que pour les interrogations et les insertions CURSOR...TABLE(employes) pour dire que à chaque n-uplet de département, on veut afficher les information venant de la table imbriquée employes

47 Remarque (1)‏ Attention, un seul niveau d'imbrication est permis dans les tables imbriquées. Comment faire si on veut une table de pays dont chaque pays contient un ensemble de régions et chaque région un ensemble de villes ?

48 Remarque (2)‏ Le système stocke les tables imbriquées dans des tables qui comportent un seul attribut appelé COLUMN_VALUE. Pour interroger une table imbriquée d'objets, on travaille directement sur les noms des attributs de l'objet. Pour interroger une table imbriquée de références sur les objets, il faut péciser l'attribut COLUMN_VALUE pour accéder aux champs

49 tableau fixe Un tableau fixe (VARRAY) est une collection limitée et ordonées d'éléments de même type Un tableau fixe permet plusieurs niveaux d'imbrication (contrairement aux NESTED TABLE qui nécessite l'utilisation de références)‏ On ne peux pas accéder à un élément particulier du VARRAY dans une requête SQL et il faut utiliser un bloc de programme PL/SQL (language procédural qui intégre les requête SQL)‏ (contrairement à la NESTED TABLE qui se comporte comme une table relationnelle standard en utilisant THE

50 Déclaration d'un VARRAY CREATE TYPE tvadresses AS VARRAY(2) Of tadresse; On peut utiliser le VARRAY dans une table relationnelle ou objet- relationnelle Comme c'est une collection limitée d'éléments, on doit déclarer la taille maximale du tableau fixe CREATE TYPE etudiants (noine varchar(10), nom varchar(30), adrs tvadresses);

51 Manipulation des VARRAY On peut les manipuler de 2 manières : dans une requête SQL, on peut manipuler le VARRAY complet (comme on le ferait d'un attribut simple)‏ dans un bolc PL/SQL, on peut manipuler chaque élément

52 Insertion dans un VARRAY On utilise le constructeur de type soit sans paramètres, soit avec tous les paramètres (i.e en précisant tous les éléments du VARRAY et en complétant avec NULL si besoin)‏ INSERT INTO etudiants VALUES ('12345', 'titi', tvadresses()); INSERT INTO etudiants VALUES('98789','toto', tvadresses(tadresse(2,bd Lavoisier,Angers), null));

53 Modification dans un VARRAY Pour modifier ou effacer un VARRAY dans une requête SQL, on doit travailler sur tout le VARRAY UPDATE etudiants SET adrs = tvadresses(tadresse(1,'rue rennes','Angers'),null)‏ WHERE noine='12345'; Pour modifier un seul élément du VARRAY, il faut utiliser un bloc PL/SQL

54 Modification dans un VARRAY DECLARE lesadrs tvadresses; --> partie déclaration de variable (1)‏ BEGIN SELECT adrs INTO lesadrs FROM etudiants WHERE noine ='98789' lesadrs(2) := tadresse(15,bd Foch,'Angers'); (2)‏ UPDATE etudiants SET adrs = lesadrs WHERE noine ='98789'; (3)‏ END Mots clès pour définir un bloc PL/SQL (1) initialiser la variable lesadrs (on récupère les informations avec un select)‏ (2) On peut travailler sur les éléments particuliers du VARRAY (ici, on ajoute une 2ème adresse)‏ (3) On répercute les modifications dans la base de données

55 Exemple INSERT INTO etudiants VALUES ('555555','Pop',tvadresses()); DECLARE ad tvadresses; BEGIN SELECT adrs INTO ad FROM etudiants WHERE nom='Pop'; ad(1) := tadresse(10,bd Carnot,'Angers'); UPDATE etudiants SET adrs = ad WHERE nom='Pop'; END; insertion d'un nouvel élément dans un VARRAY ça ne marche pas : le VARRAY est vide donc ad(1) n'existe pas

56 Exemple INSERT INTO etudiants VALUES ('555555','Pop',tvadresses()); DECLARE ad tvadresses; BEGIN SELECT adrs INTO ad FROM etudiants WHERE nom='Pop'; ad.extend; // on ajoute un élément au VARRAY ad ad(1) := tadresse(10,bd Carnot,'Angers'); UPDATE etudiants SET adrs = ad WHERE nom='Pop'; END; 2 solutions pour résoudre ce problème On met à jour l'attribut adrs dans une requête sql (en donnant un VARRAY contenant des élément null) puis on exécute le bloc pl/sql On utilise la fonction prédéfinie EXTEND qui ajoute un élément au VARRAY

57 Fonctions prédéfinies Il existe plusieurs opérations prédéfinies sur les tableaux fixes. Attention : on ne peut utiliser ces opérations que dans des blocs PL/SQL pas dans des requêtes standards COUNT : nombre d'élément du tableau limit : nombre max d'un varray last : indice du dernier élément du tableau extend : ajout d'un élément au tableau extend(x) : ajout de x éléments au tableau

58 Exemple DECLARE ad tvadresses; BEGIN SELECT adrs INTO ad FROM etudiants WHERE nom='lulu'; ad.extend; ad(ad.last) := tadresse(10,bd Foch,'Angers'); UPDATE etudiants SET adrs = ad WHERE nom='lulu'; END; ajouter une nouvelle adresse à un varray sans savoir combien d'adresses existent

59 Les méthodes : Rappel Un objet peut être vu comme un triplet Référence l'identifiant de l'objet l'ensemble des valeurs des attributs de l'objet La classe est la catégorie à laquelle sont associés une structure et des opérations Valeurs du n- uplet Type Informellement une opération est une action exécutable sur un objet

60 Méthodes : définition Définition : Une opération (ou méthode) est la modélisation d'une action applicable sur un objet caracterisée par un en-tête appelé Signature définissant son nom, ses paramètres d'appel et ses paramètres de retour et permettant de modifier l'état de l'objet ou de renvoyer une valeur En relationnel-objet, les types peuvent admettre des méthodes qui sont soit des fonctions soit des procédures. Pour déclarer une méthode dans un type objet, on peut : - soit la déclarer lors de la création du type - soit l'ajouter plus tard avec la commande ALTER TYPE Le corps de la méthode peut faire référence à l'objet SELF de type le type objet considéré et qui représente l'objet courant sur lequel on applique la méthode

61 Les fonctions Création d'un type utilisant une fonction CREATE TYPE tpersonne AS OBJECT (nom VARCHAR(10), datenaiss DATE, MEMBER FUNCTION age RETURN NUMBER Pour définir une fonction Type du résultat Nom de la fonction ici pas de paramètre

62 Implémentation des méthodes définies dans le type CREATE TYPE BODY tpersonne IS MEMBER FUNCTION age RETURN NUMBER IS n NUMBER; BEGIN n:= TRUNC ((SYSDAT – SELF.datenaiss)/365); REURN n; // retour du résultat calculé END age; // fin de la fonction END; // fin du corps de l'implémentation des méthodes

63 Fonctions Une fonction peut s'utiliser dans une requête SQL ou dans un bloc PL/SQL CREATE TABLE personnes OF tpersonne; INSERT INTO personnes...... SELECT p.age() FROM personne p; Pour afficher l'âge des personnes insérées dans la table

64 Protection de la BD Quand on crée des fonctions, Oracle demande de préciser l'influence de la fonction sur la BD (pour s'assurer qu'on ne modifie rien). Il faut donc rajouter dans la déclaration da la fonction une interaction en ce sens CREATE TYPE tpersonne AS OBJECT (nom VARCHAR(10), datenaiss DATE, MEMBER FUNCTION age RETURN NUMBER; PRAGMA RESTRICT-REFERENCES (age,WNDS))‏ Pour préciser l'influence de la fonction Pas de modification de la base

65 Protection de la BD La méthode ne lit pas les variables des paquetage RNDS Reads No Package State La méthode n’interroge pas la base de données RNDS Reads No Data base State La méthode ne modifie pas les variables des paquetage WNPS Writes No Package State La méthode ne modifie pas l’état de la base de données WNDS Writes No Database State InterprétationOption

66 Les procédures Les procédures sont définies de la même manière que les fonctions soit les créer lors de la définition du type soit les ajouter après la déclaration ALTER TYPE tpersonne AS OBJECT (nom VARCHAR(10), datenaiss DATE, MEMBER FUNCTION age RETURN NUMBER; PRAGMA RESTRICT-REFERENCES (age,WNDS)‏ MEMBER PROCEDURE modifnaiss (nouvdate in date)‏ Remarque : pas de PRAGMA RESTRICT-REFERENCES pour les procédures, elle peuvent modifier les BD

67 Les procédures : implémentation CREATE TYPE BODY tpersonne IS MEMBER FUNCTION age RETURN NUMBER IS n NUMBER; BEGIN n:= TRUNC ((SYSDAT – SELF.datenaiss)/365); REURN n; // retour du résultat calculé END age; // fin de la fonction MEMBER PROCEDURE modifnaiss (nouvdate in date) is BEGIN SELF.datenaiss = nouvdate; END modifnaiss; END; // fin du corps de l'implémentation des méthodes CREATE TABLE personnes of tpersonne

68 L'appel d'une procédure :exemple ex : pour changer la date de naissance de Jacques ('14-JUL-1900' declare toto t_personne; BEGIN SELECT values(p) into toto FROM personne p WHERE p.nom =J'acques'; toto.modifnaiss('29-Nov-1930'); delete FROM personnes WHERE nom ='Jacques'; INSERT INTO personnes VALUES(toto); END; Initialiser la variable toto modifier la date de naissance

69 Exemple (2)‏ Pour éviter les mises à jour dans le bloc pl/sql, c'est dans la déclaration de la procédure que l'on précise que l'on veut modifier la table en changeant la date de l'élément courant. Dans le bloc pl/sql, on appelle la procédure avec les paramètres

70 Exemple (2)‏ Alter type tpersonne REPLACE as object (....); Create OR Replace TYPE body is member procedure modifnaiss(nouvdate IN date) IS begin UPDATE personnes p set datnaiss = nouvdate Where value(p)=SELF. end modifnaiss; end; declare toto t_personne; BEGIN SELECT values(p) into toto FROM personne p WHERE p.nom =J'acques'; toto.modifnaiss('29-Nov-1930'); END; on modifie la table dans le corps de la procédure

71 La surcharge On peut définir une même méthodes avec des paramètres différents CREATE TYPE tetudiant AS OBJECT (noine NUMBER, nom VARCHAR(10), MEMBER procedure modif(nouvnumero Number), MEMBER procedure modif(nouvnumero Varchar(10)); CREATE TYPE BODY tetudiant IS MEMBER PROCEDURE modif (nouvnumero in Number) is BEGIN SELF.noine = nouvnumero; END modif; MEMBER PROCEDURE modif (nouvnom in Varchar) is BEGIN SELF.nom = nouvnom; END modif; END; On a une surcharge pour la procédure modif qui, selon les paramètres, modifie le numéro de l'étudiant ou son nom


Télécharger ppt "Plan du cours - Bases de données objet : objectifs, principe, mise en oeuvre sous Oracle - Aspect système des bases de données : fichiers, index et hachage."

Présentations similaires


Annonces Google