Views beheren

Databaseontwerp

Lis Sulmont

Curriculum Manager

Complexere views maken

  • Aggregatie: SUM(), AVG(), COUNT(), MIN(), MAX(), GROUP BY, etc.
  • Joins: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
  • Conditionals: WHERE, HAVING, UNIQUE, NOT NULL, AND, OR, >, <, etc.
Databaseontwerp

Toegang tot een view geven en intrekken

GRANT privilege(s) of REVOKE privilege(s)

ON object

TO role of FROM role

  • Rechten: SELECT, INSERT, UPDATE, DELETE, etc.
  • Objecten: tabel, view, schema, etc.
  • Rollen: een databasegebruiker of een groep databasegebruikers
Databaseontwerp

Voorbeeld: rechten geven en intrekken

$$

GRANT UPDATE ON ratings TO PUBLIC;  

$$

REVOKE INSERT ON films FROM db_user;
Databaseontwerp

Een view updaten

UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama';

Niet alle views zijn updatable

  • View bestaat uit één tabel
  • Gebruikt geen window- of aggregatiefunctie
1 https://www.postgresql.org/docs/9.5/sql-update.html
Databaseontwerp

Invoegen in een view

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

Niet alle views zijn insertable

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Databaseontwerp

Invoegen in een view

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

Niet alle views zijn insertable

Tip: vermijd data wijzigen via views

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Databaseontwerp

Een view droppen

DROP VIEW view_name [ CASCADE | RESTRICT ];
  • RESTRICT (default): geeft een fout als er objecten van de view afhangen
  • CASCADE: dropt de view en alle afhankelijke objecten
Databaseontwerp

Een view herdefiniëren

CREATE OR REPLACE VIEW view_name AS new_query
  • Bestaat view_name al, dan wordt die vervangen
  • new_query moet dezelfde kolomnamen, volgorde en datatypes genereren als de oude query
  • De kolomoutput mag anders zijn
  • Nieuwe kolommen mogen aan het einde worden toegevoegd

Als dit niet kan, drop de bestaande view en maak een nieuwe

1 https://www.postgresql.org/docs/9.2/sql-createview.html
Databaseontwerp

Een view aanpassen

ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
ALTER VIEW [ IF EXISTS ] name OWNER TO new_owner
ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
1 https://www.postgresql.org/docs/9.2/sql-alterview.html
Databaseontwerp

Laten we oefenen!

Databaseontwerp

Preparing Video For Download...