Ver (SQL) - View (SQL)

En una base de datos , una vista es el conjunto de resultados de una consulta almacenada sobre los datos , que los usuarios de la base de datos pueden consultar tal como lo harían en un objeto de colección de base de datos persistente. Este comando de consulta preestablecido se guarda en el diccionario de la base de datos. A diferencia de las tablas base ordinarias en una base de datos relacional , una vista no forma parte del esquema físico : como conjunto de resultados, es una tabla virtual calculada o recopilada dinámicamente a partir de los datos de la base de datos cuando se solicita el acceso a esa vista. Los cambios aplicados a los datos en una tabla subyacente relevante se reflejan en los datos que se muestran en las invocaciones posteriores de la vista. En algunas bases de datos NoSQL , las vistas son la única forma de consultar datos.

Las vistas pueden ofrecer ventajas sobre las tablas:

  • Las vistas pueden representar un subconjunto de los datos contenidos en una tabla. En consecuencia, una vista puede limitar el grado de exposición de las tablas subyacentes al mundo exterior: un usuario determinado puede tener permiso para consultar la vista, mientras se le niega el acceso al resto de la tabla base.
  • Las vistas pueden unir y simplificar varias tablas en una sola tabla virtual.
  • Las vistas pueden actuar como tablas agregadas, donde el motor de la base de datos agrega datos ( suma , promedio , etc.) y presenta los resultados calculados como parte de los datos.
  • Las vistas pueden ocultar la complejidad de los datos. Por ejemplo, un punto de vista podría aparecer como Sales2000 o Sales2001, de forma transparente la partición de la tabla subyacente real.
  • Las vistas ocupan muy poco espacio para almacenar; la base de datos contiene solo la definición de una vista, no una copia de todos los datos que presenta.
  • Dependiendo del motor SQL utilizado, las vistas pueden proporcionar seguridad adicional.

Así como una función (en programación) puede proporcionar abstracción , también puede hacerlo una vista de base de datos. En otro paralelo con las funciones, los usuarios de la base de datos pueden manipular vistas anidadas, por lo que una vista puede agregar datos de otras vistas. Sin el uso de vistas, la normalización de las bases de datos por encima de la segunda forma normal se volvería mucho más difícil. Las vistas pueden facilitar la creación de descomposición de uniones sin pérdidas.

Así como las filas de una tabla base carecen de un orden definido, las filas disponibles a través de una vista no aparecen con ninguna clasificación predeterminada. Una vista es una tabla relacional y el modelo relacional define una tabla como un conjunto de filas. Dado que los conjuntos no están ordenados, por definición, tampoco las filas de una vista. Por lo tanto, una cláusula ORDER BY en la definición de vista no tiene sentido; el estándar SQL ( SQL: 2003 ) no permite una cláusula ORDER BY en la subconsulta de un comando CREATE VIEW, tal como se rechaza en una instrucción CREATE TABLE. Sin embargo, los datos ordenados se pueden obtener de una vista, de la misma manera que cualquier otra tabla, como parte de una declaración de consulta en esa vista. Sin embargo, algunos DBMS (como Oracle Database ) no cumplen con esta restricción estándar de SQL.

Vistas de solo lectura frente a vistas actualizables

Los profesionales de bases de datos pueden definir vistas como de solo lectura o actualizables. Si el sistema de la base de datos puede determinar el mapeo inverso del esquema de vista al esquema de las tablas base subyacentes, entonces la vista es actualizable. Las operaciones INSERT , UPDATE y DELETE se pueden realizar en vistas actualizables. Las vistas de solo lectura no admiten este tipo de operaciones porque el DBMS no puede asignar los cambios a las tablas base subyacentes. La actualización de la vista se realiza mediante la conservación de claves.

Algunos sistemas admiten la definición de desencadenantes INSTEAD OF en vistas. Esta técnica permite la definición de otra lógica para la ejecución en lugar de una operación de inserción, actualización o eliminación en las vistas. Por lo tanto, los sistemas de bases de datos pueden implementar modificaciones de datos basadas en vistas de solo lectura. Sin embargo, un desencadenador INSTEAD OF no cambia la propiedad de solo lectura o actualizable de la vista en sí.

Vistas materializadas

Varios sistemas de administración de bases de datos han ampliado las vistas de subconjuntos de datos de solo lectura , en particular vistas materializadas : vistas no virtuales ejecutadas previamente y que se utilizan comúnmente en el almacenamiento de datos . Proporcionan una instantánea estática de los datos y pueden incluir datos de fuentes remotas. La precisión de una vista materializada depende de la frecuencia de los mecanismos de activación detrás de sus actualizaciones.

Las vistas materializadas fueron introducidas por Oracle Database , mientras que IBM DB2 proporciona las llamadas "tablas de consultas materializadas" (MQT) para el mismo propósito. Microsoft SQL Server introdujo en su versión 2000 vistas indexadas que solo almacenan un índice separado de la tabla, pero no todos los datos. PostgreSQL implementó vistas materializadas en su versión 9.3.

Equivalencia

Una vista es equivalente a su consulta de origen. Cuando las consultas se ejecutan en vistas, la consulta se modifica. Por ejemplo, si existe una vista llamada accounts_view con el contenido de la siguiente manera:

-- accounts_view:
-------------
SELECT name,
       money_received,
       money_sent,
       (money_received - money_sent) AS balance,
       address,
	   ...
  FROM table_customers c 
  JOIN accounts_table a 
    ON a.customer_id = c.customer_id

entonces la aplicación podría ejecutar una consulta simple como:

-- Simple query
------------
SELECT name,
       balance
  FROM accounts_view

Luego, el RDBMS toma la consulta simple, reemplaza la vista equivalente y luego envía lo siguiente al optimizador de consultas :

-- Preprocessed query:
------------------
SELECT name,
       balance
  FROM (SELECT name,
               money_received,
               money_sent,
               (money_received - money_sent) AS balance,
               address,
			    ...
          FROM table_customers c JOIN accounts_table a
               ON a.customer_id = c.customer_id        )

Luego, el optimizador elimina los campos innecesarios y la complejidad (por ejemplo: no es necesario leer la dirección, ya que la invocación principal no la utiliza) y luego envía la consulta al motor SQL para su procesamiento.

Ver también

enlaces externos