This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
SGBD (DBMS)• Ensemble de logiciels systèmes permettant :
• La description des données et des relations (LDD)• L’interrogation et la mise à jour de la base (LMD)• La gestion des transactions.
• Principales fonctionnalités :• Contrôle de la redondance d’information• Partage des données et confidentialité • Gestion des accès concurrents• Vérifications des contraintes d’intégrité• Sécurité et reprise sur panne
• Indépendance des données: Niveau physique, logique et externe (vue)
2. Motivations Le modèle relationnel connaît un très grand succès et s'avère très adéquat pour les applications traditionnelles des bases de données (gestion de stock, gestion des commandes, systèmes de réservation)
Néanmoins, ce modèle est moins adapté aux nouvelles applications plus complexes telles que :
2. Motivations Ces nouvelles applications ont des caractéristiques différentes, notamment : Structures d'objets plus complexes, des transactions de durée plus longue, nouveaux types de données pour le stockage d'images ou de gros documents de texte, la possibilité de définir des opérations non standards qui sont spécifiques aux applications.
• Opérations sur les données exclues du modèle (méthodes et procédures)• Pas de possibilité de référencer directement un objet composant (pointeurs) : • La seule solution dans une BD classique est d’effectuer des
jointures.• Pas de gestion des fonctions spécifiques à certaines données (le texte, l’image, la vidéo,…etc). • Pauvreté du système de typage • Types prédéfinis (entier, réel, chaîne, …) : pas de possibilité d’extension• Sémantique insuffisante :
4. Le Relationnel Etendu Le relationnel étendu (Objet-Relationnel) : Extension du modèle
relationnel, ajoute: • Attributs multivalués : sacs, liste, tableau, ensemble, ...• Héritage sur relations et types• Définition d’un type abstrait de données propre à un
utilisateur (structure cachée + méthodes)• Identité d'objets et utilisation de référence (OID)
<corps de l’ADT> <OID option> ::= WITH OID [NOT] VISIBLE Objets sans OID par défaut <subtype clause> ::= UNDER <supertype clause> Possibilité d’héritage avec résolution de conflits explicite <member list> <attribute definition> : attributs publics ou privés <function declaration> : opérations publiques <operator name list> : opérateurs surchargés <ordering definition> : ordre (Equals, less, than, relative, hash) <cast clause> : fonction de conversion de types <procedure clause> : procédure avec corps défini dans SQL3 ou externe
• Création du type stockant chaque ligne de voitureCREATE TYPE Tvoiture AS OBJECT(modele VARCHAR (15), annee, DATE, no INTEGER) /
• Création d'une table contenant les voitures:CREATE TYPE ens_voiture AS TABLE OF Tvoiture /
• Création de la table personne qui contient une colonne de type NESTED TABLE:CREATE TABLE Personne (nom VARCHAR (15), prenom liste_prenom, age INTEGER, voitures ens_voiture) % collection NESTED TABLE voitures STORE AS Toutes_voitures;
1. Suppression d’une table Objet-relationnelleDROP TABLE <nom_table>. Ex : DROP employé ;
2. Modification de la définition d’une table Objet-relationnelleALTER TABLE ne peut s’appliquer qu’ à une table relationnelle. Modifier la définition d’une table objet-relationnelle revient à modifier le type d’objets sur lequel elle est définie (CREATE OR REPLACE TYPE).
3. Insertion d’une instance objet :INSERT INTO nom_table_objet_relationnelleVALUES( nom_type_objet(val 1 , …, val k ) )Avec: vali= valeur atomique/nouvelle instance de type d’objets
Ou bien la totalité des valeurs figurent dans la base de données, et dans ce cas on remplace VALUES par la sous-requête chargée de ramener toutes les valeurs.val i = (select donnée from table …) *INSERT INTO nom_table ( SELECT données FROM table(s) WHERE condition(s))
• Dans le cas où le type est un type utilisé par un autre type, l’utilisation du constructeur du type est obligatoire :Ex : INSERT INTO employé VALUES (1, 'Toto', 12000, adresse_type (12, 'Victor Hugo', 'Nice'));
4. Mise à jour d’une table Objet-relationnelle-UDPADTE-DELETE
4.3. Définition d’attributs référence• Chaque instance d’une table d’objets possède un identificateur d’objet qui :
• Identifie l’objet stocké dans ce n-uplet de façon unique,• C'est une colonne cachée, générée par le système,• Sert à référencer l’objet,• Oracle lui associe un index.
• Référence: Pointeur vers une instance d'une table objet
• Conserver dans les tables une référence à une valeur, plutôt qu’une clé étrangère.
• Permet de réduire les jointures.
Attention: impossible de référencer une collection !
• Utilisation de l’opérateur REF qui renvoie l’adresse d’un n-uplet dans une table.
1. Insertion avec référence :
Exemple: Insérer dans TPersonnes une nouvelle personne: Duran née le 16/02/1960 dont la liste des prénoms {Pierre, Paul, Jacques}, de voiture modèle i30.
INSERT INTO TPersonnes VALUES (‘Duran’, liste_prénom(‘Pierre’, ‘Paul’, ‘Jacques’), ’16-05-1963’, (SELECT REF(v) FROM TVoitures v WHERE v. modèle = ‘i30’));
Exemple: Changer le modèle de voiture de l’année 2010 par I30.
UPDATE Personnes pSET p.voiture = (SELECT REF(v) FROM TVoitures v WHERE v. modèle = ‘I30’)WHERE p.voiture.annee =2010;
Attention: modifier une voiture à travers une personne est impossible !
Remarque : cette instruction peut très bien la valeur NULL dans la colonne voiture car le select renvoie NULL si la voiture de modèle I30 n’existe pas !
• Pour tester l’existence d’une instance référencée :• Utilisation du prédicat IS DANGLING.
Exemple :
UPDATE Personnes SET voiture = NULLWHERE voiture IS DANGLING
• Ajouter la contrainte NOT NULL sur la colonne voiture:voiture REF voiture NOT NULL. Le type « REF Tvoiture » restreint le type référencé mais pas la table référencée.
• La clause SCOPE restreint la colonne référencée ; elle peut être ajoutée lors de la définition d’une table.
•voiture REF voiture_type SCOPE IS TVoiture.
• Cette expression indique que voiture référencera une ligne de la table TVoiture et pas une ligne d’une autre table créée à partir du type voiture_type.
• Une contrainte REFERENCES permet d’éviter les références perdues (comme avec les tables relationnelles) :
Références croisées • Les références croisées consistent à créer un type vide pour être référencé dans un second type et on modifie le premier type ensuite. On crée les tables en dernier.
Exemple :
CREATE TYPE Tvoiture /CREATE TYPE Tpersonne AS OBJECT(nom VARCHAR2(15), prenoms liste_prenom, date_naissance DATE, voiture REF Tvoiture) /CREATE TYPE Tvoiture AS OBJECT(modele VARCHAR2(15), annee DATE, No INTEGER, personne REF Tpersonne) /
CREATE TABLE voitures OF Tvoiture;CREATE TABLE personnes OF Tpersonne;
• Un triggers (ou déclencheur) est une règle, dite active, de la forme : ”événement-condition-action”.
• Procédure stockée dans la base qui est déclenchéeautomatiquement par des événements spécifiés par leprogrammeur et ne s’exécutant que lorsqu’une condition estsatisfaite.
• Les triggers permettent :
1. La possibilité d’éviter les risques d’incohérence dus à la présence de redondance.
2. L’enregistrement automatique de certains événements.
2. Test de la condition : si cette dernière n’est pas vérifiée, alors l’exécution s’arrête.
3. Si vérifiée, l’action est réalisée avant ou après un évènement.
• Un seul trigger utilisé par événement sur une table.
• La syntaxe suivante permet de créer un trigger :
CREATE TRIGGER <nom-trigger> BEFORE/AFTER <Événement> OF <Attribut> ON <Table> REFERENCING OLD/NEW AS <action> •Pour supprimer un Trigger : DROP TRIGGER <nom de trigger>
• BEFORE/AFTER: la possibilité de déclencher avant ou après l'événement.
• <événement> = INSERT, UPDATE, DELETE. Précise le ou les évènements concernés par le déclenchement. S’il y a plusieurs événements, on les sépare avec ”OR”.
• REFERENCING OLD/NEW AS : la possibilité de référencer les valeurs avant ou après mise à jour.
• <action> = opération sur table (INSERT..) avec condition possible («WHEN» «WHERE»)
Exemple 1: Définition d’un déclencheur après toute mise à jour du champ «salaire» de la table Pilote qui met à jour l’attribut «augmentation» de la table CUMUL.
CREATE TRIGGER augmenter-trigger AFTER UPDATE OF salaire ON Pilote REFERENCING OLD AS ancien_salaire, NEW AS nouveau_salaire UPDATE CUMUL SET Augmentation = Augmentation + nouveau_salaire - ancien_salaire
Exemple 2: Vérification qu’un prix ne peut pas baisser. CREATE TRIGGER pas_baisse_prix BEFORE UPDATE OF prixUnitaire ON Article FOR EACH ROW WHEN (OLD.prixUnitaire > NEW.prixUnitaire)BEGINraise_application_error(-20100, ”le prix d’un article ne peut pas diminuer”) ;
Vues Objet-Relationnelles• La création d’une vue objet-relationnelle se fait à partir d’une requête SELECT permettant d’extraire les données de la table, ou des tables.
CREATE VIEW nom_vue_or OF type_objet WITH OBJECT IDENTIFIER ( att_oid ) [UNDER nom_vue_mère ] AS SELECT att1, att2 [,CAST(MULTISET(…)][, type_nuplet (att_np1, att_np2, …)] … [ REF(alias)] [ MAKE_REF(nom_autre_vue, att_oid)] FROM nom_table alias [, nom_table2 alias2]* WHERE condition(s)
Requêtes récursives• Une requête récursive est une requête dans laquelle une requête initiale est exécutée de façon répétée pour retourner des sous-ensembles de données jusqu'à l'obtention de l'ensemble de résultats complet.
• Elle permet de simplifier le code
• SQL3 : clause WITH RECURSIVE … AS
• La récursivité est utilisée dans les applications:• Utilisant des graphes (Ex: Logistique, Réseau de transport,
de télécom,…)
• Utilisant des données semi-structurées (documents XML,..)
• La récursivité en SQL est réalisée par plusieurs structures de table:• Arbre (TREE)• Graphe ….
• Une des méthodes pour parcourir l’arbre d’une requête récursive est la définition d’un point de départ au processus de récursion qui se fait avec 2 requêtes liées.
• La première requête indique où l’on doit commencer • La seconde où l’on doit se rendre ensuite.• Ces 2 requêtes doivent être jointes par l’opérateur UNION
ALL.• La hiérarchie est représentée grâce à une auto-référence
Requêtes récursives: Arbres• Pour obtenir la hiérarchie d’une requête récursive, il faut commencer par déterminer le point de départ qui joue le rôle d’une clé étrangère.
Exemple:Nous désirons obtenir la hiérarchie du « Poste X » de la table Travail:NiveauId INTEGER PRIMARY KEY, Desc VARCHAR(50), fkNiveauParent INTEGER FOREIGN KEY
Compagnie XYZ | -- Division XYZ | |-- Département 1 | |-- Département 2| | |-- Poste X|-- Division XYW | |-- Département 6| | |-- Poste U| | |-- Poste W
Requêtes récursives: ArbresSELECT Desc, fkNiveauParent FROM Travail WHERE Desc = "Poste X" UNION ALL SELECT Desc, fkNiveauParent FROM Travail
• Le cycle de récursion est fait par la jointure entre la table OR et la table tree. WITH tree (src, dest) AS (requetes) SELECT * FROM tree
Dans l’exemple précédent:
WITH tree (desc, id) AS( SELECT Desc, fkNiveauParent FROM Travail WHERE Desc = "Poste X" UNION ALL SELECT Desc, fkNiveauParent FROM Travail w INNER JOIN tree ON tree.id = w.NiveauId ) SELECT * FROM tree
• Requêtes à préférences : requêtes qui expriment des propriétés désirées sur les résultats issus d’un processus de recherche.
• Préférence est une relation binaire entre les tuples présents dans la réponse à une requête.
• Soit une relation r de schéma R(A 1 , .., A k) tel que U i , 1≤i≤k, est le domaine de l'attribut A i , une relation est une relation de préférence sur r si elle constitue un sous-ensemble de (U1 x…xU k )x(U 1 x…xU k )
• Intuitivement, est une relation binaire entre les tuples de la même relation d'une BD.
• On dit que le n-uplet t 1 domine (ou est préférable à) le n-uplet t 2 dans le contexte de la relation si t 1 t 2
• Si ni t1 t2 et ni t2 t1 ne sont vérifiées, on dit que t1 et t2 sont incomparables : t1 ~ t2
• Une requête à préférence RP permet de:• Capturer les profils utilisateurs (personnaliser).• Formuler des politiques afin d'améliorer et automatiser la
prise de décision.• Requête flexible est une RP modélisée par la logique floue
Exemple: SELECT * FROM HotelsWHERE city = 'Nassau‘SKYLINE OF price MIN, distance MIN;
• SQL92 ne permet pas de créer de nouveaux types manque de souplesse et une interface difficile avec les applications orientées objet
• SQL3 ( ou SQL99) standard en évolution, est proposé par tous les grands constructeurs (Oracle, Sybase, IBM, etc.)
• Utilisant les concepts objet • Programmation intégrée et modulaire • Compatibilité avec le relationnel.• Possibilité de structuration en modules (PSM) procedure
• De multiples facettes :– Un langage de définition de types– Un langage de programmation– Un langage de requêtes– Un langage temporel ...
• Manipulation avancée:– Définition des types complexes avec héritage– Appels de méthodes en résultat et qualification– Imbrication des appels de méthodes– Surcharge d'opérateurs– Triggers
– déclaration de variables– assignation– conditionnels CASE, IF– boucles LOOP, FOR– exceptions SIGNAL, RESIGNAL– De stockage de procédures dans la base– possibilité d’appel des procédures et fonctions externes