Modulelessen (4/4)
Weergaven en gegevensabstractie
Tijdens onze lessen zul je gemerkt hebben dat zoekopdrachten (vooral complexe JOINs of aggregaties zoals GROUP BY) lang beginnen te worden en vol staan met regels en berekeningen.
Wat als er een manier zou zijn om de voltooide query mentaal op te slaan en aan het zicht te onttrekken, en vanaf dat moment te doen alsof het, in alle opzichten, een normale "tabel" van de DB is?
Welkom in de wereld van Views.
CREËER UITZICHT
Een weergave is in wezen een persistente, benoemde SQL-query, maar deze gedraagt zich net als een "virtuele" tabel!
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;Klaar! Nu, in plaats van dat je JOIN en GROUP BY altijd opnieuw moet doen, hoef je alleen maar volkomen normale queries te schrijven:
SELECT * FROM user_spending WHERE total_spent > 100;
-- Postgres dietro le quinte richiamerà automaticamente la grande formula.Weergaven en "realtime gegevens"
Een veel voorkomende mythe is de gedachte dat Views de gegevens gebruikt, bedragen zoals prijzen of ranglijsten berekent en een treurig blijvende momentopname produceert, zoals een foto. Fout (bijna altijd)! Standaard zijn weergaven virtueel: elke keer dat u de naam van een weergave in uw SELECT plaatst, voegt Postgres achter de schermen uw verzoek samen door een realtime berekening uit te voeren op basis van de status van de database op die exacte milliseconde. U zult dus nooit verouderde gegevens lezen.
Waar zijn ze voor?
- Eenvoud: weergaven beschermen externe apps tegen wijzigingen. Als het frontend-team weet dat het gegevens uit de
top_selling-weergave moet lezen, hoeven ze zich geen zorgen te maken als we morgen de database aanpassen door drie tussenliggende relaties toe te voegen om de topverkopers eruit te halen! - Beveiliging en scheiding: in grote databases kan een weergave een deel van de gebruikersgegevens vooraf selecteren en verbergen voor externe ontwikkelaars, waardoor ze (bijvoorbeeld) alleen toegang krijgen tot een subweergave van analyses zonder echte namen.
Een weergave verwijderen
Net als bij tabellen, ga je verder met de opdracht DROP als je deze niet langer nodig hebt:
DROP VIEW user_spending;Probeer het
Maak een weergave (VIEW) met de naam 'high_value_products'. Het moet zich gedragen als een container die alle 3 de essentiële velden (`id`, `name`, `price`) uit de tabel 'producten' selecteert, MAAR alleen en altijd voor die producten met een 'prijs' groter dan 50,00.
Toon hint
Schrijf CREATE VIEW view_name AS SELECT ... FROM ... WHERE ...
Oplossing beschikbaar na 3 pogingen
Een weergave oproepen
Omdat elke oefening op het platform in een geïsoleerde (en schone) omgeving wordt uitgevoerd, bestaat de vorige weergave in deze stap niet meer. Maak de weergave 'high_value_products' opnieuw (nog steeds met producten met een prijs > 50) en voer vervolgens op de direct volgende regel een SELECTIE uit van alle inhoud, gerangschikt op aflopende prijs (DESC) om te verifiëren dat deze werkt.
Toon hint
Vergeet de ; tussen SQL-instructies (zet het aan het einde van de eerste regel)! Hierdoor kan Postgres de twee taken achter elkaar uitvoeren.
Oplossing beschikbaar na 3 pogingen