Gestionarea vizualizărilor

Proiectarea bazelor de date

Lis Sulmont

Curriculum Manager

Crearea de vizualizări mai complexe

  • Agregare: SUM(), AVG(), COUNT(), MIN(), MAX(), GROUP BY, etc
  • Îmbinări: INNER JOIN, LEFT JOIN. RIGHT JOIN, FULL JOIN
  • Condiții: WHERE, HAVING, UNIQUE, NOT NULL, AND, OR,>,<, etc
Proiectarea bazelor de date

Acordarea și revocarea accesului la o vizualizare

GRANT privilege(s) sau REVOKE privilege(s)

ON object

TO role sau FROM role

  • Privilegii: SELECT, INSERT, UPDATE, DELETE, etc
  • Obiecte: tabel, vizualizare, schemă, etc
  • Roluri: un utilizator de bază de date sau un grup de utilizatori
Proiectarea bazelor de date

Exemplu de acordare și revocare

$$

GRANT UPDATE ON ratings TO PUBLIC;  

$$

REVOKE INSERT ON films FROM db_user;
Proiectarea bazelor de date

Actualizarea unei vizualizări

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

Nu toate vizualizările pot fi actualizate

  • Vizualizarea este formată dintr-un singur tabel
  • Nu utilizează funcții de fereastră sau de agregare
1 https://www.postgresql.org/docs/9.5/sql-update.html
Proiectarea bazelor de date

Inserarea într-o vizualizare

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

Nu toate vizualizările permit inserare

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Proiectarea bazelor de date

Inserarea într-o vizualizare

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

Nu toate vizualizările permit inserare

Concluzie: evitați modificarea datelor prin vizualizări

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Proiectarea bazelor de date

Ștergerea unei vizualizări

DROP VIEW view_name [ CASCADE | RESTRICT ];
  • RESTRICT (implicit): returnează o eroare dacă există obiecte dependente de vizualizare
  • CASCADE: șterge vizualizarea și orice obiect dependent de aceasta
Proiectarea bazelor de date

Redefinirea unei vizualizări

CREATE OR REPLACE VIEW view_name AS new_query
  • Dacă există o vizualizare cu view_name, aceasta este înlocuită
  • new_query trebuie să genereze aceleași nume de coloane, ordine și tipuri de date ca interogarea anterioară
  • Rezultatul coloanelor poate fi diferit
  • Coloane noi pot fi adăugate la sfârșit

Dacă aceste criterii nu pot fi îndeplinite, ștergeți vizualizarea existentă și creați una nouă

1 https://www.postgresql.org/docs/9.2/sql-createview.html
Proiectarea bazelor de date

Modificarea unei vizualizări

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
Proiectarea bazelor de date

Să exersăm!

Proiectarea bazelor de date

Preparing Video For Download...