Está en la página 1de 42

Módulo 8:

Implementación
de vistas
Contenido

Introducción 1
Introducción a las vistas 2
Ventajas de las vistas 3
Definición de vistas 5
Modificación de datos mediante vistas 16
Optimización del rendimiento
mediante vistas 17
Procedimientos recomendados 23
Práctica A: Implementación de vistas 25
Repaso 34
La información contenida en este documento está sujeta a modificaciones sin previo aviso. A
menos que se indique lo contrario, los nombres de las compañías, productos, personas, personajes
y datos mencionados son ficticios, y no representan de ningún modo a ninguna persona, compañía,
producto o acontecimiento reales. Es responsabilidad del usuario el cumplimiento de todas las
leyes de derechos de autor aplicables. Ninguna parte de este documento puede ser reproducida o
transmitida de ninguna forma, ni por ningún medio, ya sea electrónico o mecánico, con ningún
propósito, sin la previa autorización por escrito de Microsoft Corporation. Sin embargo, si su único
medio de acceso es electrónico, se le concede permiso para imprimir una copia.

Microsoft puede ser titular de patentes, solicitudes de patentes, marcas, derechos de autor y otros
derechos de propiedad intelectual sobre el contenido de este documento. El suministro de este
documento no le otorga ninguna licencia sobre estas patentes, marcas, derechos de autor, u otros
derechos de propiedad intelectual, a menos que ello se prevea en un contrato por escrito de licencia
de Microsoft.

 2000 Microsoft Corporation. Reservados todos los derechos.

Microsoft, ActiveX, BackOffice, MS-DOS, PowerPoint, Visual Basic, Visual C++, Visual Studio,
Windows y Windows NT son marcas comerciales registradas o marcas comerciales de Microsoft
Corporation en los Estados Unidos o en otros países.

Otros nombres de productos y compañías mencionados aquí pueden ser marcas comerciales de sus
respectivos propietarios.

Jefe de proyecto: Rich Rose


Diseñadores de instrucciones: Rich Rose, Cheryl Hoople, Marilyn McGill
Ingenieros de diseño de software de instrucciones: Karl Dehmer, Carl Raebler,
Rick Byham
Dirección técnica: Karl Dehmer
Expertos en la materia: Karl Dehmer, Carl Raebler, Rick Byham
Artista gráfico: Kirsten Larson (Consultora independiente)
Directora de edición: Lynette Skinner
Editor: Wendy Cleary
Editor de copias: Edward McKillop (S&T Consulting)
Director de producción: Miracle Davis
Coordinadora de producción: Jenny Boe
Soporte de producción: Lori Walker (S&T Consulting)
Jefe de pruebas: Sid Benavente
Prueba de los materiales del curso: TestingTesting123
Automatización del aula: Lorrin Smith-Bates
Director creativo, servicios Media/Sim: David Mahlmann
Dirección de desarrollo de Web: Lisa Pease
Especialista en creación de CD: Julie Challenger
Soporte en línea: David Myka (S&T Consulting)
Director de localización: Rick Terek
Coordinador de operaciones: John Williams
Soporte de fabricación: Laura King, Kathy Hershey
Director principal del producto, Administración de publicación: Bo Galford
Director principal del producto, Base de datos: Margo Crandall
Jefe de grupo, Infraestructura del curso: David Bramble
Jefe de grupo del producto, Desarrollo de contenido: Dean Murray
Director general: Robert Stewart
Módulo 8: Implementación de vistas iii

Notas para el instructor


Presentación: Este módulo proporciona a los alumnos la información que necesitan para crear
45 minutos y utilizar vistas. Las vistas ofrecen la posibilidad de almacenar una consulta
predefinida como un objeto en la base de datos para usarse posteriormente.
Práctica: Proporcionan un método adecuado para ocultar los datos confidenciales o la
30 minutos complejidad del diseño de las bases de datos, y para facilitar información sin
que el usuario tenga que escribir o ejecutar instrucciones de Transact-SQL.
El módulo define las vistas y sus ventajas. A continuación, describe cómo
crear vistas y proporciona ejemplos de proyecciones y combinaciones.
Estos ejemplos ilustran el modo de incluir columnas calculadas y funciones
integradas en las definiciones de vistas. A continuación, el módulo cubre las
restricciones en la modificación de datos mediante vistas. La última sección
explica cómo las vistas pueden mejorar el rendimiento.
En la práctica los alumnos crearán y probarán vistas, incluidas las vistas con
definiciones cifradas. Los alumnos también realizarán cambios en las tablas de
origen mediante una vista y examinarán definiciones de vistas.
Después de completar este módulo, los alumnos serán capaces de:
 Describir el concepto de vista.
 Enumerar las ventajas de las vistas.
 Definir una vista con la instrucción CREATE VIEW.
 Modificar datos mediante vistas.
 Optimizar el rendimiento mediante vistas.

Material y preparación
Esta sección proporciona el material y las tareas de preparación que se
necesitan para impartir este módulo.

Material necesario
Para impartir este módulo, necesitará el material siguiente:
 El archivo 2329A_08.ppt de Microsoft® PowerPoint®
 El archivo de ejemplo C:\Moc\2329A\Demo\D08_Ex.sql, que contiene
todas las secuencias de comandos de ejemplo del módulo, excepto cuando
se indique lo contrario.

Tareas de preparación
Para preparar este módulo, deberá:
 Leer todo el material del mismo.
 Completar la práctica.
iv Módulo 8: Implementación de vistas

Desarrollo del módulo


Para presentar este módulo utilice la estrategia siguiente:
 Introducción a las vistas
Presente el concepto de vista. Mencione que las vistas son, sencillamente,
consultas almacenadas.
 Ventajas de las vistas
Enumere las ventajas de utilizar vistas.
 Definición de vistas
Explique la forma en que los usuarios pueden crear, alterar y quitar vistas,
y exponga las restricciones e instrucciones que deben tener en cuenta.
Describa cómo pueden cifrar la definición de las vistas. Enumere las tablas
del sistema que contienen la información de definición de las vistas.
 Modificación de datos mediante vistas
Describa cómo modificar los datos mediante vistas e indique las
consideraciones y restricciones que se deben tener presentes.
 Optimización del rendimiento mediante vistas
Describa cómo las vistas permiten optimizar el rendimiento al almacenar los
resultados de consultas complejas y dividir los datos.
Módulo 8: Implementación de vistas v

Información de personalización
En esta sección se identifican los requisitos de instalación de las prácticas para
un módulo y los cambios de configuración que ocurren en los equipos de los
alumnos durante estas prácticas. Esta información pretende ayudarle a replicar o
personalizar el material del curso de Microsoft Official Curriculum (MOC).

Importante La práctica de este módulo también depende de la configuración


del aula especificada en la sección Información de personalización que se
encuentra al final de la Guía de configuración del aula para el curso 2329A,
Programación de una base de datos Microsoft SQL Server 2000.

Preparación de la práctica
En la sección siguiente se describen los requisitos de instalación para la práctica
de este módulo.

Requisito de instalación
La práctica de este módulo requiere que la base de datos Credit se encuentre
en un estado concreto. Para preparar los equipos de los alumnos de manera
que cumplan este requisito, realice una las siguientes acciones:
 Complete la práctica anterior.
 Ejecute el archivo por lotes C:\Moc\2329A\Batches\Restore08.cmd.

Advertencia Si este curso se ha personalizado, los alumnos deberán ejecutar el


archivo por lotes C:\Moc\2329A\Batches\Restore08.cmd para asegurarse de que
la práctica funciona adecuadamente.

Resultados de las prácticas


No hay cambios de configuración en los equipos de los alumnos que afecten a
la replicación o personalización.
Módulo 8: Implementación de vistas 1

Introducción
Objetivo del tema
Proporcionar una introduc-
ción a los temas y objetivos
del módulo.  Introducción a las vistas
Explicación previa  Ventajas de las vistas
En este módulo aprenderá
a crear, utilizar y mantener  Definición de vistas
vistas de datos.
 Modificación de datos mediante vistas
 Optimización del rendimiento mediante vistas

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Este módulo define las vistas y sus ventajas. A continuación, describe
cómo crear vistas y proporciona ejemplos de proyecciones y combinaciones.
Estos ejemplos ilustran el modo de incluir columnas calculadas y funciones
integradas en las definiciones de vistas. A continuación, el módulo cubre las
restricciones en la modificación de datos mediante vistas. La última sección
explica cómo las vistas pueden mejorar el rendimiento.
Después de completar este módulo, el alumno será capaz de:
 Describir el concepto de vista.
 Enumerar las ventajas de las vistas.
 Definir una vista con la instrucción CREATE VIEW.
 Modificar datos mediante vistas.
 Optimizar el rendimiento mediante vistas.
2 Módulo 8: Implementación de vistas

Introducción a las vistas


Objetivo del tema
Presentar el concepto de Employees
Employees
vista y exponer un ejemplo. EmployeeID
EmployeeID LastName
LastName Firstname
Firstname Title
Title
Explicación previa 11 Davolio
Davolio Nancy
Nancy ~~~
~~~
22 Fuller
Fuller Andrew
Andrew ~~~
~~~
Una vista es un modo
33 Leverling
Leverling Janet
Janet ~~~
~~~
alternativo de ver los datos
de una o varias tablas. USE
USE Northwind
Northwind
GO
GO
CREATE
CREATE VIEW
VIEW dbo.EmployeeView
dbo.EmployeeView
AS
AS
SELECT
SELECT LastName, Firstname
LastName, Firstname
FROM
FROM Employees
Employees

EmployeeView
EmployeeView
Lastname
Lastname Firstname
Firstname
Davolio
Davolio Nancy
Nancy Vista del usuario
Fuller
Fuller Andrew
Andrew
Leverling
Leverling Janet
Janet

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Una vista ofrece la posibilidad de almacenar una consulta predefinida como un
Sugerencia objeto en una base de datos para usarse posteriormente. Las tablas consultadas
Hasta este punto del curso,
hemos escrito consultas
en una vista se denominan tablas base. Salvo algunas excepciones, es posible
“ad hoc”. Con las vistas dar nombre a cualquier instrucción SELECT y almacenarla como una vista.
comenzaremos la expli- Algunos ejemplos habituales de vistas son los siguientes:
cación de la forma en que
las consultas se almacenan
 Un subconjunto de las filas o columnas de una tabla base.
como objetos (vistas, proce-  Una unión de dos o más tablas base.
dimientos almacenados y
desencadenadores) en la  Una combinación de dos o más tablas base.
base de datos.  Un resumen estadístico de una tabla base.
 Un subconjunto de otra vista o alguna combinación de vistas y tablas base.

Ejemplo En este ejemplo se crea la vista dbo.EmployeeView en la base de datos


Northwind. La vista muestra dos columnas de la tabla Employees.
USE Northwind
GO
CREATE VIEW dbo.EmployeeView
AS
SELECT LastName, Firstname
FROM employees

Consulta SELECT * from EmployeeView

Resultado Lastname FirstName


Davolio Nancy
Fuller Andrew
Leverling Janet
.
.
.
(9 filas afectadas)
Módulo 8: Implementación de vistas 3

Ventajas de las vistas


Objetivo del tema
Explicar por qué puede ser
conveniente crear o utilizar  Centrar el interés en los datos de los usuarios
vistas.  Centrarse sólo en los datos importantes o adecuados
Explicación previa  Limitar el acceso a los datos confidenciales
Las vistas ofrecen diversas
ventajas.  Enmascarar la complejidad de la base de datos
 Ocultar el diseño de la base de datos compleja
 Simplificar las consultas complejas, incluyendo las consultas
distribuidas a datos heterogéneos
 Simplificar la administración de los permisos de usuario
 Mejorar el rendimiento
 Organizar los datos para exportarse a otras aplicaciones

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL******
Las vistas ofrecen diversas ventajas, como la capacidad de centrar el interés
en los datos de los usuarios, enmascarar su complejidad, simplificar la
administración de los permisos y organizar los datos para exportarlos a otras
aplicaciones.

Centrar el interés en los datos de los usuarios


Las vistas crean un entorno controlado que permite el acceso a datos
específicos mientras se oculta el resto. Los datos innecesarios, confidenciales
o inadecuados pueden quedar fuera de la vista. Los usuarios pueden tratar la
presentación de los datos en una vista de forma similar a como lo hacen en una
tabla. Además, con los permisos adecuados y algunas restricciones, también
pueden modificar los datos que muestra la vista.

Sugerencia Enmascarar la complejidad de la base de datos


Señale que las vistas de Las vistas ocultan al usuario la complejidad del diseño de la base de datos.
esquema de información De este modo, los programadores pueden cambiar el diseño sin afectar a la
permiten a SQL Server interacción entre el usuario y la base de datos. Además, el usuario verá una
presentar los datos del versión más descriptiva de los datos, con nombres más fáciles de comprender
sistema de modo coherente,
que los términos crípticos que a menudo se utilizan en las bases de datos.
incluso cuando las tablas
del sistema han sufrido Las consultas complejas, como las consultas distribuidas de datos heterogéneos,
cambios significativos. también pueden enmascararse con vistas. De este modo el usuario consulta la
vista, en lugar de escribir la consulta o ejecutar una secuencia de comandos.

Simplificar la administración de los permisos de usuario


En lugar de conceder a los usuarios permisos para consultar columnas
específicas de las tablas base, los propietarios de las bases de datos pueden
conceder permisos para que el usuario sólo pueda consultar los datos a través
de vistas. Además, de esta forma se protegen los cambios en el diseño de las
tablas base subyacentes. Los usuarios pueden continuar consultando la vista sin
interrupciones.
4 Módulo 8: Implementación de vistas

Mejorar el rendimiento
Las vistas le permiten almacenar los resultados de consultas complejas.
Otras consultas pueden utilizar estos resultados resumidos. Las vistas también
permiten dividir datos. Es posible colocar divisiones individuales en equipos
distintos.

Organizar los datos para exportarse a otras aplicaciones


Puede crear una vista basada en una consulta compleja que combine dos o más
tablas y, a continuación, exportar los datos a otra aplicación para analizarlos.
Módulo 8: Implementación de vistas 5

 Definición de vistas
Objetivo del tema
Presentar una sección
acerca del trabajo con las
vistas.  Creación de vistas
Explicación previa  Ejemplo: Vista de tablas combinadas
Esta sección describe
cómo crear, modificar y  Modificación y eliminación de vistas
quitar vistas.
 Evitar la interrupción de las cadenas de pertenencia
 Ubicación de la información de definición de vistas
 Ocultación de la definición de las vistas

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Esta sección describe cómo crear, modificar y quitar vistas. También
explica cómo evitar la interrupción de las cadenas de pertenencia, ocultar
las definiciones de las vistas y obtener información acerca de las vistas de
una base de datos.
6 Módulo 8: Implementación de vistas

Creación de vistas
Objetivo del tema
Explicar cómo crear y
quitar vistas.  Creación de una vista
Explicación previa
Ahora que hemos definido CREATE
CREATE VIEW
VIEW dbo.OrderSubtotalsView
dbo.OrderSubtotalsView (OrderID,
(OrderID, Subtotal)
Subtotal)
AS
AS
las vistas, explicaremos SELECT OD.OrderID,
SELECT OD.OrderID,
cómo crear una. SUM(CONVERT(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100)
SUM(CONVERT(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100)
FROM
FROM [Order
[Order Details]
Details] OD
OD
GROUP
GROUP BY
BY OD.OrderID
OD.OrderID
GO
GO

 Restricciones en las definiciones de vistas


 No se puede incluir la cláusula ORDER BY
 No se puede incluir la palabra clave INTO

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Puede crear vistas con el Asistente para creación de vistas, con el
Administrador corporativo de SQL Server o con Transact-SQL.
Las vistas sólo se pueden crear en la base de datos actual.

Creación de una vista


Al crear una vista, Microsoft® SQL Server™ versión 2000 comprueba la
Sugerencia existencia de los objetos a los que se hace referencia en su definición.
Recomiende a los alumnos
que establezcan una
El nombre de la vista debe ajustarse a las normas para los identificadores.
convención de denomi- Opcionalmente, es posible especificar un nombre de propietario para la vista.
nación coherente para Debe establecer una convención de denominación coherente para distinguir las
distinguir las vistas de las vistas de las tablas. Por ejemplo, puede agregar la palabra “vista” como sufijo
tablas y que especifiquen de cada objeto vista que cree. De este modo podrá distinguir fácilmente entre
dbo como nombre del objetos similares (tablas y vistas) al consultar la vista
propietario. INFORMATION_SCHEMA.TABLES.
Sintaxis CREATE VIEW propietario.nombreVista [(columna [,n ])]
[WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} [,n ]]
AS
instrucciónSelect
[WITH CHECK OPTION]
Para poder ejecutar la instrucción CREATE VIEW es necesario ser miembro de
Sugerencia la función de administradores del sistema (sysadmin), de la función propietario
Es posible tener permiso
para crear una vista y no
de la base de datos (db_owner) o de la función administrador de lenguaje de
tener permiso de acceso a definición de datos (db_ddladmin), o bien tener el permiso CREATE VIEW.
las tablas subyacentes. También es necesario tener el permiso SELECT en todas las tablas o vistas a las
Sin embargo, una vista que la vista haga referencia.
creada en estas condiciones
no devolverá ningún Para evitar situaciones en las que el propietario de una vista y el propietario
conjunto de resultados. de las tablas subyacentes sean distintos, se recomienda que el usuario dbo
(propietario de base de datos) sea el propietario de todos los objetos de la base
de datos. Especifique siempre el usuario dbo como propietario al crear el objeto
pues, de lo contrario, usted, es decir, su nombre de usuario, será el propietario.
Módulo 8: Implementación de vistas 7

El contenido de una vista se especifica con una instrucción SELECT. Con


algunas excepciones, las vistas pueden ser tan complejas como se requiera.
Debe especificar los nombres de columna en las situaciones siguientes:
 Alguna de las columnas de la vista se deriva de una expresión aritmética, de
Sugerencia una función integrada o de una constante.
Los nombres de columna
pueden especificarse de  Hay columnas con el mismo nombre en las tablas que se van a combinar.
dos maneras: en la
instrucción SELECT con
alias de columnas o en la Importante Al crear vistas, es importante probar la instrucción SELECT que
instrucción CREATE VIEW. las define para asegurarse de que SQL Server devuelve el conjunto de
resultados esperado. Una vez escrita y probada la instrucción SELECT, y
habiendo comprobado sus resultados, puede crear la vista.

Restricciones en las definiciones de vistas


Al crear vistas, tenga presentes las restricciones siguientes:
 La instrucción CREATE VIEW no puede incluir las cláusulas COMPUTE o
COMPUTE BY. La instrucción CREATE VIEW no puede incluir la palabra
clave INTO.
 La instrucción CREATE VIEW puede incluir la cláusula ORDER BY, sólo
si se utiliza la palabra clave TOP.
 Las vistas no pueden hacer referencia a tablas temporales.
 Las vistas no pueden hacer referencia a más de 1.024 columnas.
 La instrucción CREATE VIEW no puede combinarse con otras
instrucciones de Transact-SQL en un mismo lote.

Ejemplo 1 Éste es un ejemplo de una vista que crea una columna (Subtotal) que calcula
los subtotales de un pedido a partir de las columnas UnitPrice, Quantity y
Discount.
CREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal)
AS
SELECT OD.OrderID,
SUM(CONVERT
(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100)
FROM [Order Details] OD
GROUP BY OD.OrderID
GO

Ejemplo 2 En este ejemplo se consulta la vista para ver los resultados.


SELECT * FROM OrderSubtotalsView

Resultado OrderID Subtotal

10271 48.0000
10977 2233.0000
10440 4924.1400
.
.
.
(830 filas afectadas)
8 Módulo 8: Implementación de vistas

Ejemplo: Vista de tablas combinadas


Objetivo del tema Orders Customers
Ofrecer un ejemplo de una OrderID CustomerID
OrderID CustomerID RequiredDate
RequiredDate ShippedDate
ShippedDate CustomerID
CustomerID CompanyName
CompanyName ContactName
ContactName
vista de dos o más tablas 10663
10663 BONAP
BONAP 1997-09-24
~~~
1997-09-24
~~~ 1997-10-03
1997-10-03 BONAP
BONAP Bon
Bonapp'
app' Laurence
LaurenceLebihan
Lebihan
10827 BONAP 1998-01-26
~~~ 1998-02-06 PICCO Piccolo
Piccolound
undmehr Georg
GeorgPipps
combinadas. 10827
10427
BONAP
PICCO
1998-01-26
~~~
1997-02-24
~~~
1998-02-06
1997-03-03
PICCO
QUICK QUICK-Stop
mehr
Horst
Pipps
Kloss
10427 PICCO 1997-02-24
~~~ 1997-03-03 QUICK QUICK-Stop Horst Kloss
10451 QUICK 1997-03-05
~~~ 1997-03-12
Explicación previa 10451
10515
QUICK
QUICK
1997-03-05
~~~
1997-05-07
~~~
1997-03-12
1997-05-23
10515 QUICK 1997-05-07
~~~ 1997-05-23
Es posible crear vistas de
varios tipos. Uno de ellos
es un subconjunto de
columnas, como vimos en
USE
USE Northwind
Northwind ShipStatusView
una diapositiva anterior. GO
GO
Otro tipo, más habitual, es CREATE
CREATE VIEW
VIEW dbo.ShipStatusView
dbo.ShipStatusView
la vista de dos o más tablas AS
AS OrderID
OrderID ShippedDate
ShippedDate ContactName
ContactName
combinadas. SELECT
SELECT OrderID,
OrderID, ShippedDate,
ShippedDate, ContactName
ContactName 10264 1996-08-23
1996-08-21
10264 1996-08-21Laurence
1996-08-23 LaurenceLebihan
Lebihan
FROM
FROM Customers
Customers cc INNER
INNER JOIN
JOIN Orders
Orders oo 10271 1996-08-30
1996-08-29
10271 1996-08-29Georg
1996-08-30 GeorgPipps
Pipps
ON
ON c.CustomerID
c.CustomerID == O.CustomerID
O.CustomerID 10280
10280 1996-09-12
1996-09-11
1996-09-11Horst
1996-09-12 HorstKloss
Kloss
WHERE
WHERE RequiredDate
RequiredDate << ShippedDate
ShippedDate

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
A menudo se crean vistas para conseguir una forma más práctica de ver
información centralizada de dos o más tablas combinadas.
Ejemplo 1 En este ejemplo, ShipStatusView combina las tablas Customers y Orders.
USE Northwind
GO
CREATE VIEW dbo.ShipStatusView
AS
SELECT OrderID, ShippedDate, ContactName
FROM Customers c INNER JOIN Orders o
ON c.CustomerID = O.CustomerID
WHERE RequiredDate < ShippedDate

SELECT * FROM ShipStatusView

Resultado OrderID ShippedDate ContactName


10264 1996-08-23 Maria Larsson
10271 1996-08-30 Art Braunschweiger
10280 1996-09-12 Christina Berglund
.
.
.
(37 filas afectadas)
Módulo 8: Implementación de vistas 9

Modificación y eliminación de vistas


Objetivo del tema
Indicar cómo alterar
una vista.  Alteración de vistas
Explicación previa USE
USE Northwind
Northwind
GO
GO
Es posible alterar una ALTER
ALTER VIEW
VIEW dbo.EmployeeView
dbo.EmployeeView
vista existente. AS
AS
SELECT
SELECT LastName,
LastName, FirstName,
FirstName, Extension
Extension
FROM
FROM Employees
Employees

 Conserva los permisos asignados


 Hace que la instrucción SELECT y las opciones
reemplacen la definición existente
 Eliminación de vistas
DROP
DROP VIEW
VIEW dbo.ShipStatusView
dbo.ShipStatusView

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
A menudo, las vistas se alteran como respuesta a las peticiones de información
adicional por parte de los usuarios o a causa de cambios en la definición de las
tablas subyacentes. Para alterar una vista puede quitarla y volverla a crear, o
bien puede ejecutar la instrucción ALTER VIEW.

Alteración de vistas
La instrucción ALTER VIEW cambia la definición de una vista, incluidas
las vistas de índices, sin afectar a los procedimientos almacenados o
desencadenadores dependientes. Esto le permite conservar los permisos
de la vista. Esta instrucción está sujeta a las mismas restricciones que CREATE
VIEW. Si quita una vista y la vuelve a crear, deberá volver a asignar los
permisos asociados a ella.
Sintaxis ALTER VIEW propietario.nombreVista
[(columna [,...n ])]
[WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} [,...n]]
AS
instrucciónSelect
[WITH CHECK OPTION]

Nota Si utiliza las opciones WITH CHECK OPTION, WITH ENCRYPTION,


WITH SCHEMABINDING o WITH VIEW_METADATA al crear la vista,
deberá incluirlas también en la instrucción ALTER VIEW para que la vista
conserve la funcionalidad que ofrecen.
10 Módulo 8: Implementación de vistas

Ejemplo En el ejemplo siguiente se altera EmployeeView para agregar la columna


Extension.
USE Northwind
GO
ALTER VIEW dbo.EmployeeView
AS
SELECT LastName, FirstName, Extension
FROM employees
Consulta SELECT * from dbo.EmployeeView

Resultado Lastname FirstName Extension


Davolio Nancy 5467
Fuller Andrew 3457
Leverling Janet 3355
.
.
.
(9 filas afectadas)

Sugerencia Nota Si define una vista con una instrucción SELECT * y, a continuación,
Al crear la vista, la lista de agrega columnas a la estructura de las tablas subyacentes y, por tanto, altera
columnas se almacena en la dicha estructura, las nuevas columnas no aparecerán en la vista. Cuando en la
tabla syscolumns. instrucción CREATE VIEW se seleccionan todas las columnas, la lista de
columnas sólo se interpreta en el momento de crear la vista. Para incluir las
columnas nuevas en la vista, es necesario alterar ésta.

Eliminación de vistas
Si ya no necesita una vista, puede quitar su definición de la base de datos con la
instrucción DROP VIEW. Al quitar una vista se quita su definición y todos los
permisos que tenga asignados. Además, si los usuarios consultan vistas que
hagan referencia a la vista quitada, obtendrán un mensaje de error. Sin embargo,
al quitar una tabla que hace referencia a una vista, ésta no se quita
automáticamente. Es necesario quitarla de forma explícita.

Nota El permiso para quitar una vista corresponde a su propietario y no es


transferible. Es la configuración predeterminada. Sin embargo, el administrador
del sistema o el propietario de la base de datos pueden quitar cualquier objeto si
especifican el nombre de su propietario en la instrucción DROP VIEW.
Módulo 8: Implementación de vistas 11

Evitar la interrupción de las cadenas de pertenencia


Objetivo del tema
Presentar el concepto de
cadenas de pertenencia.  Objetos dependientes con
Explicación previa propietarios distintos
Para evitar la interrupción maria.view2
de las cadenas de  Ejemplo:
pertenencia, el usuario
dbo debe ser el propietario Maria ejecuta:
de todas las vistas. lucia.view1
GRANT
GRANT SELECT
SELECT ON
ON view2
view2 TO
TO pierre
pierre

Pierre ejecuta: lucia.table1

SELECT
SELECT ** FROM
FROM maria.view2
maria.view2

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
SQL Server permite que el propietario del objeto original conserve el control de
qué usuarios tienen autorización de acceso al mismo.

Objetos dependientes con propietarios distintos


Las definiciones de las vistas dependen de objetos subyacentes (vistas o tablas).
Estas dependencias pueden considerarse como una cadena de pertenencia. Si el
propietario de una vista también posee los objetos subyacentes, sólo tendrá que
conceder permisos en la vista. Cuando se utiliza el objeto, sólo se comprueban
los permisos de la vista.
Para evitar interrumpir las cadenas de pertenencia, el usuario dbo debe ser
el propietario de todas las vistas. Al utilizar el objeto, se comprobarán los
permisos de cada objeto dependiente con un propietario distinto.
Ejemplo Maria crea la vista view2. Con la instrucción siguiente, concede a Pierre
permiso para consultarla.
Sintaxis GRANT select ON view2 TO pierre

Sin embargo, maria.view2 depende de un objeto (view1) propiedad de otra


usuaria (Lucia). Los permisos de cada objeto dependiente se comprueban con
un propietario distinto.
Pierre consulta la vista con la instrucción siguiente:
Sintaxis SELECT * FROM maria.view2

Como maria.view2 depende de lucia.view1, SQL Server comprueba los


permisos de maria.view2 y lucia.view1. Si Lucia ha concedido previamente a
Pierre permisos en view1, Pierre tendrá acceso a los datos. En caso contrario,
se le denegará el acceso, porque Lucia mantiene el control sobre qué usuarios
tienen acceso a los objetos que ella crea.
12 Módulo 8: Implementación de vistas

Ubicación de la información de definición de vistas


Objetivo del tema
Describir el modo de ver la
información de las vistas.
Explicación previa  Ubicación de las definiciones de vistas
Al crear, alterar o quitar  No disponible si la vista fue creada con la opción
tablas, es conveniente tener
información acerca de las
WITH ENCRYPTION
vistas de la base de datos.  Ubicación de las dependencias de una vista
 Muestra los objetos de los que depende una vista
 Muestra los objetos que dependen de una vista

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Para alterar la definición de una vista o comprender cómo se obtienen sus datos
a partir de las tablas base, puede ser necesario ver su definición.

Ubicación de las definiciones de las vistas


Para ubicar la información de definición de las vistas puede utilizar el
Administrador corporativo de SQL Server o consultar las vistas y tablas
del sistema siguientes.
Muestra información
Vista de esquema de información o tabla del sistema acerca de

INFORMATION_SCHEMA.TABLES o sysobjects Nombres de vistas.


INFORMATION_SCHEMA.VIEW_TABLE_USAGE o sysdepends Nombres de objetos base.
INFORMATION_SCHEMA.VIEWS o syscomments Definición de vistas.
INFORMATION_SCHEMA.VIEW_COLUMN_USAGE o syscolumns Columnas definidas en una vista.

Nota INFORMATION_SCHEMA.VIEW_TABLE_USAGE e
INFORMATION_SCHEMA.VIEW_COLUMN_USAGE sólo muestran
información referida a su nombre de usuario.
Módulo 8: Implementación de vistas 13

Para mostrar el texto utilizado para crear una vista puede usar el Administrador
corporativo de SQL Server, consultar INFORMATION_SCHEMA.VIEWS o
ejecutar el procedimiento almacenado de sistema sp_helptext con el nombre de
la vista como parámetro.
Sintaxis sp_helptext nombreObjeto

Sugerencia Ubicación de las dependencias de una vista


Muestre cómo obtener la Para obtener un informe de las tablas o vistas de las que depende una vista, y de
información de dependencia los objetos que dependen de una vista determinada puede usar el Administrador
con el Administrador corporativo de SQL Server o ejecutar el procedimiento almacenado de sistema
corporativo de SQL Server. sp_depends.
Antes de eliminar cualquier objeto, debe ver las dependencias. Antes de alterar
o quitar una tabla, ejecute el procedimiento almacenado de sistema sp_depends
para determinar si hay objetos que hagan referencia a ella.
Sintaxis sp_depends nombreObjeto
14 Módulo 8: Implementación de vistas

Ocultación de la definición de las vistas


Objetivo del tema
Explicar el modo de cifrar
las definiciones de las
vistas.  Uso de la opción WITH ENCRYPTION
Explicación previa  No elimine las entradas de la tabla syscomments
Puede cifrar la definición de
una vista para ocultar los
detalles de las tablas base USE
USE Northwind
Northwind
consultadas por ella. GO
GO
CREATE
CREATE VIEW
VIEW dbo.[Order
dbo.[Order Subtotals]
Subtotals]
WITH
WITH ENCRYPTION
ENCRYPTION
AS
AS
SELECT
SELECT OrderID,
OrderID,
Sum(CONVERT(money,(UnitPrice*Quantity*(1-Discount)/100))*100)
Sum(CONVERT(money,(UnitPrice*Quantity*(1-Discount)/100))*100)
AS
AS Subtotal
Subtotal
FROM
FROM [Order
[Order Details]
Details]
GROUP
GROUP BY OrderID
BY OrderID
GO
GO

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Debido a que los usuarios pueden mostrar la definición de una vista mediante
el Administrador corporativo de SQL Server, por medio de consultas a
INFORMATION_SCHEMA.VIEWS o consultas a la tabla del sistema
syscomments, puede que desee ocultar ciertas definiciones de vistas.

Uso de la opción WITH ENCRYPTION


Puede cifrar las entradas de la tabla syscomments que contengan el texto
de la instrucción CREATE VIEW. Para ello, especifique la opción WITH
ENCRYPTION en la definición de la vista.
Antes de cifrar una vista, asegúrese de guardar su definición (secuencia de
comandos) en un archivo. Para descifrar el texto de una vista debe quitarla
y volverla a crear, o alterarla y utilizar la sintaxis original.
Ejemplo En este ejemplo se crea dbo.[Order Subtotals] con la opción WITH
ENCRYPTION para que la definición de la vista quede oculta.
USE Northwind
GO
CREATE VIEW dbo.[Order Subtotals]
WITH ENCRYPTION
AS
SELECT OrderID,
Sum(CONVERT(money,(UnitPrice*Quantity*(1-Discount)/100))*100)
AS Subtotal
FROM [Order Details]
GROUP BY OrderID
Módulo 8: Implementación de vistas 15

No elimine las entradas de la tabla syscomments


Cuando, por motivos de seguridad, la definición de una vista no deba estar a
disposición de los usuarios, cifre la vista. No elimine nunca las entradas de la
tabla del sistema syscomments. Si lo hiciera, no podría utilizar la vista e
impediría que SQL Server volviera a crear la vista cuando se actualizara la
base de datos con una versión más reciente de SQL Server.
16 Módulo 8: Implementación de vistas

Modificación de datos mediante vistas


Objetivo del tema
Exponer consideraciones
que los alumnos deben
tener presentes al modificar  No pueden afectar a más de una tabla subyacente
datos mediante vistas.
 No pueden afectar a ciertas columnas
Explicación previa
Los cambios en los datos  Pueden provocar errores si afectan a columnas a las
realizados a través de vistas que la vista no hace referencia
modifican las tablas
subyacentes.  Se comprueba si se ha especificado WITH CHECK
OPTION

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Las vistas no mantienen una copia aparte de los datos sino que muestran el
conjunto de resultados de una consulta de una o varias tablas base. Por ello,
al modificar los datos de una vista, en realidad se modifica la tabla base.
Con algunas restricciones, es posible insertar, actualizar o eliminar libremente
datos de una tabla a través de una vista. En general, la vista debe estar basada
en una sola tabla y no debe incluir funciones de agregado o cláusulas GROUP
BY en la instrucción SELECT.
Específicamente, las modificaciones realizadas a través de vistas:
 No pueden afectar a más de una tabla subyacente.
Puede modificar vistas derivadas de dos o más tablas, pero cada
actualización o modificación sólo puede afectar a una de ellas.
 No pueden afectar a ciertas columnas.
SQL Server no permite cambiar las columnas que son resultado de un
cálculo, como las que contienen valores calculados, funciones integradas
o funciones de agregado de filas.
 Pueden provocar errores si afectan a columnas a las que la vista no hace
referencia.
Por ejemplo, al insertar una fila en una vista definida en una tabla que
contiene columnas no incluidas en la vista y que no permiten valores
NULL o contienen valores predeterminados, se producirá un error.
 Se comprueba si se ha especificado WITH CHECK OPTION en la
definición de la vista.
La opción WITH CHECK OPTION obliga a todas las instrucciones de
modificación de datos que se ejecutan contra la vista a cumplir ciertos
criterios. Estos criterios se especifican en la instrucción SELECT que
define la vista. Si los valores cambiados están fuera del intervalo válido
de la definición de la vista, SQL Server rechazará la modificación.
Módulo 8: Implementación de vistas 17

 Optimización del rendimiento mediante vistas


Objetivo del tema
Describir cómo optimizar
el rendimiento mediante
vistas.  Consideraciones acerca del rendimiento
Explicación previa  Uso de vistas indizadas
Esta sección describe
cómo optimizar el  Uso de vistas para dividir datos
rendimiento mediante
vistas.

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Esta sección describe las consideraciones acerca del rendimiento en el uso de
vistas y cómo las vistas le permiten optimizar el rendimiento al almacenar los
resultados de consultas complejas y dividir los datos.
18 Módulo 8: Implementación de vistas

Consideraciones acerca del rendimiento


Objetivo del tema Customers USE
Mostrar el modo de crear Customers USE Northwind
Northwind
11Orders
~~
Orders ~~ ~~ nn GO
GO
una vista que contiene otra Order
~~ ~ Details
2 11~ Order ~Details
~ ~ ~~n nn
CREATE
CREATE VIEW
VIEW dbo.TopSalesView
dbo.TopSalesView
2 1~ ~ ~ ~ ~ ~n ~ AS
vista. 3322~~1~~ ~ ~~~~ ~ ~~~~yy~nn ~ AS
2 ~ ~ ~ ~ SELECT
SELECT **
Explicación previa 4433~~2~~ ~ ~~~~ ~ ~~~~yy~yy ~ FROM
FROM dbo.TotalPurchaseView
dbo.TotalPurchaseView
3 ~ ~ ~ ~
Si desea aprovechar el 5544~~3~~ ~ ~~~~ ~ ~~~~nn~yy ~ WHERE
WHERE Subtotal
Subtotal >> 50000
50000
4 ~ ~ ~ ~ GO
trabajo que ya ha hecho, 66 5~~4~~ ~
5 ~~ ~ ~
~ ~~ ~yy~nn ~
~ GO
puede crear una vista de 66 55~~ ~~ ~~ ~~ ~~ ~~yy ~~
66 ~~ ~~ ~~ ~~
otra vista. Sin embargo,
debe tener en cuenta los TotalPurchaseView
TotalPurchaseView TopSalesView
TopSalesView
TotalPurchaseView
posibles problemas de 11 ~~ ~~ ~~ ~~ ~~ ~~ ~~
rendimiento que ello implica. 22 ~~ ~~ ~~ ~~ ~~ ~~ ~~
33 ~~ ~~ ~~ ~~ ~~ ~~ ~~
44 ~~ ~~ ~~ ~~
55 ~~ ~~ ~~ ~~
66 ~~ ~~ ~~ ~~ SELECT
SELECT **
FROM
FROM dbo.TopSalesView
dbo.TopSalesView
WHERE
WHERE CompanyName
CompanyName == 'Ernst
'Ernst Handel'
Handel'

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Cuando se anidan en una vista otras vistas que combinan varias tablas y
evalúan expresiones complejas, el origen inmediato de los posibles problemas
de rendimiento puede ser difícil de determinar. En consecuencia, puede ser
conveniente crear definiciones de vistas separadas, en lugar de anidarlas.
Ejemplo En el ejemplo siguiente, TopSalesView consulta un subconjunto de filas de
TotalPurchaseView.
USE Northwind
Sugerencia GO
Pregunta: ¿hasta dónde
CREATE VIEW dbo.TopSalesView
puede anidarse una vista
de otra vista? AS
SELECT *
Respuesta: el único FROM dbo.TotalPurchaseView
límite son los recursos WHERE Subtotal > 50000
disponibles. En general, GO
no se deben anidar más de
tres niveles si no se desea La definición de la vista dbo.TopSalesView oculta la complejidad de la
ocultar posibles problemas consulta subyacente utilizada para crear TotalPurchaseView, que combina tres
de rendimiento. tablas base.
Módulo 8: Implementación de vistas 19

USE Northwind
GO
CREATE VIEW dbo.TotalPurchaseView
AS
SELECT CompanyName, Sum(CONVERT(money,
(UnitPrice*Quantity*(1-Discount)/100))*100) AS Subtotal
FROM Customers c INNER JOIN Orders o
ON c.CustomerID=o.CustomerID
INNER JOIN [Order Details] od
ON o.OrderID = od.OrderID
GROUP BY CompanyName
GO

Consulta Si los usuarios encuentran problemas de rendimiento al ejecutar la consulta


siguiente para obtener los libros disponibles en francés, el origen del problema
no será evidente.
SELECT *
FROM dbo.TopSalesView
WHERE CompanyName = 'Ernst Handel'

Resultado CompanyName Subtotal


Ernst Handel 104874.98

(1 fila(s) afectada(s))
20 Módulo 8: Implementación de vistas

Uso de vistas indizadas


Objetivo del tema
Describir las vistas  Las vistas indizadas almacenan el conjunto de
indizadas. resultados en la base de datos
Explicación previa  Creación de una vista indizada
Es posible crear índices
en las vistas.  Recomendaciones para la creación de vistas indizadas
Utilizar si:
 El rendimiento mejora el costo del incremento en el
mantenimiento
 Los datos subyacentes no se actualizan con frecuencia
 Las consultas realizan una gran cantidad de
combinaciones y operaciones de agregado
 Restricciones en la creación de vistas indizadas

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Es posible crear índices en las vistas. Una vista indizada almacena el conjunto
de resultados de una vista en la base de datos. Debido a que la velocidad de
recuperación es rápida, puede utilizar vistas indizadas para mejorar el
rendimiento de las consultas.

Creación de una vista indizada


Para crear una vista indizada implemente un índice único y agrupado
(UNIQUE CLUSTERED) en una vista. Los resultados de la vista se almacenan
en las páginas de nivel de hoja del índice agrupado. Una vez creado el índice
UNIQUE CLUSTERED, puede crear otros índices en esa vista.
Una vista indizada refleja automáticamente las modificaciones realizadas en los
datos de la tablas base. A medida que los datos cambian, el índice UNIQUE
CLUSTERED se actualiza.

Recomendaciones para la creación de vistas indizadas


El optimizador de consultas determina automáticamente si una consulta dada se
beneficiará del uso de una vista indizada. Puede determinar este suceso si la
consulta no hace referencia a la vista indizada. Como recomendación general,
permita al optimizador de consultas determinar cuándo utilizar vistas indizadas.
Con el Asistente para optimización de índices, puede mejorar
extraordinariamente su capacidad para determinar la mejor mezcla de
índices y vistas indizadas con el fin de optimizar el rendimiento de las
consultas.
Módulo 8: Implementación de vistas 21

Cree vistas indizadas cuando:


 La mejora en el rendimiento por el aumento de velocidad al recuperar los
resultados supere el costo del incremento en el mantenimiento.
 Los datos subyacentes no se actualicen con frecuencia.
 Las consultas realicen una cantidad significativa de combinaciones y
operaciones de agregado que procesen muchas filas o que sean realizadas
frecuentemente por muchos usuarios.

Restricciones en la creación de vistas indizadas


Considere las siguientes instrucciones al crear vistas indizadas:
 El primer índice que crea en una vista debe ser un índice agrupado único.
 Debe crear la vista con la opción SCHEMABINDING.
 La vista puede hacer referencia a tablas base, pero no a otras vistas.
 Para hacer referencia a tablas y funciones definidas por el usuario debe
utilizar nombres compuestos por dos partes.
 Las conexiones posteriores deben tener la misma configuración de opciones
para utilizar la vista indizada.

Nota Para estar seguro de que puede indizar una vista debe utilizar la
propiedad IsIndexable de la función OBJECTPROPERTY.
22 Módulo 8: Implementación de vistas

Uso de vistas para dividir datos


Objetivo del tema
Presentar las vistas
divididas.
Explicación previa  Puede utilizar las vistas para dividir los datos en varios
Puede utilizar vistas para servidores o instancias de SQL Server
dividir datos entre varias
bases de datos o copias de
 Cómo utiliza SQL Server las vistas para dividir datos
SQL Server.  Cómo las vistas divididas mejoran el rendimiento

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Puede utilizar vistas para dividir datos entre varias bases de datos o copias de
SQL Server y así mejorar el rendimiento.

Cómo utiliza SQL Server las vistas para dividir datos


Puede utilizar el operador UNION dentro de una vista para combinar los
resultados de dos o más consultas de tablas distintas en un solo conjunto de
resultados. Esta operación aparece ante el usuario como una sola tabla llamada
vista dividida. Las vistas divididas se pueden actualizar aunque hagan
referencia a varias tablas.
Pueden estar basadas en datos procedentes de muchos orígenes heterogéneos,
como servidores remotos, y no sólo de tablas de la misma base de datos. Esto
permite distribuir el procesamiento de la base de datos entre un grupo de
servidores. El grupo de servidores puede hacer frente a las necesidades de
procesamiento de grandes aplicaciones de comercio electrónico o centros de
datos de empresa.

Cómo las vistas divididas mejoran el rendimiento


Si las tablas de una vista dividida se encuentran en distintos servidores o en
un equipo con varios procesadores, cada tabla implicada en la consulta puede
recorrerse en paralelo, con lo que se mejora el rendimiento de la consulta.
Además, las tareas de mantenimiento, como la regeneración de índices o la
copia de seguridad de una tabla, pueden ejecutarse a mayor velocidad.

Nota No se puede crear un índice en una vista dividida. La definición de vista


requerida para crear la vista indizada sólo permite nombres de dos partes; una
vista dividida requiere el uso de nombres de tres o cuatro partes, como,
NombreServidor.nombreBaseDeDatos.nombrePropietario.nombreObjeto.
Módulo 8: Implementación de vistas 23

Procedimientos recomendados
Objetivo del tema
Presentar algunas
recomendaciones para Use
Use una
una convención
convención de
de nomenclatura
nomenclatura estándar
estándar
el uso de las vistas.
Explicación previa
Las siguientes son algunas dbo
dbo debe
debe ser
ser el
el propietario
propietario de
de todas
todas las
las vistas
vistas
recomendaciones para
utilizar las vistas.
Compruebe
Compruebe las
las dependencias
dependencias de
de los
los objetos
objetos antes
antes de
de quitarlos
quitarlos

No
No elimine
elimine nunca
nunca las
las entradas
entradas de
de la
la tabla
tabla del
del sistema
sistema
syscomments
syscomments

Evalúe
Evalúe cuidadosamente
cuidadosamente la
la creación
creación de
de vistas
vistas basadas
basadas en
en otras
otras
vistas
vistas

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Las recomendaciones siguientes le ayudarán a utilizar y administrar las vistas
de bases de datos:
 Debe establecer una convención de denominación coherente para distinguir
las vistas de las tablas.
 Especifique dbo como propietario al crear las vistas. El dbo debe poseer
todos los objetos a los que se hace referencia en la definición de vista. Con
ello no tendrá que especificar el nombre del propietario al consultar la vista,
ya que el propietario de la base de datos es el propietario predeterminado.
Además, el propietario de la base de datos tiene permisos en todos los
objetos subyacentes de la base de datos, lo que evita la posibilidad de que
se interrumpan las cadenas de propiedad.
 Compruebe las dependencias de los objetos antes de quitarlos de la base
de datos. Ejecute el procedimiento almacenado de sistema sp_depends o
muestre las dependencias en el Administrador corporativo de SQL Server
para asegurarse de que ningún objeto depende del que va a quitar.
 Nunca elimine entradas de la tabla del sistema syscomments. Si la
aplicación requiere que la definición sea invisible para otros usuarios,
utilice la opción WITH ENCRYPTION en la instrucción CREATE VIEW
o ALTER VIEW. Asegúrese de guardar la secuencia de comandos de la
definición antes de cifrar la secuencia.
 Evalúe cuidadosamente si debe crear vistas basadas en otras vistas.
Puede ocultar su complejidad y provocar problemas de rendimiento.
24 Módulo 8: Implementación de vistas

En los Libros en pantalla de SQL Server encontrará información adicional


acerca de estos temas.
Tema Buscar en

CREATE VIEW “crear vista”


ALTER VIEW “alterar vista”
DROP VIEW “quitar vista”
Cadenas de pertenencia “cadena de pertenencia”
interrumpidas
Generación de secuencias “documentación y secuencias de comandos de bases
de comandos SQL de datos”
Módulo 8: Implementación de vistas 25

Práctica A: Implementación de vistas


Objetivo del tema
Presentar la práctica.
Explicación previa
En esta práctica creará,
probará y modificará vistas.

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
Explique los objetivos de la
práctica. Objetivos
Después de realizar esta práctica, el alumno será capaz de:
 Crear una vista con un asistente.
 Alterar una vista para cifrar su definición.
 Alterar una vista con WITH CHECK OPTION.
 Utilizar el esquema de información para obtener información acerca de
las vistas.

Requisitos previos
Antes de trabajar en esta práctica, debe tener:
 Los archivos de comandos de la práctica que se encuentran en
C:\Moc\2329A\Labfiles\L08.
 Los archivos de respuestas de la práctica que se encuentran en
C:\Moc\2329A\Labfiles\L08\Answers.

Preparación de la práctica
Para completar esta práctica, deberá:
 Haber completado la práctica anterior o bien
 Haber ejecutado el archivo por lotes
C:\Moc\2329A\Batches\Restore08.cmd.
Este archivo de comandos restaura la base de datos ClassNorthwind al
estado requerido por esta práctica.

Más información
Si necesita ayuda acerca de cómo ejecutar archivos, busque el título “Ejecutar
instrucciones SQL” en la Ayuda del Analizador de consultas SQL.
26 Módulo 8: Implementación de vistas

Otros recursos que puede utilizar son:


 El esquema de la base de datos Northwind.
 Los Libros en pantalla de Microsoft SQL Server.

Situación de ejemplo
La organización del aula pretende simular la de una empresa dedicada al
comercio mundial llamada Northwind Traders. Su nombre de dominio ficticio
es nwtraders.msft. El servidor DNS principal para nwtraders.msft es el equipo
del instructor, cuya dirección del Protocolo Internet (IP) es 192.168.x.200
(donde x es el número del aula que tiene asignado). El nombre del equipo del
instructor es London.
En la tabla siguiente se muestran el nombre de usuario, el nombre de
equipo y la dirección IP del equipo de cada alumno en el dominio ficticio
nwtraders.msft. Busque el nombre de usuario correspondiente a su equipo
y anótelo.
Nombre de Nombre del
usuario equipo Dirección IP

SQLAdmin1 Vancouver 192.168.x.1


SQLAdmin2 Denver 192.168.x.2
SQLAdmin3 Perth 192.168.x.3
SQLAdmin4 Brisbane 192.168.x.4
SQLAdmin5 Lisbon 192.168.x.5
SQLAdmin6 Bonn 192.168.x.6
SQLAdmin7 Lima 192.168.x.7
SQLAdmin8 Santiago 192.168.x.8
SQLAdmin9 Bangalore 192.168.x.9
SQLAdmin10 Singapore 192.168.x.10
SQLAdmin11 Casablanca 192.168.x.11
SQLAdmin12 Tunis 192.168.x.12
SQLAdmin13 Acapulco 192.168.x.13
SQLAdmin14 Miami 192.168.x.14
SQLAdmin15 Auckland 192.168.x.15
SQLAdmin16 Suva 192.168.x.16
SQLAdmin17 Stockholm 192.168.x.17
SQLAdmin18 Moscow 192.168.x.18
SQLAdmin19 Caracas 192.168.x.19
SQLAdmin20 Montevideo 192.168.x.20
SQLAdmin21 Manila 192.168.x.21
SQLAdmin22 Tokyo 192.168.x.22
SQLAdmin23 Khartoum 192.168.x.23
SQLAdmin24 Nairobi 192.168.x.24

Tiempo previsto para completar esta práctica: 30 minutos


Módulo 8: Implementación de vistas 27

Ejercicio 1
Creación y prueba de vistas
En este ejercicio va a crear vistas para administrar las peticiones diarias
relativas a la base de datos ClassNorthwind. Utilizará el Asistente para
creación de vistas y ejecutará una secuencia de comandos que crea varias
vistas. Por último, consultará las vistas para comprobar que obtiene los
resultados esperados.

 Para utilizar el Asistente para creación de vistas


En este procedimiento va a utilizar el Asistente para creación de vistas con el
fin de crear rápidamente una vista.
1. Inicie la sesión en el dominio del aula NWTraders con la información de la
tabla siguiente.
Opción Valor

Nombre de SQLAdminx (donde x corresponde a su nombre de equipo, según


usuario se ha designado en el dominio del aula nwtraders.msft)
Contraseña password

2. Abra el Administrador corporativo de SQL Server.


3. En el árbol de la consola, haga clic en el servidor.
4. En el menú Herramientas, haga clic en Asistentes.
5. Expanda Base de datos y, a continuación, haga doble clic en Asistente
para creación de vistas.
6. Utilice la información de la tabla siguiente para crear una vista que muestre
los productos de un proveedor en particular.
Opción Valor

Seleccionar una ClassNorthwind


base de datos
Seleccionar tablas Products
Seleccionar ProductID, ProductName, SupplierID, CategoryID,
columnas QuantityPerUnit, UnitPrice, Discontinued
Definir restricción WHERE SupplierID = 14
Dar nombre a la FormaggiProductsView
vista

7. Consulte la vista para asegurarse de que ha recibido el conjunto de


resultados esperado.
28 Módulo 8: Implementación de vistas

 Para crear vistas con una secuencia de comandos


En este procedimiento va a ejecutar una secuencia de comandos para crear vistas.
1. Abra el Analizador de consultas SQL y, si así se le pide, conéctese con el
servidor local con autenticación de Microsoft Windows®.
Tiene permiso para iniciar sesión y administrar SQL Server ya que ha
iniciado sesión como SQLAdminx, que es miembro del grupo local
Administradores de Microsoft Windows 2000. Todos los miembros de este
grupo se asignan automáticamente a la función sysadmin de SQL Server.
2. Abra, revise y ejecute Labfiles\L08\CreaView.sql para crear las vistas
siguientes:
Nombre de la vista Descripción
Customer and Todos los clientes y proveedores que aparecen en la
Suppliers by City lista (UNION)
Current Product List Todos los productos que ya no se suministran
Orders Qry Todos los pedidos de los clientes y la información de
pedido
Products Above Todos los productos cuyo precio está fijado por
Average Price encima del promedio del precio unitario del producto
Products by Category Todos los productos por categorías
Invoices Toda la información de facturas
Order Details Extended Toda la información de precios con detalles del
pedido ampliados
Sales by Category Todas las ventas durante 1997 enumeradas por
categoría

3. Abra una nueva ventana de consulta y ejecute el procedimiento almacenado


del sistema sp_depends. Enumere las tablas de las que depende la vista
Order Details Extended y los objetos que a su vez dependen de ella.
Tablas: Order details y Products. Vista: Sales by Category.
____________________________________________________________

____________________________________________________________

4. Cambie al Administrador corporativo de SQL Server para determinar las


dependencias de la tabla Orders.
5. En el árbol de la consola, expanda la base de datos ClassNorthwind y, a
continuación, haga clic en Tablas.
6. En el panel de detalles, haga clic con el botón secundario del mouse (ratón)
en la tabla Orders; en el menú contextual, haga clic en Todas las tareas y,
por último, haga clic en Mostrar dependencias.
¿Qué objetos dependen de la tabla Orders?
Vistas: Invoices, Orders Qry, Product Sales for 1997, Quarterly Orders,
Sales by Category, Sales Totals by Amount, Summary of sales by
quarter y Summary of sales by year. Procedimientos almacenados:
Employee sales by country.
____________________________________________________________

____________________________________________________________
Módulo 8: Implementación de vistas 29

Ejercicio 2
Cifrado de la definición de una vista
En este ejercicio va a alterar una vista para cifrar su definición, de modo que no
sea visible.

 Para alterar y cifrar la vista Sales by Category


En este procedimiento va a utilizar el Administrador corporativo de SQL Server
para mostrar la secuencia de comandos que creó la vista Sales by Category. A
continuación, alterará la vista para cifrar la secuencia de comandos. El archivo
L08\Answers\EncryptView.sql es la secuencia de comandos completa de este
procedimiento.
1. Abra los Libros en pantalla de SQL Server en el tema “Cómo generar una
secuencia de comandos (Administrador corporativo)”.
2. Utilice el procedimiento de los Libros en pantalla de SQL Server para
generar una secuencia de comandos para la vista Sales by Category.
3. Guarde la secuencia de comandos como SaleByCatView.sql

Nota Si muestra las propiedades de la vista o elige la vista previa al generar


la secuencia de comandos, podrá copiar y pegar la definición de la vista en
una ventana de consulta para poder modificarla.

4. En una ventana de consulta, revise la secuencia de comandos para alterar


Sales by Category de modo que se cree con la opción WITH
ENCRYPTION.
5. Ejecute la secuencia de comandos modificada para alterar Sales by
Category.
6. Guarde la secuencia de comandos revisada como SaleByCatView.sql
30 Módulo 8: Implementación de vistas

 Para probar que las instrucciones se han cifrado


En este procedimiento va a utilizar el procedimiento almacenado del sistema
sp_helptext y el Administrador corporativo de SQL Server para observar el
efecto de la utilización de la opción de cifrado.
1. Ejecute el procedimiento almacenado de sistema sp_helptext que muestra
la secuencia de comandos que creó Sales by Category.
La ventana Resultados mostrará una indicación similar a la siguiente:
“Los comentarios de objeto han sido cifrados”.
2. En el Administrador corporativo de SQL Server, en el panel de detalles,
haga clic con el botón secundario del mouse en Sales by Category y, a
continuación, haga clic en Propiedades.
¿Puede ver la sintaxis de la instrucción de CREATE VIEW utilizada para
crear Sales by Category?
No. La sintaxis está cifrada.
____________________________________________________________

3. ¿Cómo descifraría la vista Sales by Category?


Hay que alterar la vista y especificar la sintaxis original, sin incluir
la opción WITH ENCRYPTION. Para ello debe haber guardado la
secuencia de comandos con la sintaxis original.
____________________________________________________________
Módulo 8: Implementación de vistas 31

Ejercicio 3
Modificación de datos a través de vistas
En este ejercicio va a alterar FormaggiProductsView para incluir WITH
CHECK OPTION, de modo que sólo podrán hacerse modificaciones a los
datos que cumplan la definición de la vista.

 Para alterar FormaggiProductsView y habilitar WITH CHECK


OPTION
En este procedimiento va a alterar FormaggiProductsView para habilitar la
opción WITH CHECK OPTION. El archivo L08\Answers\Supplier14.sql es la
secuencia de comandos completa de este procedimiento.
1. Genere una secuencia de comandos para la vista FormaggiProductsView.
2. Modifique la secuencia de comandos para habilitar la opción WITH
CHECK OPTION.
3. Ejecute la secuencia de comandos y guarde el archivo con las
modificaciones.

 Para actualizar la tabla Title a través de FormaggiProductsView


En este procedimiento va a actualizar la tabla Products con datos que quedan
fuera del intervalo de FormaggiProductsView. A continuación, observará los
resultados.
1. Escriba una instrucción UPDATE para cambiar los productos enumerados
en FormaggiProductsView del proveedor 14 al proveedor 12, donde el
identificador de producto sea igual a 31.
UPDATE dbo.FormaggiProductsView
SET SupplierID = 12 WHERE ProductID = 31

2. Ejecute la instrucción UPDATE.


¿Cuál fue el resultado?
Mensaje de error 550: error en la inserción o actualización debido a
que la vista de destino especifica WITH CHECK OPTION o alcanza
una vista con esta opción, y una o más filas resultantes de la operación
no se califican con la restricción CHECK OPTION.
____________________________________________________________

____________________________________________________________
32 Módulo 8: Implementación de vistas

Ejercicio 4
Ubicación de las definiciones de las vistas
En este ejercicio va a consultar las vistas de esquema de información para
obtener información acerca de las vistas que ha creado en la base de datos
ClassNorthwind. El archivo L08\Answers\Schema.sql es la secuencia de
comandos completa de este ejercicio.

 Para mostrar información acerca de las vistas


En este procedimiento va a consultar las vistas de esquema de información para
obtener detalles acerca de las vistas de la base de datos ClassNorthwind.
1. Compruebe que está usando la base de datos ClassNorthwind.
2. Consulte INFORMATION_SCHEMA.VIEWS para mostrar todas las
vistas y sus definiciones.
SELECT *
FROM INFORMATION_SCHEMA.VIEWS
¿Qué información aparece acerca de FormaggiProductsView y Products
Above Average Price?
FormaggiProductsView muestra CASCADE en la columna
check_option. La definición de la vista Sales by Category está cifrada
en la columna view_definition.
____________________________________________________________

____________________________________________________________

3. ¿Qué vista de esquema de información muestra una lista de los nombres de


tablas y vistas?
INFORMATION_SCHEMA.TABLES
____________________________________________________________

____________________________________________________________

4. Consulte INFORMATION_SCHEMA.VIEW_COLUMN_USAGE para


obtener la lista de las columnas a las que hace referencia la vista Invoices.
SELECT *
FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE
WHERE view_name = 'Invoices'
Módulo 8: Implementación de vistas 33

5. Consulte INFORMATION_SCHEMA.VIEW_TABLE_USAGE para


obtener la lista de las tablas a las que hace referencia la vista Sales by
Category.
SELECT *
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE view_name = 'Sales by Category '
¿Qué tablas aparecen en la lista?
Tablas: Categories, Orders y Products. Vistas: Order Details Extended.
____________________________________________________________

____________________________________________________________

¿Por qué es posible ver las tablas a las que hace referencia Sales by
Category si esta vista está cifrada?
La opción WITH ENCRYPTION sólo cifra la definición de la vista en
la tabla del sistema syscomments. Las tablas o vistas a las que hace
referencia una vista se encuentran en la tabla del sistema sysobjects.
____________________________________________________________

____________________________________________________________

¿Qué tablas, funciones o procedimientos almacenados del sistema podrían


haberse utilizado también para mostrar información acerca de las vistas?
Sysobjects, sysdepends, syscomments, syscolumns,
OBJECTPROPERTY, OBJECT_ID, OBJECT_NAME, sp_helptext,
sp_help y sp_depends.
____________________________________________________________

____________________________________________________________
34 Módulo 8: Implementación de vistas

Repaso
Objetivo del tema
Reforzar los objetivos del
módulo mediante el repaso
de los puntos clave.  Introducción a las vistas
Explicación previa  Ventajas de las vistas
Las preguntas de repaso
abarcan algunos de los  Definición de vistas
conceptos clave impartidos
en el módulo.  Modificación de datos mediante vistas
 Optimización del rendimiento mediante vistas

******EL USO POR QUIENES NO SEAN INSTRUCTORES NO ESTÁ AUTORIZADO Y RESULTA ILEGAL*****
1. ¿Cuáles son las ventajas de las vistas?
Los usuarios se centran solamente en los datos que necesitan; el
tratamiento de los datos por parte del usuario se simplifica; la
complejidad de las base de datos y las consultas queda oculta para los
usuarios, lo que les permite ver nombres descriptivos. Las vistas
proporcionan un mecanismo de seguridad al permitir a los usuarios
tener acceso a datos únicamente en vistas. Crear índices en vistas y
dividir los datos mediante vistas puede optimizar el rendimiento.

2. Ha desarrollado una consulta que combina las tablas Customer, Orders y


Order Details para mostrar los detalles de cada pedido de cliente, como la
cantidad de un elemento y la fecha en que se requiere la entrega. Cuando los
clientes cambian un pedido existente, los empleados necesitan poder
actualizar las tablas Orders y Order Details. ¿Cómo puede lograrlo sin
conceder permisos en las tablas subyacentes?
Cree una vista en la consulta llamada OrderDetailsView y conceda
permisos de actualización en las columnas RequiredDate y Quantity
de la vista. Esto asegura que los empleados puedan actualizar estas
columnas sólo en las tablas Orders y Order Details.
Módulo 8: Implementación de vistas 35

3. ¿Qué ventaja tiene utilizar WITH CHECK OPTION en la definición de


la vista?
Esta opción obliga a las instrucciones de modificación ejecutadas para
la vista a cumplir los criterios establecidos en la instrucción SELECT
que la define.

4. ¿Qué consideraciones hay que recordar al utilizar vistas?


Los objetos a los que hace referencia una vista se comprueban al crear
una vista; las vistas se pueden alterar de modo que se mantengan los
permisos asignados a ellas. Eliminar o alterar una tabla subyacente
afecta a la vista; si el propietario de una vista no es el usuario dbo, es
necesario especificar el nombre de usuario como parte del nombre de la
vista. El mismo propietario debe ser dueño de todos los objetos de los
que depende una vista con el fin de evitar la interrupción de las cadenas
de pertenencia. Al ocultarse la complejidad puede dificultarse la
determinación del origen de los problemas de rendimiento.
THIS PAGE INTENTIONALLY LEFT BLANK

También podría gustarte