20
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 le dictionnaire de données.

Vues Trigger Instead

Embed Size (px)

Citation preview

Page 1: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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: Vues Trigger Instead

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;