Views
Een view in een database is een soort venster dat je over je bestaande datastructuur kan leggen. Dit venster kun je bijvoorbeeld gebruiken in een SELECT-statement, stel dat je deze query hebt welke alle namen van de hotels toont met de naam van de manager en het totaal aantal reserveringen van dat hotel:
Code (php)
1
2
3
4
5
2
3
4
5
SELECT h.naam, m.naam AS manager, COUNT(r.*) AS aantal
FROM hotel AS h
INNER JOIN medewerker AS m ON h.manager_id=m.medewerker_id
INNER JOIN reservering AS r ON r.hotel_id=h.hotel_id
GROUP BY r.hotel_id, h.naam, m.naam
FROM hotel AS h
INNER JOIN medewerker AS m ON h.manager_id=m.medewerker_id
INNER JOIN reservering AS r ON r.hotel_id=h.hotel_id
GROUP BY r.hotel_id, h.naam, m.naam
Dat is nogal een lap tekst om uit te voeren. We zouden nu een view kunnen maken welke de uitvoer van deze query bevat:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
CREATE OR REPLACE VIEW view_aantal_reserveringen AS
SELECT h.naam, m.naam AS manager, count(r.*) AS aantal
FROM hotel h
JOIN medewerker m ON h.manager_id = m.medewerker_id
JOIN reservering r ON r.hotel_id = h.hotel_id
GROUP BY r.hotel_id, h.naam, m.naam;
SELECT h.naam, m.naam AS manager, count(r.*) AS aantal
FROM hotel h
JOIN medewerker m ON h.manager_id = m.medewerker_id
JOIN reservering r ON r.hotel_id = h.hotel_id
GROUP BY r.hotel_id, h.naam, m.naam;
Er is nu een view aangemaakt welke je kunt aanroepen. In plaats van die lange query uit te voeren kun je nu zeggen:
De view wordt bewaard op de database en hoef je dus maar 1 keer aan te maken. Een voordeel van een view is dat je de onderliggende datastructuur kunt “verbergen”. Als je applicatie zijn data uit de views haalt maakt het in feite niet uit hoe je tabellen en kolommen heten, zolang de uitvoer van je view maar consistent is met je applicatie. Daarnaast kunnen rechten worden uitgedeeld op een view, zo zou je een gebruiker geen rechten hoeven te geven op al je tabellen maar alleen op de views, security dus!
Een view is read-only, je kunt er dus geen updates of inserts op uitvoeren, dit kan in sommige situaties echter wél door middel van rules, deze behandel ik niet aangezien ik persoonlijk het nut er niet helemaal van zie :)
Zie http://www.postgresql.org/docs/8.1/interactive/rules-views.html voor meer informatie hierover.
« vorige pagina | volgende pagina »
Inhoudsopgave
- Inleiding
- Voorbeeld-case
- Overerving in PostgreSQL
- Aanmaken van tabellen en het leggen van relaties
- Views
- PL/pgSQL functies en procedures
- Triggers
- Check constraints en domains
- Conclusie