Page 1
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Gestion des vues
� Introduction� Définition des vues� Interrogation au travers de vues� Mise jour au travers de vues
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Définition
� Vue : vision logique des données contenues dans une ou plusieurs table .
� Considérée comme une table virtuelle:� N’a pas d’existence propre.� Aucune donnée ne lui est associée.� Sa description est stockée sous la forme d’une requête.
En général, une vue = un nom + l’ordre SQL associé, stockés dans ledictionnaire de données.
Page 2
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Exemple
Pilote numP nomP ageP codeC
1 Naciri 35 AM
2 Naciri 30 AM
3 Cristine 50 AF
Pilote numP nomP ageP codeC
1 Naciri 35 AM
2 Naciri 30 AM
Vue constituant une restriction de la table Pilote :
CREATE VIEW Pilote 25_40
AS SELECT * FROM Pilote WHERE ageP between 25 and 40 ;
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Vue: utilisation
� Vue peut être utilisée dans un ordre select en lieu et place d’une table.
� Pilote 25_40 : table virtuelle recomposée à chaque appel de la vue.
Page 3
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Vue: Avantages
� Confidentialité� Les utilisateurs n’ont le droit d’accéder qu’aux vues.
� Cacher la complexité des données aux utilisateurs� Vue simplifiée de données.� Simplifier les requêtes des utilisateurs non spécialistes.
� Mise à jour des tables transparentes aux utilisateurs
� Requête complexes � Qui ne peuvent être faites sans vues.� Qui sont fréquemment réalisées.
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Vue: Syntaxe
� CREATE [ OR REPLACE ] VIEW nom_vue [ liste_attributs ]
AS < expression_de_sélection>[ WITH CHECK OPTION [ CONSTRAINT nom_contrainte ] ][WITH READY ONLY ]
Page 4
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Vue: Syntaxe (2)
Remarques :� Noms de colonnes facultatifs, par défaut ceux de la
table,nécessaire si certaines des colonnes spécifiées dans le SELECT sont des expressions calculées.
� OR RELACE : permet de modifier la vue sans avoir à la supprimer et la recréer.
� WITH CHECK OPTION: permet de restreindre les insertions et mise à jour des données à travers la vue aux données faisant partie de la sélection de la vue, avec possibilité de nommer la contrainte.
� WITH READ ONLY: interdit toute mise à jour en utilisant le nom de la vue dans un ordre insert, update, ou delete.
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Exemple 1
Page 5
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Exemple 2
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Interrogation d’une vue
Page 6
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Mise à jour limitée à travers une vue
INSERT INTO PilotesAF VALUES ('PL-10', 'Amali', 10, 'AM');
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Mise à jour limitée à travers une vue
Ajout accepte meme si contraire au predicat de la vue
Effet de bord contraire à la vue; Correction: WITH CHECK
Page 7
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Mise à jour limitée à travers une vue
Aucun ajout ou mise a jour si elle n’est pas relisible par la vue
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Mise à jour limitée à travers une vue
Page 8
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Mise à jour à travers une vue
� Mise à jour limitée à travers une vue:� Insertion
INSERT INTO Pilote25_40 VALUE ( 4, ‘ Oufkir ‘, 20 );-> ajout accepté même si contraire au prédicat de la vue.-> Effet de bord contraire à la vue; Correction: WITH CHECK
OPTION CREATE OR REPLACE VIEW Pilote 25_40 AS SELECT * FROM Pilote WHERE ageP between 25 and 40 ;WITH CHECK OPTION
INSERT INTO Pilote25_40 VALUE ( 4, ‘ Oufkir ‘, 25 ) ->ajout
rejetée
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Mise à jour à travers une vue
� Modification
UPDATE Pilote25_40 SET ageP= ageP+12-> aucun pilote mis à jour avec validation de la contrainte de la vue� SuppressionDELETE FROM Pilote25_40 ;
Page 9
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de mise à jour: vue monotable
� Mise a jour à travers une vue dite modifiable si dans la clause :� Select DISTINCT absent ;� Les fonctions d’agrégation interdites: SUM, AVG,…� Vue définie sur une seule table de base ou sur une autre vue
modifiable.� Aucun opérateur ensembliste: UNION, INTERSECT, ..� Aucun groupement: GROUP BY ou HAVING;� Aucune sous requête dans le WHERE qui référence une table
référencée dans le 1er FROM ( autojointure ).
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de mise à jour: vue monotable
1. Select DISTINCT absent CREATE OR REPLACE VIEW Pilote 25_40 AS SELECT DISTINCT nomP, ageP FROM Pilote WHERE
ageP between 25 and 40 ;
Pilote25_40 numP nomP ageP codeC
1 Naciri 35 AM
UPDATE Pilote 25_40 SET ageP= ageP + 3 ;
-> Avec le DISTINCT, le SGBD ne sait pas à quel tuple appliquer la modification de l’âge.
Page 10
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de mise à jour:vue monotable
2. Absence de fonctions d’agrégationchercher l’age moyen pour chaque compagnie
CREATE OR REPLACE VIEW PiloteMAS SELECT codeC, AVG( ageP) moyFROM PiloteGroup by numC ;
PiloteM codeC moy
AF 50
AM 35,2
UPDATE PiloteM SET moy= moy + 1 ;
-> le tuple mis à jour n’a pas cet attribut moy
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de mise à jour:vue multitable
Définition :Une table est dite protégée par sa clé (key preserved) si sa clé primaire est préservée dans la clause de jointure et se retrouve en tant que colonne de la vue multitable ( joue le rôle de clé primaire de la vue).
Règle:� Les colonnes modifiées doivent appartenir à une table avec
préservation ( key-preserved ):� Une MAJ est limitée qu’à une seule table de base dont la clé est
préservée. Exemple:Compagnie (comp ,ville , nomComp )Pilote (nump , nom , nbHVol, compa* )
Page 11
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de mise à jour:vue multitable
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de mise à jour:vue multitable
Modification accepte ( nbhvol colonne de la table pilote (key
preserved)
Page 12
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de mise à jour:vue multitable
Modification rejetee ( ville colonne de la table compagnie NON (key
preserved)
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de mise à jour:vue multitable
4. condition de UPDATE Dans une vue si jointure ( suite )� Pour UPDATE :
� Si option « WITH CHECK OPTION » : on ne peut pas mettre à jour une colonne utilisée dans la condition de jointure et seules les lignes vérifiant la vue sont mises à jour.
Exemple:Compagnie (comp ,ville , nomComp )Pilote (nump , nom , nbHVol, compa* )
Page 13
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de mise à jour:vue multitable
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de mise à jour:vue multitable
Page 14
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de DELETE :vue multitable
Règle: Jointure ne doit avoir qu’une seule « key-preserved-table » et cette table doit apparaître une seule fois dans la vue.Exemple:
Compagnie (comp ,ville , nomComp )Pilote (nump , nom , nbHVol, compa* )
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de DELETE :vue multitable
Page 15
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de DELETE :vue multitable
Tuple supprime de la table pilote, mais pas de compagnie
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de Insert : vue multitable
Règle: Toutes les colonnes dans lesquelles sont insérées des valeurs doivent provenir d’une table dont la clé primaire est préservée. SiCHECK OPTION pas d'insertion possibleExemple:
Compagnie (comp ,ville , nomComp )Pilote (nump , nom , nbHVol, compa* )
Page 16
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de Insert : vue multitable
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de Insert : vue multitable
Page 17
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Conditions de Insert avec check option: vue multitable
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Modification d’une vue
� Mofication d’une vue ( exige le privilege ALTER VIEW ou ALTER ANY TABLE)
SYNTAXE:ALTER VIEW nomVue{ ADD Contrainte | DROP { CONSTRAINT nomContrainte | PRIMARY KEY | UNIQUE(col1
[, col2]… ) }COMPILE ;DROP VIEW nom_vue [ RESTRICT │ CASCADE]
� l’ option RESTRICT echoue si la vue est aussi utlise par une autre vue.� L’option CASCADE permet de supprimer la vue et toute autre vue ou
contrainte la referençant.
Exemple.DROP VIEW Pilote 25_40
Page 18
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Suppression d’une vue
� Suppression avec le privilege DROP ANY VIEWSYNTAXE:DROP VIEW nom_vue [ RESTRICT │ CASCADE]
� l’ option RESTRICT echoue si la vue est aussi utlise par une autre vue.� L’option CASCADE permet de supprimer la vue et toute autre vue ou
contrainte la referençant.
Exemple.DROP VIEW Piloteaf ;
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Trigger INSTEAD OF pour VIEW non modifiable
Un déclencheur INSTEAD OF permet de mettre à jour une vue multitable qui ne pouvait être
modifiée directement par INSERT, UPDATE ou DELETE. L’expression instead of est explicite :
le déclencheur programmera des actions au lieu d’insérer, de modifier ou de supprimer une vue.
Caractéristiques:
Les déclencheurs INSTEAD OF :
● font intervenir la clause FOR EACH ROW ;
● ne s’utilisent que sur des vues ;
● ne font pas intervenir les options BEFORE et AFTER.
Remarques:
• Il n’est pas possible de spécifier une liste de colonnes dans un déclencheur INSTEAD OF
UPDATE, le déclencheur s’exécutera quelle que soit la colonne modifiée.
• Il n’est pas possible d’utiliser la clause WHEN dans un déclencheur INSTEAD OF
Page 19
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Trigger INSTEAD OF pour VIEW non modifiable (non standard SQL:1999)
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
suite
Page 20
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Trigger INSTEAD OF pour VIEW non modifiable
© Base de données Avancees / M.MOURCHID, SMI, 2013-2014
Trigger INSTEAD OF pour VIEW non modifiable
Insert into Pilote values ( :new.numP, :new.nomP, null,:new.codeC)
End if ;
End;