Vues.

Slides:



Advertisements
Présentations similaires
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
Advertisements

LES NOMBRES PREMIERS ET COMPOSÉS
Bases de Données Avancées: Bases de Données Relationnelles
PL/SQL : Le Langage PL/SQL est une extension du SQL, qui offre
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Portée des variables VBA & Excel
Les numéros
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
SQL - Subtilités.
Algèbre relationnelle
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
INTEGRITE ET BD ACTIVES
Programme Introduction aux BD et aux SGBD Le modèle relationnel
Programme Introduction aux BD et aux SGBD Le modèle relationnel
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Les fonctions.
Année universitaire Système dinformation Le SQL (Structured Query Language) langage dinterrogation dune base de données.
LE LANGAGE SQL : LDD La création de tables L’ordre CREATE CREATE TABLE nom_de_table (Nom_colonne Type_colonne, Nom_colonne Type_colonne,
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Les contraintes d’integrité
LMD: Langage de Manipulation de Données
Développement d’applications web
Contrôles d'accès aux données
L’utilisation des bases de données
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre.
Initiation aux bases de données et à la programmation événementielle
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
L’utilisation des bases de données
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
LES NOMBRES PREMIERS ET COMPOSÉS
1 LE LANGAGE DE REQUETES SQL Origines et Evolutions SQL1 86: la base SQL1 89: l'intégrité.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
PLSQL ORACLE 8i Connecter VB à BD Oracle Les collections Question de révision Les blocs anonymes Les triggers REVISION Par : Joël Huot.
1 Développement des Applications des Bases de Données Chapitre 6.
SQL: Contraintes et Triggers
Bases de Données Avancées - TP2: SQL
Bases de Données Avancées - TP2: SQL
1 SQL Manipulations Avancées (08-09) Witold Litwin.
PL/SQL Noreddine GHERABI 1.
Michel Tollenaere SQL et relationnel ENSGI Cours MSI 2A Relationnel et SQL version 1.4 du 25 septembre 2007 (ajout jointures) 1 Modèle relationnel Historique.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
Les transactions.
Procédures Stockées Schedule: Timing Topic 60 minutes Lecture
Introduction.
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
LES PILES ET FILES.
Cours n°4M2. ESCE (S. Sidhom) Séminaire ( 6-12 Février 2007 ) Promo. M2 ESCE-Tunis 2006/07 Conception d’un système d'information sur Internet Architecture.
Chapitre 6.2 Les curseurs Cours SGBD 3A Mme hkimi Jihène
Créer des packages.
INTEGRITE ET BD ACTIVES
(Procedural Language / Structured Query Language)
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
Module 13 : Implémentation de déclencheurs. Vue d'ensemble Présentation des déclencheurs Définition de déclencheurs Exemples de déclencheurs Performances.
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Introduction  Langage propre à Oracle basé sur ADA  Offre une extension procédurale à SQL  PL/SQL permet d’utiliser un sous-ensemble du langage SQL.
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
Cours n°4M1.ist-ie (S. Sidhom) UE 203 Promo. M1 IST-IE 2006/07 Conception d’un système d'information sur Internet Architecture trois-tiers : technologies.
Définition des contraintes Vérification des contraintes Triggers
Structured Query Language 1/34. SQL Types de données Langage de Définition de Données (LDD) Langage de Manipulation de Données (LDM) Langage de Contrôle.
Les bases de données Séance 8 Jointures.
Le langage SQL.
Initiation aux bases de données et à la programmation événementielle
NIVEAU LOGIQUE Vues. Fenêtre dynamique sur la base Ses données proviennent d'autres tables ou d'autres vues.
Nicolas Ribot Introduction aux triggers Nicolas Ribot - Licence GNU FDL - Version 1.1.
Cours n°2 Implémentation et exploitation
Le Langage de Manipulation de Données LMD Module 6.
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Transcription de la présentation:

Vues

Vues Table deriveé des tables existants (table de base) Utilization Accès adapte a besoin d'application (couche externe) Stockage des requêtes Protection des donneés Utilization Recherche comme table de base MAJ largement limiteé

CREATE VIEW CREATE VIEW capitale_olympique (année, pays, capitale) AS SELECT année, JO.pays, capitale FROM JO, Pays WHERE JO.pays = Pays.nom

Utilisation des Vues SELECT DISTINCT capitale FROM capitale_olympique ; UPDATE capitale_olympique SET capitale = 'Berlin' WHERE pays = 'RDA';

MAJ des vues Les modifications sont possibles si la requête ne contient pas de Jointure Opérateur d’agrégation Attribut calculé dans le SELECT UNION, INTERSECT, DIFFERENCE, DISTINCT, GROUP BY, ORDER BY

Exemple CREATE VIEW pays_europenne AS SELECT * FROM Pays WHERE continent = 'Europe' ; UPDATE pays_europenne SET capitale = 'Berlin' WHERE nom = 'RDA'; Le changement est propagé vers la table de base!

Exemple – MAJ impossible CREATE VIEW comparaison AS SELECT P1.nom, P1.population, P2.nom, P2.population FROM Pays P1, Pays P2 WHERE P1.population > P2.population ; DELETE ? Il n'existe aucune possibilité d‘éliminer seulement ce tuple et de maintenir la consistance avec les tables de base

Vue Materialisée Normalement, seulement la définition de la vue est stockée Vue materialisée Crée une novelle table contenant les résultats de la requête utilisée dans la définition de la vue Si les tables de base changent: MAJ de la vue matérialisée CREATE MATERIALIZED VIEW capitale_olympique(année, pays, capitale) REFRESH FAST ON COMMIT AS SELECT année, JO.pays, capitale FROM JO, Pays WHERE JO.pays = Pays.nom ;

Commandes sur les vues CREATE [OR REPLACE] VIEW nom_vue [ ( nv_nom_col)*] AS requête [WITH READ ONLY] [WITH CHECK OPTION] ; OR REPLACE: remplace une vue existante WITH READ ONLY: interdit les MAJ WITH CHECK OPTION: insertions et modifications seulement si le tuple résultant est sélectionné par la vue DROP VIEW nom_vue; RENAME nom_vue TO nv_nom; ALTER VIEW nom_vue COMPILE; Recalcule une vue

Maintenir les contraintes d'intégrité

Contraintes d'intégrité Plusieurs possibilités pour les maintenir Définition des tables Assertions Triggers Vues

Rappel Contrainte sur une colonne (contrainte-col) [NOT] NULL UNIQUE PRIMARY KEY Contraintes sur une table (contrainte-table) UNIQUE (nom-col)* PRIMARY KEY (nom-col)* FOREIGN KEY (nom-col)* REFERENCES nom_table [(nom-col)*]

Identifiant externe Maintenir l’intégrité référentielle Lors de suppressions ou modifications d'un tuple dont l'identifiant est référencé par un identifiant externe Exemple de problème Pays(nom, capitale, population, surface) JO(lieu, pays, année) Suppression d'un tuple de Pays: DELETE FROM Pays WHERE nom='Grece';

Maintenir integrite referentielle Possibilités Interdire l'opération Mettre les valeurs de l'identifiant externe à NULL ou à une valeur défaut En cas du suppression: éliminer aussi le tuple avec l'identifiant externe En cas du modification: modifier également la valeur de l'identifiant externe

Exemple CREATE TABLE JO ( année DECIMAL(4,0), lieu VARCHAR(15), pays VARCHAR(20), PRIMARY KEY (année), FOREIGN KEY (pays) REFERENCES Pays (nom) ON DELETE SET NULL ON UPDATE CASCADE );

Contraintes complexes Maintenir les conditions logique sur les tuples Exemple Pays(nom, capitale, population, surface) JO(lieu, pays, année) JO.année  1896 3 jeux olympiques au maximum dans le même pays

Assertion simple Spécification de la condition pendant la définition de la table La condition est contrôlée avec chaque modification ou insertion Exemple CREATE TABLE JO ( année DECIMAL(4,0), lieu VARCHAR(15), pays VARCHAR(20), PRIMARY KEY (année), FOREIGN KEY (pays) REFERENCES Pays (nom) ON DELETE SET NULL ON UPDATE CASCADE CHECK(année  1896) );

Assertion avec requête CREATE TABLE JO ( année DECIMAL(4,0), lieu VARCHAR(15), pays VARCHAR(20), PRIMARY KEY (année), FOREIGN KEY (pays) REFERENCES Pays (nom) ON DELETE SET NULL ON UPDATE CASCADE, CHECK(année  1896) CHECK(3  ALL (SELECT COUNT(*) FROM JO GROUP BY pays) );

Assertion globale Les assertions complexes sont très coûteuses ! Condition sur plusiers tables Definition independant d'une table Exemple: deux jeux olympiques consécutifs ne se déroulent pas sur le même continent CREATE ASSERTION JO_consecutive CHECK NOT EXISTS ( SELECT * FROM JO JO1, JO JO2, Pays P1, Pays P2 WHERE JO1.pays=P1.nom AND JO2.pays=P2.nom AND JO1.année=JO2.année+4 AND P1.continent=P2.continent); Les assertions complexes sont très coûteuses !

Triggers

Trigger Concept de base de données active Exécuter une opération suite à un changement survenu dans la base de données Maintenir les contraintes d'intégrité Logging et auditing des changements Calculer des valeurs dérivées Maintenir des règles de business Maintenir des données répliquées et des vues complexes materialisées etc.

Evénement – Condition - Action Un trigger est activé par un événement Insertion, suppression ou modification sur une table Si le trigger est activé, une condition est évaluée Prédicat ou requête Une requête est vraie si le résultat n'est pas vide Si la condition est vraie l'action est exécutée Insertion, suppression ou modification de la base de données (ou programme externe)

Exemple événement CREATE TRIGGER MAJ_Pays AFTER UPDATE population ON Pays FOR EACH ROW WHEN surface > 0 BEGIN UPDATE Pays SET pop_avg = population/surface; END; condition action

Exécution d'un trigger Avant, après ou au lieu de l'événement AFTER | BEFORE | INSTEAD Invocation de l'événement une fois par table ou pour tous les tuples affectés [FOR EACH ROW] Association avec une transaction A la fin de la transaction en cours Transaction séparée

Références aux valeurs modifiées CREATE TRIGGER MAJ_Log AFTER UPDATE ON Pays FOR EACH ROW WHEN (new.surface <> old.surface) BEGIN INSERT INTO Pays_log (nom, surface) VALUES (:new.nom, 'surface_changée'); END;

Syntaxe des triggers (SQL 1999) CREATE TRIGGER [OR REPLACE] nom-du-trigger BEFORE | AFTER | INSTEAD OF INSERT | UPDATE | DELETE OF noms-d'attributs ON nom-table [FOR EACH ROW] WHEN (condition) <bloc PL/SQL ou programme Java ou C >

Attention Les triggers sont très utiles et puissants Mais: une utilisation prudente est nécessaire Attention aux Invocations de cascade de triggers Utilisations excessives des ressources Difficultés pour prévoir les conséquences

Embedded SQL

Embedded SQL - but Inclure des commandes SQL dans un programme (Java, C, Cobol, Ada, Fortran, Pascal, …) compléter SQL avec la puissance d’expressivité d’un langage de programmation Interactions avec l’utilisateur, systèmes périphériques, … Exemples calculs, requêtes récursives, conversions, …

Principe d’utilisation Ecrire dans un LP quelconque un programme normal contenant en plus des ordres SQL Le langage qui “accueille” les ordres SGBD: le langage hôte Les ordres accueillis: ordres inclus Gérer les éventuels problèmes de communication entre le programme et le SGBD Transmission des données entre le langage hôte et SQL

Ordres inclus Inclusion Exécution Syntaxe dépend du langage hôte En général: EXEC SQL <expression SQL> END-EXEC En C: EXEC SQL <expression SQL> ; En Java: #SQL { <expression SQL> }; Exécution Précompilateur SQL détecte l’expressions SQL incluse remplacée par un appel à une fonction de la bibliothèque de communication SGBD - langage hôte transmise au SGBD lors de l’exécution du programme par cette fonction

Transmission des données Echange entre le SGBD et le programme réalisé au travers d’une zone de communication Zone de communication = ensemble de variables Variables d’échange utilisateur (hôtes) données (insertions, interrogation) information du programme pour le SGBD Variables spéciales SGBD informations du SGBD pour le programme

Exemple – requête (langage hôte C) … EXEC SQL BEGIN DECLARE SECTION; char titre[15]; /* titre obtenu par un utilisateur */ real sal; /* salaire */ EXEC SQL END DECLARE SECTION; /* Code (omis) pour obtenir un titre */ EXEC SQL SELECT Salaire INTO :sal FROM Compensation WHERE Titre = :titre; /* Code (omis) pour imprimer le resultat */ Déclaration des variables communes Transmission de données

Transmission d’un ensemble de données Le résultat d'une requête est une ensemble de données Le langage hôte ne connaît pas le concept d'ensemble Incompatibilité des langages ("Language impendance mismatch") Tampon (Cursor) zone mémoire nommée du programme à laquelle une requête est associée taille dynamique réglée à l’exécution sert à contenir les n-uplets résultant de requête

Tampon Principe d’utilisation . Déclaration du tampon (DECLARE) Remplissage du tampon en une seule fois par exécution de la requête (OPEN) Récupération des n-uplets du tampon un par un (FETCH) Libération du tampon (CLOSE) . Avant 1. tuple Apres dernier tuple 1. tuple dernier tuple

Utilisation d'une tampon … EXEC SQL BEGIN DECLARE SECTION; <Déclaration des variables communes> EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE <cursor-name> [options] CURSOR FOR <query> [options]; EXEC SQL OPEN <cursor-name> ; while(condition) { EXEC SQL FETCH FROM <cursor-name> INTO <shared-variable(s)> ; if(tuple existe) traiter le tuple else break } EXEC SQL CLOSE <cursor-name> ;

Exemple … EXEC SQL DECLARE tamp1 CURSOR FOR SELECT nom, prenom FROM Etudiant WHERE cle = :cle; EXEC SQL OPEN tamp1 EXEC SQL FETCH FROM tamp1 INTO :nom, :prénom; EXEC SQL CLOSE tamp1;

Options - Declaration INSENSITIVE SCROLL ORDER BY FOR READ ONLY EXEC SQL DECLARE <cursor-name> [INSENSITIVE][SCROLL] CURSOR FOR <query> [ORDER BY <attribute(s)>][FOR READ ONLY]; INSENSITIVE le tampon est insensible aux changements dans la relation durant l’ouverture SCROLL utilisation des options FETCH ORDER BY trie l'ordre des tuples FOR READ ONLY l'accès ne change pas le contenu des tuples

Options - Accés EXEC SQL FETCH [FROM] [ NEXT | PRIOR | FIRST | LAST | RELATIVE[+|-]n | ABSOLUTE[+|-]n ] <cursor-name> [INTO <var1>,…, <varn>]

Termination des SQL statements Unité de travail (= transaction) commence avec le premier ordre SQL ou avec COMMIT/ROLLBACK COMMIT Si on veut rendre le résultat de la transaction permanent Syntaxe: EXEC SQL COMMIT; ROLLBACK Si on veut rejeter le résultat de la transaction Syntax : EXEC SQL ROLLBACK;

Gestion des exceptions : WHENEVER Gestion automatique des erreurs et warnings teste tous les évènements qui suivent En général, un WHENEVER avant le premier ordre SQL exécutable Syntaxe EXEC SQL WHENEVER <évènement> <action>;

WHENEVER Evénement Action SQLERROR, SQLWARNING NOT FOUND : si pas de n-uplet trouvé Action CONTINUE, STOP (Rollback) GOTO branch (à éviter), DO f() DO BREAK et DO CONTINUE (à utiliser pour des boucles)

Exemple – mise a jour EXEC SQL INCLUDE SQLCA; main() { #include <stdio.h> EXEC SQL INCLUDE SQLCA; main() { EXEC SQL WHENEVER SQLERROR GOTO error: EXEC SQL CONNECT TO Company; EXEC SQL BEGIN DECLARE SECTION; int pno1, pno2; /* two project numbers */ int amount; /* amount to be transferred */ EXEC SQL END DECLARE SECTION; /* Code (omitted) to read the project numbers and amount */ EXEC SQL UPDATE Project SET Budget = Budget + :amount WHERE Pno = :pno2; SET Budget = Budget - :amount WHERE Pno = :pno1; EXEC SQL COMMIT RELEASE; return(0); error: printf(“update failed, sqlcode = %ld\n”, SQLCODE); EXEC SQL ROLLBACK RELEASE; return(-1); }

SQL dynamique Si l'ordre SQL exact n'est pas connu lors du développement de l'application SQL n’autorise pas les variables tables ou colonnes Possibilité d’avoir le texte de l’ordre SQL entier contenu dans une variable Syntaxe: EXEC SQL EXECUTE IMMEDIATE <Texte_ordre_SQL>;

Exemple EXEC SQL BEGIN DECLARE SECTION; char req[] = “INSERT INTO EMP VALUES(‘E13’, ‘Jean Blanc’,...)”; EXEC SQL END DECLARE SECTION; EXEC SQL EXECUTE IMMEDIATE :req; Limitations :req ne peut pas retourner de résultat :req ne peut pas contenir de paramètres Chaque fois que :req est exécutée, elle est également compilée  overhead important

Exécution préparée Forme générale Règle EXEC SQL PREPARE stmt FROM :string Règle :string peut retourner des résultats d'une requête :string peut contenir des paramètres stmt n’est pas une variable hôte, mais un identificateur de l’ordre utilisé par le pré-processeur

Exemple EXEC SQL BEGIN DECLARE SECTION ; char tup[] = “INSERT INTO EMP VALUES(‘E13’, ‘Jean Blanc’,...)”; EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE S1 FROM :tup; EXEC SQL EXECUTE S1; ...

Paramétrisation Utiliser des caractères joker - ? – là où les chaînes de caractères peuvent apparaître "INSERT INTO Emp VALUES (?, ?, ?, ?)" pas à la place d’un nom de relation, de colonne, etc Utiliser des variables hôtes dans la clause USING pour indiquer les valeurs des paramètres EXEC SQL EXECUTE S1 USING :eno, :ename, :title, :city USING ne peut pas être employé avec EXECUTE IMMEDIATE

Exemple … EXEC SQL BEGIN DECLARE SECTION; char tup[] = “INSERT INTO Emp VALUES (?,?,?,?); char eno[3], enom[15], titre[10], ville[12]; EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE S1 FROM :tup; /* obtenir les valeurs de :eno, etc. */ EXEC SQL EXECUTE S1 USING :eno, :ename, :titre, :ville;

Tampons dynamiques Si le résultat d'une requête est une ensemble, alors utiliser des tampons dynamiques Définire des tampons dynamiques similaires à leurs contreparties statiques, mais utiliser USING pour fournir les paramètres de la rêquete EXEC SQL DECLARE <cursor-name> CURSOR FOR stmt; EXEC SQL OPEN <cursor-name> USING :var1 [,…,:varn]; EXEC SQL FETCH <cursor-name> INTO :out1 [,…,:outk]; EXEC SQL CLOSE <cursor-name> ;

Exemple … EXEC SQL BEGIN DECLARE SECTION; char resp[10]; /* input: responsable */ char pno[3]; /* output: numéro du projet */ real avg-dur; /* output: durée moyenne */ char s[] = “SELECT Pno, AVG(Dur) FROM Travaille_sur WHERE Resp = ‘?’ GROUP BY Pno, Eno HAVING COUNT(*) > 2”; EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE S1 FROM :s; EXEC SQL DECLARE durée CURSOR FOR S1; /* obtenir la valeur du :resp */ EXEC SQL OPEN durée USING :resp; EXEC SQL WHENEVER NOT FOUND DO BREAK; while(1) { EXEC SQL FETCH FROM durée INTO :pno, :avg-dur traiter le tuple; } EXEC SQL CLOSE durée