YapfHoofdpagina | Info | Hulp | FAQ (veelgestelde vragen) | Speciale pagina's | Aanmelden


Printervriendelijke versie | Voorbehoud | Privacybeleid

Views

Uit Yapf


Inhoud

Wat is een view?

Een view is een voorgeprogrammeeerde query die kan worden aangesproken onder een alias.

Stel dat je deze tabel hebt:

	
CREATE TABLE spelers (
  id SERIAL,
  naam VARCHAR,
  geblokkeerd BOOLEAN,
  CONSTRAINT spelers_pkey PRIMARY KEY(id)
) WITH OIDS;

INSERT INTO "public"."spelers" ("id", "naam", "geblokkeerd")
VALUES (1, NULL, False);

INSERT INTO "public"."spelers" ("id", "naam", "geblokkeerd")
VALUES (2, NULL, True);

INSERT INTO "public"."spelers" ("id", "naam", "geblokkeerd")
VALUES (4, NULL, True);

INSERT INTO "public"."spelers" ("id", "naam", "geblokkeerd")
VALUES (5, NULL, False);

Dan zou je daar alle nietgeblokkeerde spelers uit op kunnen halen met:

SELECT
    *
FROM
    users
WHERE
    geblokkeerd=false

Deze query kun je definieren in een view:

CREATE OR REPLACE VIEW actievespelers
(
    id,
    naam,
    geblokkeerd)
AS
SELECT spelers.id, spelers.naam, spelers.geblokkeerd
FROM spelers
WHERE (spelers.geblokkeerd = false);

Dit maakt een view genaamd actievespelers en de definitie van die view is gewoon de query die kijkt naar 'geblokkeerd=false'.

Als je nu alle nietgeblokkeerde spelers wilt zien kun je gewoon selecteren uit die view:

SELECT
    *
FROM
    actievespelers;

Waar, wanneer en waarom gebruik je views?

Queries vereenvoudigen.

Queries kunnen snel groot worden, bijvoorbeeld door joins of complexe WHERE clausules. In de praktijk kom je sommige joins regelmatig tegen en in plaats van elke keer weer diezelfde join te tikken kun je ook een view definieren waar die join alvast in zit, zodat je het resultaat van die join als view in andere queries kunt gebruiken. Dit maakt je uiteindelijke query een stuk kleiner en leesbaarder.

Bijvoorbeeld, als je klanten een abonnement kunnen afsluiten dat een maand geldig is, dan hebben ze alleen toegang zolang er een abonnementrecord voor hen is waarvan de begin- en einddatum voor en na now() liggen en waar de status van dat abonnement 'betaald' is.

SELECT
    *
FROM
    klanten
LEFT JOIN
    abonnementen
ON
    klanten.klantid=abonnementen.klantid
WHERE
    NOW() BETWEEN(abonnementen.startdate AND
abonnementen.enddate)
AND
    abonnementen.paid=true;

Dit wil je echt niet elke openieuw intikken elke keer dat je een actieve klant zoekt, dus dit zet je in een view.

Databronnen centraliseren.

Door uit views te selecteren kun je in de definitie van de view bepalen met welke records gebruikt zullen worden door de queries die de view aanspreken. In dit voorbeeld bepaalt de definitie van de view 'actievespelers' welke spelers als actief worden geschouwd door elke query die selecteert uit 'actievespelers'. Mocht je definitie van wat telt als actief ooit veranderen, dan hoef je dat alleen in deze view door te voeren.

Databronnen beveiligen.

Met een view kun je een query toegang geven tot een tabel waar de query zelf geen toegang toe heeft. Je website gebruikt databaseuser X, en de DBA gebruikt een administratie account. De DBA kan user-X het select recht op de spelers tabel ontnemen en in plaats daarvan alleen select recht op de view geven. Op die manier kan de web site alleen spelers ophalen uit de view en in die view bepaalt de DBA welke records wel en niet te zien zijn. Mocht een query van de website gehackt worden dan is het nog steeds niet mogelijk om direct uit die spelers tabel te selecteren, want dat mag user-X niet.

Teruggeplaatst van "http://www.yapf.net/index.php/Views"

Deze pagina is 362 maal bekeken. Deze pagina is het laatst bewerkt op 21 dec 2008 om 11:48.


Zoeken

Bladeren
Hoofdpagina
Gebruikersportaal
In het nieuws
Recente wijzigingen
Willekeurige pagina
Hulp
Bewerken
Brontekst bekijken
Hulp bij bewerken
Paginaopties
Overlegpagina
Opmerking toevoegen
Printervriendelijke versie
Pagina-informatie
Paginageschiedenis
Verwijzingen naar deze pagina
Verwante wijzigingen
Mijn pagina's
Aanmelden / registreren
Speciale pagina’s
Nieuwe pagina's
Bestandslijst
Statistieken
Foutrapporten
Meer …