Direct naar de hoofdinhoud
Module 9 · Les 4 van 436/57 in de cursus~12 min
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!

SQL
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:

SQL
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:

SQL
DROP VIEW user_spending;

Probeer het

Oefening#sql.m9.l4.e1
Pogingen: 0Laden…

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.

Editor laden…
Toon hint

Schrijf CREATE VIEW view_name AS SELECT ... FROM ... WHERE ...

Oplossing beschikbaar na 3 pogingen

Een weergave oproepen

Oefening#sql.m9.l4.e2
Pogingen: 0Laden…

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.

Editor laden…
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