Leçons du module (4/4)
Vues et abstraction des données
Tout au long de nos leçons, vous aurez remarqué que les requêtes (notamment les JOIN complexes ou les agrégations comme GROUP BY) commencent à devenir longues et pleines de règles et de calculs.
Et s'il existait un moyen de sauvegarder mentalement la requête terminée et de la masquer, en prétendant désormais qu'il s'agit, à toutes fins utiles, d'une "table" normale de la base de données ?
Bienvenue dans le monde de Views.
CRÉER UNE VUE
Une vue est essentiellement une requête SQL persistante nommée, mais elle se comporte comme une table « virtuelle » !
CREATE VIEW user_spending AS
SELECT
c.id,
c.first_name,
SUM(o.amount) as total_spent
FROM customers c
JOIN orders o ON c.id = o.customer_id
GROUP BY c.id;Fait! Désormais, au lieu de toujours devoir refaire ces JOIN et GROUP BY, il vous suffit d'écrire des requêtes parfaitement normales :
SELECT * FROM user_spending WHERE total_spent > 100;
-- Postgres dietro le quinte richiamerà automaticamente la grande formula.Vues et "données en temps réel"
Un mythe très courant est de penser que les Views prennent les données, calculent des sommes comme des prix ou des classements et produisent un triste instantané persistant, comme une photographie. Faux (presque toujours) ! Par défaut, les vues sont virtuelles : chaque fois que vous mettez le nom d'une vue dans votre SELECT, Postgres fusionne en arrière-plan votre requête en exécutant un calcul en temps réel basé sur l'état de la base de données à cette milliseconde exacte. Ainsi, vous ne lirez jamais de données périmées.
A quoi servent-ils ?
- Simplicité : les vues protègent les applications externes des modifications. Si l'équipe frontend sait qu'elle doit lire les données de la vue
top_selling, elle n'a pas à s'inquiéter si demain on modifie la base de données en ajoutant trois relations intermédiaires pour en extraire les meilleurs vendeurs ! - Sécurité et ségrégation : dans d'énormes bases de données, une vue peut présélectionner et masquer une partie des données utilisateur aux développeurs externes, leur accordant l'accès (par exemple) uniquement à une sous-vue d'analyse débarrassée des vrais noms.
Supprimer une vue
Tout comme les tables, lorsque vous n'en avez plus besoin, vous procédez à la commande DROP :
DROP VIEW user_spending;Essayez-le
Créez une vue (VIEW) appelée « high_value_products ». Il doit se comporter comme un conteneur qui sélectionne les 3 champs essentiels (`id`, `name`, `price`) de la table 'produits', MAIS uniquement et toujours pour les produits qui ont un 'prix' supérieur à 50,00.
Afficher l'indice
Écrivez CREATE VIEW nom_vue AS SELECT ... FROM ... WHERE ...
Solution disponible après 3 tentatives
Appeler une vue
Étant donné que chaque exercice sur la plateforme est exécuté dans un environnement isolé (et propre), la vue précédente n'existe plus à cette étape. Recréez la vue 'high_value_products' (toujours avec des produits ayant un prix > 50) puis, sur la ligne immédiatement suivante, exécutez un SELECT de tout son contenu classé par prix décroissant (DESC) pour vérifier qu'il fonctionne.
Afficher l'indice
N'oubliez pas le ; entre les instructions SQL (mettez-le à la fin de la première ligne) ! Cela permet à Postgres d'exécuter les 2 tâches dans l'ordre.
Solution disponible après 3 tentatives