Gestione delle visualizzazioni

Progettazione di database

Lis Sulmont

Curriculum Manager

Creare viste più complesse

  • Aggregazione: SUM(), AVG(), COUNT(), MIN(), MAX(), GROUP BY, ecc.
  • ** JOIN
  • Condizionali: WHERE, HAVING, UNIQUE, NOT NULL, AND, OR,>,<, ecc.
Progettazione di database

Come dare e togliere l'accesso a una vista

o

ON object

o

  • Privilegi: SELECT, INSERT, UPDATE, DELETE, ecc.
  • Oggetti: tabella, vista, schema, ecc.
  • Ruoli: un utente del database o un gruppo di utenti del database
Progettazione di database

Esempio di concessione e revoca

$$\nsql\nGRANT UPDATE ON ratings TO PUBLIC; \n\n$$\nsql\nREVOKE INSERT ON films FROM db_user;\n\n

Progettazione di database

Aggiornare una vista

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

Non tutte le visualizzazioni possono essere aggiornate.

  • La vista è fatta da una tabella
  • Non usare una finestra o una funzione aggregata.
1 https://www.postgresql.org/docs/9.5/sql-update.html
Progettazione di database

Inserire in una vista

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

Non tutte le viste possono essere inserite

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Progettazione di database

Inserire in una vista

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

Non tutte le viste possono essere inserite

Da ricordare: non cambiare i dati usando le viste.

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Progettazione di database

Eliminare una vista

DROP VIEW view_name [ CASCADE | RESTRICT ];
  • RESTRICT (impostazione predefinita): restituisce un errore se ci sono oggetti che dipendono dalla vista
  • CASCADE: elimina la vista e tutti gli oggetti che dipendono da quella vista
Progettazione di database

Rivedere una prospettiva

CREATE OR REPLACE VIEW view_name AS new_query
  • Se c'è una vista con un nome che inizia con " view_name ", viene sostituita.
  • new_query deve generare gli stessi nomi di colonna, lo stesso ordine e gli stessi tipi di dati della vecchia query
  • L'output della colonna potrebbe essere diverso.
  • Alla fine si possono aggiungere nuove colonne.

Se non riesci a soddisfare questi criteri, elimina la vista esistente e creane una nuova.

1 https://www.postgresql.org/docs/9.2/sql-createview.html
Progettazione di database

Cambiare una vista

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
Progettazione di database

Passiamo alla pratica!

Progettazione di database

Preparing Video For Download...