¿Cuáles son las vistas de una tabla?

Vistas en Bases de Datos: Qué Son y Cómo Usarlas

★★★★★Valoración: 4.43 (6866 votos)

Las vistas en SQL son un concepto fundamental que revoluciona la forma en que interactuamos con los datos almacenados en nuestras bases de datos. Lejos de ser tablas tradicionales, las vistas se comportan como tablas virtuales. Esto significa que no almacenan datos físicamente en el disco; en cambio, derivan sus datos dinámicamente ejecutando una consulta predefinida cada vez que son accedidas. Esta característica les otorga una flexibilidad y utilidad excepcionales en el manejo de información.

La principal ventaja de las vistas radica en su capacidad para simplificar la complejidad. Permiten encapsular consultas intrincadas, combinando datos de una o varias tablas, y presentarlas al usuario como si fueran una única entidad sencilla. Esto no solo facilita el acceso y la comprensión de los datos, sino que también juega un papel crucial en la seguridad, permitiendo restringir el acceso a columnas o filas específicas sin exponer la estructura subyacente de las tablas.

¿Qué es una vista de base de datos?
Una vista de base de datos es un subconjunto de una base de datos y se basa en una consulta que se ejecuta en una o más tablas de base de datos. Las vistas de base de datos se guardan en la base de datos como consultas con nombre y se pueden utilizar para guardar consultas completas que se utilizan con frecuencia.

En este artículo, exploraremos en profundidad qué son las vistas, cómo crearlas utilizando la sentencia CREATE VIEW, cómo gestionarlas (listarlas, actualizarlas y eliminarlas), y técnicas avanzadas como el uso de la cláusula WITH CHECK OPTION. Utilizaremos ejemplos prácticos basados en dos tablas simples para ilustrar estos conceptos.

Índice de Contenido

¿Qué es una Vista en SQL?

Como mencionamos, una vista en SQL es esencialmente una consulta SQL guardada que opera como una tabla virtual. A diferencia de las tablas base (aquellas que almacenan datos directamente), una vista no posee sus propios datos. Su contenido se genera 'sobre la marcha' cada vez que se consulta, ejecutando la instrucción SELECT que la define.

Las vistas pueden obtener datos de una o más tablas y presentarlos en un formato personalizado, lo que permite a los desarrolladores:

  • Simplificar Consultas Complejas: Encapsular uniones (JOINs) complicadas y condiciones en un solo objeto fácil de consultar.
  • Mejorar la Seguridad: Controlar el acceso a subconjuntos específicos de datos, mostrando solo las columnas o filas relevantes para un usuario o aplicación particular.
  • Presentar Datos Flexiblemente: Adaptar la vista de los datos para satisfacer las necesidades específicas de diferentes usuarios o informes.

Para nuestros ejemplos, utilizaremos dos tablas hipotéticas: StudentDetails (Detalles del Estudiante) y StudentMarks (Notas del Estudiante).

-- Crear tabla StudentDetails
CREATE TABLE StudentDetails (
S_ID INT PRIMARY KEY,
NAME VARCHAR(255),
ADDRESS VARCHAR(255)
);

INSERT INTO StudentDetails (S_ID, NAME, ADDRESS)
VALUES
(1, 'Harsh', 'Kolkata'),
(2, 'Ashish', 'Durgapur'),
(3, 'Pratik', 'Delhi'),
(4, 'Dhanraj', 'Bihar'),
(5, 'Ram', 'Rajasthan');

-- Crear tabla StudentMarks
CREATE TABLE StudentMarks (
ID INT PRIMARY KEY,
NAME VARCHAR(255),
Marks INT,
Age INT
);

INSERT INTO StudentMarks (ID, NAME, Marks, Age)
VALUES
(1, 'Harsh', 90, 19),
(2, 'Suresh', 50, 20),
(3, 'Pratik', 80, 19),
(4, 'Dhanraj', 95, 21),
(5, 'Ram', 85, 18);

Creación de Vistas (CREATE VIEW)

Podemos crear una vista utilizando la sentencia CREATE VIEW. Una vista puede basarse en una sola tabla o en múltiples tablas.

Sintaxis Básica:

CREATE VIEW nombre_vista AS
SELECT columna1, columna2, ...
FROM nombre_tabla
WHERE condicion;

Donde:

  • nombre_vista: Es el nombre que le damos a la vista.
  • nombre_tabla: Es la tabla base de la que se obtienen los datos.
  • condicion: Es la cláusula opcional que filtra las filas.

Ejemplo 1: Creando una Vista Simple desde una Sola Tabla

Veamos cómo crear una vista simple llamada DetailsView a partir de la tabla StudentDetails, seleccionando solo el nombre y la dirección para los estudiantes con un ID menor a 5.

CREATE VIEW DetailsView AS
SELECT NAME, ADDRESS
FROM StudentDetails
WHERE S_ID < 5;

Para recuperar los datos de esta vista, simplemente la consultamos como si fuera una tabla:

SELECT * FROM DetailsView;

El resultado mostraría:

NAME | ADDRESS
--------|---------
Harsh | Kolkata
Ashish | Durgapur
Pratik | Delhi
Dhanraj | Bihar

Otro ejemplo, creando una vista llamada StudentNames que muestra el ID y el nombre de los estudiantes, ordenados por nombre:

CREATE VIEW StudentNames AS
SELECT S_ID, NAME
FROM StudentDetails
ORDER BY NAME;

Consultando esta vista:

SELECT * FROM StudentNames;

El resultado sería:

S_ID | NAME
-----|-------
2 | Ashish
4 | Dhanraj
1 | Harsh
3 | Pratik
5 | Ram

Ejemplo 2: Creando una Vista a partir de Múltiples Tablas

Las vistas son especialmente útiles para combinar datos de varias tablas. Crearemos una vista llamada MarksView que combine el nombre y la dirección de StudentDetails con las notas de StudentMarks, uniendo las tablas por el nombre del estudiante.

CREATE VIEW MarksView AS
SELECT SD.NAME, SD.ADDRESS, SM.MARKS
FROM StudentDetails AS SD, StudentMarks AS SM
WHERE SD.NAME = SM.NAME;

Nota: Se usan alias (SD, SM) para mayor claridad. Aunque el ejemplo original usa la sintaxis implícita de JOIN, es recomendable usar JOINs explícitos para mayor claridad en consultas complejas. Sin embargo, respetaremos la estructura del ejemplo original.

Para mostrar los datos de MarksView:

SELECT * FROM MarksView;

El resultado mostraría:

NAME | ADDRESS | MARKS
--------|----------|------
Harsh | Kolkata | 90
Pratik | Delhi | 80
Dhanraj | Bihar | 95
Ram | Rajasthan| 85

Gestión de Vistas: Listar, Actualizar y Eliminar

Una vez creadas, las vistas necesitan ser gestionadas. Esto incluye saber cómo listarlas, cómo modificar su definición y cómo eliminarlas.

1. Listar todas las Vistas en una Base de Datos

La forma de listar las vistas puede variar ligeramente entre sistemas de gestión de bases de datos (SGBD). Dos métodos comunes son:

  • Usando SHOW FULL TABLES (común en MySQL):
USE nombre_base_datos;
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
  • Usando la tabla information_schema.views (más estándar SQL):
SELECT table_name
FROM information_schema.views
WHERE table_schema = 'nombre_base_datos';

O para ver más detalles:

SELECT table_schema, table_name, view_definition
FROM information_schema.views
WHERE table_schema = 'nombre_base_datos';

2. Eliminando una Vista (DROP VIEW)

Para eliminar una vista existente, utilizamos la sentencia DROP VIEW.

Sintaxis:

DROP VIEW nombre_vista;

Ejemplo: Para eliminar la vista MarksView que creamos antes:

DROP VIEW MarksView;

Una vez ejecutada esta sentencia, la vista MarksView dejará de existir en la base de datos.

3. Actualizando la Definición de una Vista (CREATE OR REPLACE VIEW)

Si necesitas modificar la consulta subyacente que define una vista (por ejemplo, añadir o quitar columnas, cambiar la condición WHERE), puedes usar la sentencia CREATE OR REPLACE VIEW. Si la vista ya existe, la reemplaza; si no existe, la crea.

Sintaxis:

CREATE OR REPLACE VIEW nombre_vista AS
SELECT columna1, columna2, ...
FROM nombre_tabla
WHERE condicion;

Ejemplo: Para actualizar la vista MarksView y añadir la columna AGE de la tabla StudentMarks:

CREATE OR REPLACE VIEW MarksView AS
SELECT SD.NAME, SD.ADDRESS, SM.MARKS, SM.AGE
FROM StudentDetails AS SD, StudentMarks AS SM
WHERE SD.NAME = SM.NAME;

Si ahora consultamos MarksView:

SELECT * FROM MarksView;

El resultado incluirá la nueva columna:

NAME | ADDRESS | MARKS | AGE
--------|----------|-------|----
Harsh | Kolkata | 90 | 19
Pratik | Delhi | 80 | 19
Dhanraj | Bihar | 95 | 21
Ram | Rajasthan| 85 | 18

Actualización de Datos a través de Vistas

Es importante notar que, aunque las vistas son virtuales, algunas vistas permiten realizar operaciones de modificación de datos (INSERT, UPDATE, DELETE) que se reflejan en las tablas base subyacentes. Sin embargo, no todas las vistas son "actualizables".

Si quieres actualizar los datos existentes *a través* de una vista, puedes usar la sentencia UPDATE:

Sintaxis de UPDATE a través de una Vista:

UPDATE nombre_vista
SET columna1 = valor1, columna2 = valor2, ...
WHERE [condicion];

De manera similar, puedes insertar o eliminar filas a través de una vista actualizable.

Insertando una Fila a través de una Vista:

Puedes usar INSERT INTO para añadir una fila a través de una vista, siempre que la vista sea actualizable y la operación cumpla con las restricciones de las tablas base.

Ejemplo: Insertar una nueva fila en la vista DetailsView (que se basa en una sola tabla y es actualizable).

INSERT INTO DetailsView(NAME, ADDRESS)
VALUES('Suresh','Gurgaon');

Al consultar DetailsView ahora:

SELECT * FROM DetailsView;

El resultado mostraría:

NAME | ADDRESS
--------|---------
Harsh | Kolkata
Ashish | Durgapur
Pratik | Delhi
Dhanraj | Bihar
Suresh | Gurgaon -- Nueva fila

Esta inserción también se ha reflejado en la tabla base StudentDetails.

Eliminando una Fila a través de una Vista:

Para eliminar filas a través de una vista, usa la sentencia DELETE.

Ejemplo: Eliminar la fila que acabamos de insertar a través de DetailsView.

DELETE FROM DetailsView
WHERE NAME='Suresh';

Consultando DetailsView nuevamente:

SELECT * FROM DetailsView;

El resultado volvería a ser:

NAME | ADDRESS
--------|---------
Harsh | Kolkata
Ashish | Durgapur
Pratik | Delhi
Dhanraj | Bihar

Esta eliminación también se ha reflejado en la tabla base StudentDetails.

Condiciones para que una Vista sea Actualizable:

No todas las vistas permiten operaciones de INSERT, UPDATE o DELETE. Existen ciertas condiciones que deben cumplirse para que una vista sea actualizable. Si alguna de estas condiciones no se satisface, la vista generalmente no podrá ser modificada directamente:

  • La sentencia SELECT que define la vista no debe incluir cláusulas como GROUP BY, HAVING u ORDER BY.
  • La sentencia SELECT no debe contener la palabra clave DISTINCT.
  • La vista debe contener todas las columnas que son obligatorias (NOT NULL) en la tabla base y no tienen un valor por defecto.
  • La vista no debe ser creada utilizando subconsultas anidadas o consultas excesivamente complejas que involucren operaciones que no puedan mapearse directamente a una única fila en la tabla base.
  • Idealmente, la vista debe basarse en una única tabla. Si la vista se crea utilizando múltiples tablas (por ejemplo, con uniones), generalmente no se permitirá actualizarla, aunque algunos SGBD tienen reglas específicas y limitadas para la actualización de vistas con uniones.
  • La lista de selección no debe contener funciones agregadas (como SUM(), AVG(), COUNT()), ni expresiones, ni columnas calculadas.

Técnicas Avanzadas con Vistas: La Cláusula WITH CHECK OPTION

La cláusula WITH CHECK OPTION es una herramienta muy útil cuando se trabaja con vistas actualizables. Se aplica a una vista que puede ser modificada y se utiliza para prevenir modificaciones de datos (mediante INSERT o UPDATE) si la fila resultante no satisface la condición especificada en la cláusula WHERE de la definición de la vista.

Si una operación de UPDATE o INSERT a través de una vista con WITH CHECK OPTION resulta en una fila que no cumpliría la condición WHERE de la vista, la operación fallará y se devolverá un error. Esto asegura que todos los datos modificados a través de la vista permanezcan visibles en la vista.

Ejemplo: Crearemos una vista llamada SampleView a partir de la tabla StudentDetails, seleccionando solo el ID y el Nombre, y asegurándonos de que el Nombre no sea nulo, utilizando la cláusula WITH CHECK OPTION.

CREATE VIEW SampleView AS
SELECT S_ID, NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;

En esta vista, si intentamos insertar una nueva fila donde el nombre sea nulo, aunque la operación pueda ser válida en la tabla base subyacente (si la columna NAME permite nulos), fallará a través de la vista debido a la cláusula WITH CHECK OPTION.

Ejemplo de inserción no válida:

INSERT INTO SampleView(S_ID)
VALUES(6); -- Esto daría un error si NAME no tiene un valor por defecto no nulo y es NOT NULL en la vista.

Incluso si la vista es actualizable, esta operación específica no es válida porque intenta insertar una fila que no cumpliría la condición WHERE NAME IS NOT NULL de la vista.

Usos y Beneficios de las Vistas SQL

Una buena arquitectura de base de datos a menudo incluye el uso de vistas por diversas razones clave:

  • Restringir el Acceso a Datos: Las vistas proporcionan una capa adicional de seguridad al permitir restringir el acceso de los usuarios solo a un subconjunto predeterminado de filas y columnas de una tabla.
  • Ocultar la Complejidad de los Datos: Una vista puede abstraer la complejidad inherente a consultas que involucran múltiples tablas unidas, presentando los datos de una manera simplificada.
  • Simplificar Comandos para el Usuario: Permiten a los usuarios seleccionar información de múltiples tablas sin necesidad de que sepan cómo realizar uniones complejas; simplemente consultan la vista.
  • Almacenar Consultas Complejas: Las definiciones de vistas pueden almacenar consultas complejas que de otro modo tendrían que ser reescritas repetidamente.
  • Renombrar Columnas: Las vistas se pueden usar para renombrar columnas sin afectar los nombres de las columnas en las tablas base, siempre que el número y tipo de columnas coincidan. Esto ayuda a ocultar la estructura interna de las tablas base.
  • Facilidad para Múltiples Vistas: Se pueden crear diferentes vistas sobre la misma tabla o conjunto de tablas para satisfacer las necesidades específicas de diferentes usuarios o aplicaciones.

Tabla Comparativa: Vistas vs. Tablas Base

Para entender mejor el rol de las vistas, es útil compararlas directamente con las tablas base.

CaracterísticaTabla BaseVista (Virtual)
Almacenamiento de DatosAlmacena datos físicos en el disco.No almacena datos físicos; es una definición de consulta.
Origen de DatosEs la fuente primaria de datos.Deriva datos de una o más tablas base (o incluso otras vistas).
CreaciónSe crea con CREATE TABLE. Define la estructura física de los datos.Se crea con CREATE VIEW. Define una consulta SELECT guardada.
Modificación de DatosDirecta (INSERT, UPDATE, DELETE).Posible solo en vistas actualizables; las modificaciones afectan a las tablas base subyacentes.
ComplejidadRepresenta la estructura de datos subyacente.Puede simplificar la vista de datos complejos (uniones, filtros).
SeguridadSe aplican permisos directos sobre la tabla.Permite aplicar permisos sobre un subconjunto de datos, restringiendo el acceso a columnas/filas.
Espacio en DiscoRequiere espacio para almacenar los datos.Requiere espacio mínimo solo para almacenar la definición de la vista.

Preguntas Frecuentes sobre Vistas SQL

Aquí respondemos algunas preguntas comunes sobre el uso de vistas en bases de datos.

¿Una vista almacena datos?

No, una vista no almacena datos. Es una tabla virtual basada en la consulta que la define. Los datos se obtienen de las tablas base cada vez que se consulta la vista.

¿Puedo actualizar datos a través de una vista?

Sí, algunas vistas son actualizables, permitiendo operaciones de INSERT, UPDATE y DELETE que se reflejan en las tablas base subyacentes. Sin embargo, esto solo es posible si la vista cumple ciertas condiciones (generalmente, basadas en una sola tabla, sin agregaciones, etc.).

¿Por qué usar vistas en lugar de simplemente ejecutar la consulta cada vez?

Las vistas ofrecen ventajas en seguridad (restringiendo acceso), simplicidad (ocultando complejidad de uniones y filtros), reutilización (la consulta compleja se define una vez) y consistencia (todos los usuarios consultan los mismos datos de la misma manera).

¿Qué es la cláusula WITH CHECK OPTION?

Es una cláusula que se usa al crear una vista actualizable para asegurar que cualquier fila insertada o actualizada a través de la vista cumpla con la condición WHERE de la vista. Evita que se modifiquen datos de tal manera que la fila resultante ya no sea visible a través de la vista.

¿Las vistas mejoran el rendimiento de las consultas?

Generalmente, las vistas por sí solas no mejoran el rendimiento. Una consulta a una vista es equivalente a ejecutar la consulta SELECT subyacente. En algunos casos, el optimizador de consultas del SGBD puede manejar las vistas de manera eficiente, pero no son una solución mágica para el rendimiento.

Conclusión

Las vistas en SQL son una característica poderosa y versátil para trabajar con bases de datos. Proporcionan una solución eficiente para simplificar consultas complejas, mejorar la seguridad al restringir el acceso a los datos y presentar la información en un formato más accesible y comprensible. Dominar la creación, gestión y actualización de vistas es fundamental para mejorar la mantenibilidad, la seguridad y, en muchos casos, la usabilidad de nuestros sistemas de bases de datos.

Aunque no todas las vistas son actualizables, su valor como herramienta para la abstracción y la seguridad de los datos es innegable. Al entender y utilizar vistas de manera efectiva, podemos optimizar significativamente la forma en que interactuamos y gestionamos la información almacenada en nuestras bases de datos.

Si quieres conocer otros artículos parecidos a Vistas en Bases de Datos: Qué Son y Cómo Usarlas puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir