Les vues dans les bases de données relationnelles (SQL)

TD Bases de données Génie Informatique
Najib Tounsi



1/ Création  par

CREATE VIEW nom (renommage facultatif des colonnes) AS requête SELECT

Exemples:


CREATE VIEW rbati
AS  SELECT enum, ename
       FROM employee
       WHERE address="Rabat"

  select * from rbati;

   +------+-------+
   | enum | ename |
   +------+-------+
   | E5   | Amina |
   | E1   | Ali   |
   +------+-------+

Avec renommage des attributs:

CREATE VIEW rbati  (numero, nom)    
AS  SELECT enum, ename
       FROM employee
       WHERE address="Rabat"
 

  select * from rbati;

   +--------+-------+
   | numero | nom   |
   +--------+-------+
   | E5     | Amina |
   | E1     | Ali   |
   +--------+-------+


2/ Interrogation avec

SELECT FROM WHERE

comme pour les tables de base.

select nom
from rbati
where numero = 'E1';

+------+
| nom |
+------+
| Ali |
+------+

NB. La requête  select nom from rbati where enum = 'E1'  ne marche pas car (ERROR:Unknown column 'enum' in 'where clause') l'attribut enum ne fait pas partie de la vue rbati, il a été renommé par numero.

Pas plus que la requête select nom from employee where enum = 'E1'. Le champ nom (de la vue) ne fait pas partie de la table de base employee. (ERROR: Unknown column 'nom' in 'field list')

3/ Travail à faire

  1. Créer une vue pour les départements du 2e étage, et interroger cette vue (ou une vue pour les fournisseurs de Paris, si vous utilisez la base de données SPDB des TPs précédents)
  2. Formuler les interrogations équivalentes sur la table de base.
  3. Vérifier (si possible) sur le disque que la vue n'est pas stockée physiquement.

4/ Mise à jour des vues

Les vues ne sont pas toujours modifiables du  point de vue valeurs. Reprendre la base de données Store ou SPDB.

Tester INSERT UPDATE et DELETE sur une vue telle que:

  1. la vue est créée par simple projection et
    1. ne contient pas la clé
    2. contient la clé cette fois

  2. la vue est créée par simple restriction.
    1. Insérer dans cette vue et voir le résultat.
    2. Le tuple inséré apparaît-il dans la vue? Pourquoi?

  3. la vue est créée par jointure et
    1. contient le champ de jointure
    2. ne contient pas ce champ
Conclusions?