Gestión de vistas

Diseño de bases de datos

Lis Sulmont

Curriculum Manager

Creación de vistas más complejas

  • Agregación: SUM(), AVG(), COUNT(), MIN(), MAX(), GROUP BY, etc.
  • JOINs: INNER JOIN, LEFT JOIN. RIGHT JOIN, FULL JOIN
  • Condicionales: WHERE, HAVING, UNIQUE, NOT NULL, AND, OR,>,<, etc.
Diseño de bases de datos

Conceder y revocar el acceso a una vista

GRANT privilege(s) o REVOKE privilege(s)

ON object

TO role o FROM role

  • Privilegios: SELECT, INSERT, UPDATE, DELETE, etc.
  • Objetos: tabla, vista, esquema, etc.
  • Roles: un usuario de la base de datos o un grupo de usuarios de la base de datos.
Diseño de bases de datos

Ejemplo de concesión y revocación

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

Diseño de bases de datos

Actualización de una vista

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

No todas las vistas se pueden actualizar.

  • La vista se compone de una tabla.
  • No utiliza una función de ventana ni una función agregada.
1 https://www.postgresql.org/docs/9.5/sql-update.html
Diseño de bases de datos

Insertar en una vista

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

No todas las vistas se pueden insertar.

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Diseño de bases de datos

Insertar en una vista

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

No todas las vistas se pueden insertar.

Conclusión: evita modificar datos a través de vistas.

1 https://www.postgresql.org/docs/9.5/sql-insert.html
Diseño de bases de datos

Eliminar una vista

DROP VIEW view_name [ CASCADE | RESTRICT ];
  • RESTRICT (predeterminado): devuelve un error si hay objetos que dependen de la vista.
  • CASCADE: elimina la vista y cualquier objeto que dependa de esa vista.
Diseño de bases de datos

Redefinición de una vista

CREATE OR REPLACE VIEW view_name AS new_query
  • Si existe una vista con view_name, se sustituye.
  • new_query Debes generar los mismos nombres de columna, orden y tipos de datos que la consulta anterior.
  • La salida de la columna puede ser diferente.
  • Se pueden añadir nuevas columnas al final.

Si no se pueden cumplir estos criterios, elimina la vista existente y crea una nueva.

1 https://www.postgresql.org/docs/9.2/sql-createview.html
Diseño de bases de datos

Modificar 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
Diseño de bases de datos

¡Vamos a practicar!

Diseño de bases de datos

Preparing Video For Download...