Vous êtes sur la page 1sur 13

Les Vues

Dfinition
Interrogation
Mises--jours
valuation de requtes

Cours Bases de donnes (Licence)

7-1

Pourquoi dfinir des vues


Une BD peut contenir des centaines de tables avec
des milliers dattributs :
1. Les requtes sont complexes :

difficiles formuler
source derreurs

2. Une modification du schma ncessite la


modification de beaucoup de programmes.
Solution : Adapter le schma et les donnes des
applications spcifiques vues
Cours Bases de donnes (Licence)

7-2

Dfinition dune vue


Dfinition : Une vue V(a1, a2, an) est une relation avec n
attributs qui contient le rsultat dune requte Q(a1, a2, an)
value sur une base de donnes BD :
V(a1, a2, an) :- Q(x1, x2, ,xn, BD)
Remarques :
V possde un schma relationnel avec des attributs a1,an.
V reflte ltat actuel dune base de donnes BD
V peut tre interroge et il est possible de dfinir des vues
partir dautres vues.
On distingue les relations matrialises (tables) et les
relations virtuelles (vues)
Cours Bases de donnes (Licence)

7-3

Dfinition dune vue dans SQL


CREATE VIEW nom_vue [(att1, att2...)]
AS requte_SQL [ WITH CHECK OPTION ]
nom_vue dsigne le nom de la relation
att1, ... (optionnel) permet de nommer les attributs
de la vue (attributs de la requte par dfaut)
requte_SQL dsigne une requte SQL standard
qui dfinit le contenu (instance) de la vue
Cours Bases de donnes (Licence)

7-4

Exemple
Emp (Eno, Ename, Title, City)
Pay(Title, Salary)

Project(Pno, Pname, Budget, City)


Works(Eno, Pno, Resp, Dur)

Dfinition de la vue EmpProjetsParis des employs


travaillant dans des projets Paris :
CREATE VIEW EmpProjetsParis(NumE, NomE, NumP,
NomP, Dur)
AS SELECT Emp.Eno, Ename, Works.Pno, Pname, Dur
FROM Emp, Works, Project
WHERE Emp.Eno=Works.Eno
AND Works.Pno = Project.Pno
AND Project.City = Paris
Cours Bases de donnes (Licence)

7-5

Interrogation de vues
Emp (Eno, Ename, Title, City)
Pay(Title, Salary)

Project(Pno, Pname, Budget, City)


Works(Eno, Pno, Resp, Dur)

Les noms des employs de projets Parisiens :


Requte sans vue:

Requte avec vue:

SELECT Ename
FROM Emp, Works, Project
WHERE Emp.Eno=Works.Eno
AND Works.Pno = Project.Pno
AND Project.City = Paris

SELECT NomE
FROM EmpProjetsParis

Cours Bases de donnes (Licence)

On obtient le mme
rsultat
7-6

valuation de requtes sur des vues


Vue :
CREATE VIEW EmpProjetsParis
AS SELECT Emp.Eno, Ename, Project.Pno,
Pname, Dur
FROM Emp, Works, Project
WHERE Emp.Eno=Works.Eno
AND Works.Pno = Project.Pno
AND Project.City = Paris

Requte :
SELECT Emp.Eno FROM EmpProjetsParis
WHERE Dur > 3
Cours Bases de donnes (Licence)

7-7

valuation de requtes sur des


vues
Vue :
EmpProjetsParis := Emp.Eno, (Emp

|><|

Ename, Works.Pno, Dur

Works |><|City=Paris(Project)

Requte : Ename (Dur > 3 EmpProjetsParis )


Extension

Ename (Dur > 3 (Emp.Eno, (Emp

|><|

Works

Ename, Works.Pno, Dur

|><|

City=Paris(Project)))

Simplification

Ename (Emp

|><|

Dur > 3 Works

Cours Bases de donnes (Licence)

|><|

City=Paris(Project))
7-8

Mise--jour de vues
Problme de mise--jour : une vue est une relation virtuelle et
toutes les modifications de cette relation doivent tre
transmises aux relations (tables) utilises dans sa
dfinition.
La plupart du temps il nest pas possible de mettre jour une
vue (insrer un n-uplet, ).
Exemple:

V(A,C) :- A,C ( R(A,B) |><| S(B,C))

Insertion dun n-uplet [A:1,C:3] dans la vue V

Quelle est la modification faire dans R et S?


Cours Bases de donnes (Licence)

7-9

Vues modifiables
Une vue nest pas modifiable :

quand elle ne contient pas tous les attributs dfinis


comme NON NULL dans la table interroge
quand elle contient une jointure
quand elle contient une fonction agrgat

Rgle : Une vue est modifiable quand elle est dfinie


comme une slection/projection sur une relation R
(qui peut aussi tre une vue modifiable) sans
utilisation de SELECT DISTINCT.
Cours Bases de donnes (Licence)

7-10

Mises--jour
Emp (Eno, Ename, Title, City)
Pay(Title, Salary)

Project(Pno, Pname, Budget, City)


Works(Eno, Pno, Resp, Dur)

CREATE VIEW ProjetParis


AS SELECT Pno,Pname,Budget
FROM Project
WHERE City=Paris;
UPDATE ProjetParis
SET Budget = Budget*1.2;
Cours Bases de donnes (Licence)

7-11

WITH CHECK OPTION


WITH CHECK OPTION protge contre les disparitions de
n-uplets causes par des mise--jour :
CREATE VIEW ProjetParis
WITH CHECK OPTION
AS SELECT Pno,Pname,Budget,City
FROM Project
WHERE City=Paris;
UPDATE ProjetParis
SET City = Lyon
WHERE Pno=142;
Cours Bases de donnes (Licence)

Mise--jour rejete

7-12

Vues et tables
Similitudes :
Interrogation SQL
UPDATE, INSERT et DELETE sur vues modifiables
Autorisations d'accs
Diffrences:
On ne peut pas crer des index sur les vues
On ne peut pas dfinir des contraintes (cls)
Une vue est recalcule chaque fois quon linterroge

Vue matrialise : stocker temporairement la vue pour amliorer


les performances.
Cours Bases de donnes (Licence)

7-13