Hantera vyer

Databasdesign

Lis Sulmont

Curriculum Manager

Skapa mer komplexa vyer

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

Ge och återkalla åtkomst till en vy

GRANT privilege(s) or REVOKE privilege(s)

ON object

TO role or FROM role

  • Privilegier: SELECT, INSERT, UPDATE, DELETE, etc
  • Objekt: tabell, vy, schema, etc
  • Roller: en databasanvändare eller en grupp av databasanvändare
Databasdesign

Exempel på GRANT och REVOKE

$$

GRANT UPDATE ON ratings TO PUBLIC;  

$$

REVOKE INSERT ON films FROM db_user;
Databasdesign

Uppdatera en vy

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

Inte alla vyer kan uppdateras

  • Vyn är baserad på en enda tabell
  • Använder inte fönster- eller aggregeringsfunktion
1 https://www.postgresql.org/docs/9.5/sql-update.html
Databasdesign

Infoga i en vy

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

Inte alla vyer är infogningsbara

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

Infoga i en vy

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

Inte alla vyer är infogningsbara

Viktigt: undvik att ändra data via vyer

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

Ta bort en vy

DROP VIEW view_name [ CASCADE | RESTRICT ];
  • RESTRICT (standard): returnerar ett fel om det finns objekt som beror på vyn
  • CASCADE: tar bort vyn och alla objekt som beror på den
Databasdesign

Omdefiniera en vy

CREATE OR REPLACE VIEW view_name AS new_query
  • Om en vy med view_name finns ersätts den
  • new_query måste generera samma kolumnnamn, ordning och datatyper som den gamla frågan
  • Kolumnernas utdata kan skilja sig
  • Nya kolumner kan läggas till i slutet

Om dessa krav inte kan uppfyllas, ta bort den befintliga vyn och skapa en ny

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

Ändra en vy

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
Databasdesign

Nu kör vi en övning!

Databasdesign

Preparing Video For Download...