Creación de vistas
Las vistas simplifican el acceso y la presentación de datos en SQL Server. Como desarrollador de SQL, creará vistas para encapsular consultas complejas, proporcionar límites de seguridad y presentar datos en un formato que coincida con las necesidades de la aplicación.
Comprender las vistas en SQL Server
Una vista es una tabla virtual basada en una SELECT declaración. A diferencia de las tablas físicas, las vistas no almacenan los datos por sí mismos. En su lugar, recuperan datos de tablas subyacentes cada vez que los consulta.
Con vistas, puede ocultar la complejidad de las cláusulas JOIN, los cálculos y los filtros del código de aplicación. Por ejemplo, si la aplicación necesita con frecuencia pedidos de clientes con detalles del producto, puede crear una vista que use JOIN en las tablas Clientes, Pedidos y Productos. A continuación, la aplicación consulta una sola vista en lugar de escribir repetidamente el mismo complejo JOIN .
Las vistas también proporcionan una capa de seguridad. Puede conceder a los usuarios acceso a columnas específicas a través de una vista al restringir el acceso a las tablas subyacentes. Este enfoque le permite exponer solo los datos que los usuarios necesitan sin concederles acceso completo a la tabla.
Creación de una vista básica
Crea una vista usando la instrucción CREATE VIEW seguida de una consulta SELECT. La definición de vista determina qué datos aparecen al consultar la vista.
Esta es una vista sencilla que combina la información del cliente y del pedido:
CREATE VIEW Sales.CustomerOrders
AS
SELECT
c.CustomerID,
c.CustomerName,
c.Email,
o.OrderID,
o.OrderDate,
o.TotalAmount
FROM Sales.Customers c
INNER JOIN Sales.Orders o ON c.CustomerID = o.CustomerID;
Después de crear esta vista, puede consultarla como cualquier tabla:
SELECT * FROM Sales.CustomerOrders
WHERE CustomerName = 'Contoso Ltd';
La vista ejecuta la instrucción SELECT subyacente y devuelve resultados como si vinieran de una sola tabla. Esta simplificación hace que el código de la aplicación sea más limpio y fácil de mantener.
También puede crear vistas con columnas calculadas. En la vista siguiente se agrega una columna que clasifica los pedidos por tamaño:
CREATE VIEW Sales.OrderSummary
AS
SELECT
OrderID,
CustomerID,
OrderDate,
TotalAmount,
CASE
WHEN TotalAmount < 100 THEN 'Small'
WHEN TotalAmount < 1000 THEN 'Medium'
ELSE 'Large'
END AS OrderSize
FROM Sales.Orders;
Esta vista controla la lógica de categorización en un solo lugar. Cada consulta en OrderSummary obtiene el mismo cálculo sin duplicar la CASE expresión.
Aplicar consideraciones de diseño
Al diseñar vistas, tenga en cuenta cómo se usarán y mantendrán. Las vistas bien diseñadas equilibran la simplicidad, el rendimiento y la seguridad.
Especifique los nombres de columna explícitamente en lugar de usar SELECT *. Las columnas explícitas hacen que las vistas sean más fáciles de mantener y eviten resultados inesperados cuando cambian las tablas subyacentes. Si alguien agrega una columna a una tabla base, la definición de la vista sigue siendo coherente:
CREATE VIEW Sales.ActiveCustomers
AS
SELECT
CustomerID,
CustomerName,
Email,
Phone
FROM Sales.Customers
WHERE IsActive = 1;
Usa la WITH CHECK OPTION cláusula cuando las vistas controlen las modificaciones de datos. Esta opción garantiza que las instrucciones INSERT y UPDATE a través de la vista solo afecten a las filas visibles en la vista:
CREATE VIEW Sales.HighValueOrders
AS
SELECT
OrderID,
CustomerID,
OrderDate,
TotalAmount
FROM Sales.Orders
WHERE TotalAmount > 1000
WITH CHECK OPTION;
Con esta opción, no se puede insertar un pedido con TotalAmount de 500 a través de la vista HighValueOrders. La base de datos rechaza la operación porque la nueva fila no cumpliría la condición WHERE de la vista.
Mantenga las definiciones de vista enfocadas en un propósito concreto. Una vista que intenta servir a varios propósitos a menudo resulta ser difícil de optimizar y de comprender. Cree vistas independientes para distintos casos de uso en lugar de crear una vista compleja.
Determinar cuándo usar vistas
Las vistas se destacan en escenarios específicos en los que sus características proporcionan ventajas claras. Comprender estos escenarios le ayuda a elegir la herramienta adecuada para cada situación.
Use vistas para simplificar las consultas complejas que necesitan ejecutar varias aplicaciones o usuarios. En lugar de requerir que todos comprendan la complejidad de unir cinco tablas con condiciones específicas, cree una vista una vez. Esta centralización también significa que puede optimizar o modificar la lógica en un solo lugar.
Tenga en cuenta las vistas cuando necesite restringir el acceso a los datos en el nivel de columna o fila. Una vista puede exponer únicamente las columnas adecuadas para un rol, ocultando información confidencial. Junto con los permisos adecuados, las vistas permiten conceder acceso a datos específicos sin exponer tablas completas.
Las vistas funcionan bien para presentar datos en diferentes formatos con diferentes propósitos. Es posible que tenga una tabla Products con detalles técnicos, pero el equipo de informes necesita una versión simplificada con campos calculados. Cree una vista que transforme y agregue los datos correctamente.
Al mismo tiempo, reconozca cuándo otros objetos sirven mejor. Para las consultas críticas para el rendimiento que siempre devuelven los mismos resultados, las vistas indizadas (vistas materializadas) almacenan el conjunto de resultados físicamente. Para cálculos complejos que aceptan parámetros, las funciones definidas por el usuario proporcionan más flexibilidad. Para la lógica de modificación de datos, los procedimientos almacenados ofrecen un mejor control.
Cuando necesite encapsular la lógica de consulta reutilizable sin parámetros y quiera presentar datos de forma simplificada, las vistas son la solución. Puenten la brecha entre la estructura de la base de datos física y la vista lógica de los datos que necesitan las aplicaciones.