Vistas Lógicas y Vistas Materializadas
En el diseño lógico de bases de datos relacionales, una Vista (VIEW) es una tabla virtual cuya definición se almacena en el catálogo del SGBD en forma de consulta SQL (SELECT). Las vistas no almacenan datos de forma persistente por sí mismas (a menos que sean vistas materializadas), sino que calculan su contenido de forma dinámica cada vez que se consultan.
1. Vistas y el Nivel Externo ANSI-SPARC #
Las vistas constituyen la implementación técnica directa del Nivel Externo en la arquitectura de 3 niveles de ANSI-SPARC:
- Permiten presentar a cada grupo de usuarios o aplicaciones una visión personalizada y adaptada de los datos, ocultando la complejidad del esquema lógico global.
1┌─────────────────────────────────────────────────────────────┐ 2│ VISTAS EXTERNAS (VISTAS) │ 3│ [ Vista_Ventas_Publica ] [ Vista_RRHH_Confidencial ]│ 4└──────────────────────────────┬──────────────────────────────┘ 5 │ Consultas SQL (Nivel Lógico) 6┌──────────────────────────────▼──────────────────────────────┐ 7│ TABLAS BASE LÓGICAS │ 8│ [ CLIENTES ] [ PEDIDOS ] [ EMPLEADOS ] │ 9└─────────────────────────────────────────────────────────────┘
2. Objetivos y Ventajas de las Vistas #
- Seguridad y Control de Privilegios:
- Permiten exponer solo un subconjunto de columnas y filas a determinados roles de usuario, ocultando datos sensibles (como salarios, datos bancarios o contraseñas).
- Simplificación de Consultas:
- Encapsulan uniones complejas de varias tablas (
JOIN), filtros y cálculos agregados en una sola estructura accesible mediante un simpleSELECT * FROM vista.
- Encapsulan uniones complejas de varias tablas (
- Independencia Lógica de Datos:
- Si en el futuro se refactoriza o divide una tabla base en dos, se puede crear una vista con el nombre y estructura de la tabla original para que las aplicaciones existentes sigan funcionando sin cambios.
3. Creación y Uso de Vistas Lógicas #
A. Vista para Seguridad (Filtrado de Columnas y Filas) #
Ocultar el salario y filtrar solo los empleados activos de Madrid:
1CREATE VIEW VISTA_EMPLEADOS_MADRID AS 2SELECT id_empleado, nombre, apellidos, puesto, email 3FROM EMPLEADOS 4WHERE ciudad = 'Madrid' AND activo = TRUE;
- Los usuarios con permisos sobre
VISTA_EMPLEADOS_MADRIDpueden consultar los empleados sin tener acceso al camposalarioni a los empleados de otras ciudades.
B. Vista para Simplificación de Relaciones (JOINs) #
Encapsular los pedidos con el nombre del cliente y el total facturado:
1CREATE VIEW VISTA_RESUMEN_PEDIDOS AS 2SELECT 3 p.id_pedido, 4 p.fecha, 5 c.nombre AS nombre_cliente, 6 c.email, 7 SUM(lp.cantidad * lp.precio_unitario) AS importe_total 8FROM PEDIDOS p 9INNER JOIN CLIENTES c ON p.id_cliente = c.id_cliente 10INNER JOIN LINEAS_PEDIDO lp ON p.id_pedido = lp.id_pedido 11GROUP BY p.id_pedido, p.fecha, c.nombre, c.email;
- Para consultar los pedidos basta con ejecutar:
1SELECT * FROM VISTA_RESUMEN_PEDIDOS WHERE importe_total > 500;
4. Vistas Actualizables y WITH CHECK OPTION #
Una vista es actualizable (admite INSERT, UPDATE, DELETE) si el motor puede traducir sin ambigüedad la operación a la tabla base subyacente.
NOTE
Una vista NO es actualizable si contiene funciones de agregación (SUM,AVG,COUNT), cláusulasDISTINCT,GROUP BY,HAVING, operadoresUNIONo uniones complejas en algunos motores.
La cláusula WITH CHECK OPTION #
Evita que se inserten o actualicen filas a través de la vista con valores que queden fuera del criterio de filtro de la propia vista:
1CREATE VIEW VISTA_PRODUCTOS_BARATOS AS 2SELECT id_producto, nombre, precio 3FROM PRODUCTOS 4WHERE precio <= 50 5WITH CHECK OPTION;
- Si un usuario intenta hacer
INSERT INTO VISTA_PRODUCTOS_BARATOS VALUES (99, 'Monitor', 180);, la base de datos rechazará la inserción.
5. Vistas Materializadas (Materialized Views) #
En consultas analíticas o informes masivos que procesan millones de filas, reejecutar el SELECT de la vista en cada consulta resulta inviable en términos de rendimiento.
Una Vista Materializada:
- Almacena físicamente en disco el resultado de la consulta, como si fuera una tabla real.
- Ofrece tiempos de lectura ultra rápidos equivalentes a una tabla indexada.
- Desventaja: Los datos pueden quedar desactualizados si las tablas base cambian, requiriendo una orden explícita de refresco (
REFRESH).
1-- Creación de vista materializada en PostgreSQL 2CREATE MATERIALIZED VIEW VISTA_MAT_VENTAS_MES AS 3SELECT 4 DATE_TRUNC('month', fecha) AS mes, 5 id_producto, 6 SUM(cantidad) AS unidades_vendidas, 7 SUM(importe_total) AS facturacion_total 8FROM VENTAS 9GROUP BY DATE_TRUNC('month', fecha), id_producto; 10 11-- Actualización periódica de los datos calculados 12REFRESH MATERIALIZED VIEW VISTA_MAT_VENTAS_MES;
6. Comparativa: Tabla Base vs. Vista Lógica vs. Vista Materializada #
| Característica | Tabla Base | Vista Lógica (VIEW) | Vista Materializada (MAT VIEW) |
|---|---|---|---|
| Almacenamiento en disco | Sí (datos persistentes) | No (solo la definición SQL) | Sí (copia física del resultado) |
| Frescura de los datos | Tiempo real inmediato | Tiempo real inmediato | Instantánea temporal (Snapshot) |
| Rendimiento de lectura | Rápido con índices | Depende del coste de la consulta base | Muy rápido (soporta índices propios) |
| Mantenimiento / Refresco | Automático en cada DML | Automático en cada consulta | Requiere orden de REFRESH |
Resumen del tema
Conceptos clave #
- Vista lógica: tabla virtual calculada dinámicamente mediante una sentencia
SELECT. - Seguridad e independencia: permite restringir el acceso a columnas y filas confidenciales sin duplicar información.
WITH CHECK OPTION: restricción que garantiza que los datos insertados o modificados a través de la vista cumplan siempre su condiciónWHERE.- Vista Materializada: persistencia física en disco de los resultados de una consulta pesada para optimizar lecturas analíticas masivas a costa de un refresco periódico.
Qué debes recordar #
Las vistas estándar proporcionan seguridad y simplicidad lógica sin consumir disco; las vistas materializadas sacrifican sincronización inmediata a cambio de un rendimiento de lectura extremo en Big Data y Business Intelligence.