En este artículo, aprenderemos sobre las vistas y la administración de vistas en PostgreSQL. Le presentaremos el concepto de vistas, le mostraremos cómo se crean, modifican y eliminan las vistas. Y lo más importante, también veremos cómo se pueden implementar vistas en DBMS.
Una vista en PostgreSQL se puede definir como una tabla virtual que se deriva de tablas base subyacentes o vistas definidas previamente.
Es importante tener en cuenta los siguientes puntos:
- Una vista no existe necesariamente en su forma física, es decir, sus tuplas no siempre se almacenan físicamente en la base de datos.
- Esto limita las operaciones de actualización que se pueden aplicar a las vistas.
- No hay absolutamente ninguna limitación para consultar una vista.
Creación de vistas de PostgreSQL:
Para especificar una vista, usamos una declaración de creación de vista .
Syntax: CREATE [TEMP |TEMPORARY] VIEW view_name AS SELECT column1, column2.... FROM table_name WHERE [condition];
La vista recibe un nombre de tabla virtual, una lista de nombres de atributos y una consulta para especificar el contenido de la vista.
Ejemplo:
Considere las siguientes tablas:
Ahora, a partir de las siguientes tablas, supongamos que deseamos crear una vista tal que podamos calcular el número de copias de cada libro que figura en la tabla de libros.
Esto puede hacerse de la siguiente manera:
CREATE VIEW BOOKCOUNT AS SELECT Book_id,Title, Sum(No_of_copies) FROM BOOK A, BOOK_COPIES B WHERE A.Book_id = B.Book_ID GROUP BY A.BOOK_ID; Select * from BOOKCOUNT;
La salida del siguiente código será:
Actualización de vistas de PostgreSQL:
Podemos cambiar la consulta de definición de una vista, usamos la declaración CREATE VIEW con la adición OR REPLACE de la siguiente manera:
CREATE OR REPLACE VIEW_NAME AS SELECT column1, column2.... FROM table_name WHERE [condition];
Una actualización de una vista generalmente no es factible porque tiene algunos efectos secundarios en las tablas base subyacentes. Por ejemplo, si actualizamos la suma de copias de un libro en particular, tendremos que actualizar el número correspondiente de recuento de libros en la tabla de recuento de libros .
Por lo tanto, podemos decir que:
- Una vista con una sola tabla de definición es actualizable si los atributos de la vista contienen la clave principal de la relación base, así como otros atributos que no tienen valores predeterminados especificados.
- Las vistas definidas por la combinación natural de varias tablas no se pueden actualizar.
- Las vistas definidas mediante funciones de agrupación y agregación no son actualizables.
CON OPCIÓN CHEQUE
Básicamente, esta cláusula se puede agregar al final de la definición de la vista si la vista debe actualizarse mediante las declaraciones INSERT, UPDATE, DELETE. Permitirá que el sistema rechace las operaciones que violen las reglas de SQL para las actualizaciones de la vista.
En la vista dada BOOKCOUNT que hemos creado, no es actualizable.
Si intentamos actualizar la vista BOOKCOUNT , obtendremos el siguiente error:
Update BOOKCOUNT set title ='ADP' where Book_ID =1;
ERROR: la tabla de destino BOOKCOUNT no se puede actualizar.
De hecho, cualquiera de las vistas que contienen los siguientes elementos no son actualizables:
- Funciones agregadas como MIN, MAX, SUM, AVG y COUNT.
- DISTINTO
- Cláusula GROUP BY.
- Cláusula HAVING.
- Cláusula UNION o UNION ALL.
- Unión izquierda o unión externa.
- Subconsulta en la cláusula SELECT o en la cláusula WHERE que hace referencia a la tabla aparecida en la cláusula FROM.
- Referencia a la vista no actualizable en la cláusula FROM.
- Referencia solo a valores literales.
- Múltiples referencias a cualquier columna de la tabla base
Entonces crearemos otra vista.
CREATE VIEW Example as SELECT title, Author_Name, FROM BOOK, BOOK_AUTHORS WHERE BOOK.Book_ID=BOOK_AUTHORS.Book_ID;
La vista creada será:
Ahora actualicemos esta vista que hemos creado.
Ejemplo de actualización de vistas
UPDATE Example SET Author_Name='Rahul' WHERE Author_Name='Abhishek';
La vista actualizada se verá así:
Eliminación de vistas de PostgreSQL
Para eliminar una vista existente en PostgreSQL, podemos usar la declaración DROP VIEW de la siguiente manera:
DROP VIEW [ IF EXISTS ] view_name;
Si un nombre de vista especificado no existe, obviamente resultará en un error. Entonces, para evitar errores, usamos la opción IF EXISTS.
Ejemplo: Para eliminar la vista que hemos creado utilizaremos el siguiente comando
DROP VIEW IF EXISTS BOOKCOUNT;
Vamos a comprobar la salida para el mismo
Después de eliminar la vista, cuando intentamos recuperar las columnas de la vista, da un error que dice que la vista a la que se hace referencia no existe.