14/08/2023

0. Vues

Lu 285 fois Licence Creative Commons

Vue

Une vue est un moyen simple de nommer et conserver une requête SELECT. Celle-ci peut s'avérer être un tableau de statistiques, une requête avec des multiples jointures, etc...

Créons une vue effectuant une jointure entre les tables vehicule et marque:

CREATE VIEW v_vehicules AS
SELECT m.nom
     , v.modele
FROM vehicule v
    INNER JOIN marque m ON v.marque_id = m.id
ORDER BY v.id ASC;

On peut ensuite lire depuis la vue:

SELECT * FROM v_vehicules;

Une vue n'est pas une copie de données mais bien la visualisation en temps réel des données dont elle dépend. Ainsi, si les données sont mises à jour dans une table, elles le seront dans la vue:

UPDATE vehicule
SET modele = '307'
WHERE id = 3;

Lisez de nouveau depuis v_vehicules.

Vue matérialisée

Une vue matérialisée présente une différence avec une vue classique: les données ne se mettent pas automatiquement à jour, il faut le faire manuellement.
Ce type de vue peut s'avérer utile pour certains cas d'usage:

  • une requête avec un temps d'exécution long: la complexité de la requête ralentira la génération de la vue mais ne gênera pas la lecture car le résultat sera stocké.
  • conserver une image des données à un instant précis: cela permet de garder les valeurs à l'instant donné sans empêcher la mise à jour dans les tables d'origine, par exemple pour des systèmes qui auraient besoin des valeurs chaque heure, jour, etc.

La déclaration d'une vue matérialisée est presque identique à celle d'une vue classique:

CREATE MATERIALIZED VIEW mv_vehicules AS
SELECT m.nom
     , v.modele
FROM vehicule v
         INNER JOIN marque m ON v.marque_id = m.id
ORDER BY v.id ASC;

Si on modifie les données, ça ne sera pas visible dans la vue:

UPDATE vehicule
SET modele = '206'
WHERE id = 3;

Il faut alors rafraîchir la vue:

REFRESH MATERIALIZED VIEW mv_vehicules;