Lecciones del módulo (4/4)
Vistas y abstracción de datos
A lo largo de nuestras lecciones habrá notado que las consultas (especialmente las JOIN complejas o agregaciones como GROUP BY) comienzan a volverse largas y llenas de reglas y cálculos.
¿Qué pasaría si hubiera una manera de guardar mentalmente la consulta completada y ocultarla de la vista, pretendiendo a partir de ese momento que es, para todos los efectos, una "tabla" normal de la base de datos?
Bienvenido al mundo de las Vistas.
CREAR VISTA
Una vista es esencialmente una consulta SQL persistente con nombre, ¡pero se comporta como una tabla "virtual"!
CREATE VIEW user_spending AS
SELECT
c.id,
c.first_name,
SUM(o.amount) as total_spent
FROM customers c
JOIN orders o ON c.id = o.customer_id
GROUP BY c.id;¡Hecho! Ahora, en lugar de tener que rehacer siempre JOIN y GROUP BY, solo tienes que escribir consultas perfectamente normales:
SELECT * FROM user_spending WHERE total_spent > 100;
-- Postgres dietro le quinte richiamerà automaticamente la grande formula.Vistas y "datos en tiempo real"
Un mito muy común es pensar que las Vistas toman los datos, calculan sumas como precios o clasificaciones y producen una triste instantánea persistente, como una fotografía. ¡Mal (casi siempre)! De forma predeterminada, las Vistas son virtuales: cada vez que pones el nombre de una Vista en tu SELECT, Postgres detrás de escena fusiona tu solicitud ejecutando un cálculo en tiempo real basado en el estado de la base de datos en ese milisegundo exacto. Por lo tanto, nunca leerá datos obsoletos.
¿Para qué sirven?
- Simplicidad: las vistas protegen las aplicaciones externas de los cambios. Si el equipo de frontend sabe que tiene que leer datos de la vista
top_selling, no tienen que preocuparse si mañana modificamos la base de datos agregando tres relaciones intermedias para sacar a los más vendidos. - Seguridad y segregación: en bases de datos enormes, una vista puede preseleccionar y ocultar parte de los datos del usuario a desarrolladores externos, otorgándoles acceso (por ejemplo) solo a una subvista de análisis sin nombres reales.
Dejar caer una vista
Al igual que las tablas, cuando ya no las necesites, procedes con el comando DROP:
DROP VIEW user_spending;Pruébalo
Cree una vista (VER) llamada 'productos_de_alto valor'. Debe comportarse como un contenedor que selecciona los 3 campos esenciales (`id`, `name`, `price`) de la tabla 'productos', PERO sólo y siempre para aquellos productos que tengan un 'precio' mayor a 50,00.
Mostrar pista
Escribe CREAR VISTA nombre_vista COMO SELECCIONAR... DESDE... DONDE...
Solución disponible después de 3 intentos
Llamar a una vista
Dado que cada ejercicio en la plataforma se ejecuta en un entorno aislado (y limpio), la vista anterior ya no existe en este paso. Vuelva a crear la vista 'high_value_products' (aún con productos que tienen precio > 50) y luego, en la línea inmediatamente siguiente, ejecute un SELECT de todo su contenido ordenado por precio descendente (DESC) para verificar que funciona.
Mostrar pista
No olvides el; entre declaraciones SQL (póngala al final de la primera línea)! Esto permite a Postgres ejecutar las 2 tareas en secuencia.
Solución disponible después de 3 intentos