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;