VISTAS
Una vista es una tabla virtual cuyo contenido esté definido por una consulta. Al igual que una tabla real, una vista consta de un conjunto de columnas y filas de datos con un nombre. Sin embargo, la vista no existe como conjunto de valores de datos almacenados en una base de datos. Las filas y las columnas de datos proceden de tablas a las que se hace referencia en la consulta que define la vista y se producen de forma dinémica cuando se hace referencia a la vista. Una vista act1'1a como filtro de las tablas subyacentes a las que se hace referencia en ella. La consulta que defme la vista puede provenir de una 0 de varias tablas. o bien de otras vistas de la base de datos actual u otras bases de datos. Asimismo, es posiblc utilizar las consultas distribuidas para defmir vistas que utilicen datos de origencs diversos. Esto puede resultar de utilidad, por ejemplo, si desea combinar datos de estructura similar que proceden de distintos servidores, cada uno de los cuales almacena los datos para una regién distinta de la organizacién. No existe ninguna restricción a la hora de consultar vistas y muy pocas restricciones a la hora de modificar los datos de éstas. En la ilustración siguiente se muestra una vista basada en dos tablas.
No existe ninguna restricción a la hora de consultar vistas y muy pocas2 restricciones a la hora de modificar los datos de éstas. En la ilustración siguiente se muestra una vista basada en dos tablas.
Las vistas suclen utilizarse para restringir el acceso del usuario a mas concretas de una tabla (por ejemplo, para permitir que un empleado solo vea las fllas que guardan su trabajo en una tabla de seguimiénto de actividad laboral). También suelen usarse para restn'ngir el acceso del usuario a columnas especiflcas (por ejemplo, permitir que los empleados que no trabajen en el departamento de nominas vean las columnas de nombre, oficina, teléfono y departamento de
la tabla de empleados, pero no permitir que vean las columnas con los datos de salario u otra informacion personal). Las vistas suelen usarse tambie’n para combinar columnas de varias tablas de fonna que parezcan una sola tabla y para agregar informacion en lugar de presentar los detalles.
Una vista es sencillamente un objeto de base de datos que presenta datos de tablas. Se trata de una consulta SQL que esté pennanentemente almacenada en la base de datos y a la que se le asigna un nombre, de modo que los resultados de la consulta almacenada son Visibles a través de la vista, y SQL permite acceder a estos resultados como si fueran de hecho una tabla real en la base de datos.
Las vistas suelen utilizarse para centrar, simplificar y personalizar 1a percepcién de la base de datos para cada usuario. Las vistas pueden emplearse como mecanismos de seguridad, que permiten a los usuarios obtener acceso a los datos por medio de la vista, pero no les conceden e1 permiso de obtener acceso directo a las tablas base subyacentes de la vista. Las vistas también se pueden utilizar para
realizar particiones de datos y para mejorar el rendimiento cuando se copian datos.
Las vistas permitcn a los usuarios centrarse en datos de su intere’s y en tareas especit’ncas de las que son responsablcs. Los datos innccesarios pucdcn qucdar fuera de la vista. De ese modo, también es mayor la scguridad dc los datos, dado que los usuarios sélo pueden ver los datos definidos en la vista y no los que hay en la tabla subyacente.
Las vistas permiten simplificar [a forma en que los usuarios manipulan los datos. Las combinaciones, proyecciones, consultas UNION y consultas SELECT que se utilizan frecuentemente pueden defmirse como vistas para que los usuarios no tengan que especiflcar todas las condiciones y calificaciones cada vez que realicen una nueva operacic’m con los datos. Por ejemplo, es posible crear como vista una consulta compleja que se utilice para la elaboracio’n de informes y que realice subconsultas, combinaciones extemas y agregaciones para recuperar datos de un grupo de tablas. La vista simplifica e1 acceso a los datos ya que evita la necesidad de escribir o enviar la consulta subyacente cada vez que se genera el informe; en lugar de eso, se realiza una consulta en la vista. También puede crear funciones en linea defmidas por el usuario que funcionen de manera légica como vistas parametrizadas o como vistas con parémetros de condiciones de b&squeda de cléusulas WHERE. ‘
Las vistas permiten que varios usuarios puedan ver los datos de modo distinto, aunque estén utilizando los mismos simulténeamente. Esto resulta de gran utilidad cuando usuarios que tienen distintos intereses y calif'lcaciones trabajan con la misma base de datos. Por ejemplo, es posible crear una vista que recupere {micamente los datos para los clientes con los que trabaja
el responsable comercial de una cuenta. La vista puede determinar qué datos deben recuperarse en funcién del Id. de inicio de sesién del responsable comercial que utilice la vista.
Es posible utilizar vistas para exportar datos a otras aplicaciones. También es posible importar informacio’n desde archivos de datos a determinadas vistas, siempre que se puedan insertar las fllas en la vista mediante la instruccién INSERT.
El operador de conjuntos UNION puede utilizarse dentro de una vista para combinar los resultados de dos o més consultas de tablas distintas en un solo conjunto. Esta combinacién se muestra al usuario como una tabla (mica denominada vista dividida. Por ejemplo, si una tabla contiene datos de ventas de Washington y otra tabla contiene datos de ventas de California, podn’a crearse una vista a partir de la UNION de ambas tablas. La vista representada incluye los datos de ventas de ambas zonas. Para utilizar vistas divididas, debe crear varias tablas idénticas y especificar una restriccién que determine e1 intervalo de datos que se pueden agregar a cada tabla. A continuacién, se crea la vista a panir de esas tablas base. Cuando se realiza una consulta en la vista, SQL determina autométicamente qué tablas se ven afectadas por la consulta y 3610 hace referencia a esas tablas. Por ejemplo, si en una consulta se especiflca que 5610 se necesitan los datos de ventas de Washington, SQL l'micamente lee la tabla que contiene los datos de Washington, sin intentar obtener acceso a otms tablas.
Las vistas divididas puedcn estar basadas en datos de distintos origenes, como scrvidorcs remotos, y no 5610 en tablas de la misma base de datos. Por cjcmplo, para combinar datos de distintos servidores rcmotos, cada uno de los cuales almaccna datos para una rcgién distima de su organizacién, puede crear consultas distribuidas que recuperan datos de cada origen de datos y, a continuacién, crear una vista basada en esas consultas distribuidas. Las consultas sélo leen datos de las tablas de los servidores remotos que contienen los datos pedidos por la consulta; no se intenta el acceso al resto de los servidores a los que hacen referencia las consultas distribuidas de la vista. Cuando realice una particién de datos entre varias tablas o servidores, las consultas que tengan acceso unicamente a una fraccién de los datos pueden ejecutarse con mayor rapidez, ya que se deben recorrer menos datos. Si las tablas se encuentran en servidores distintos 0 en un equipo con varios procesadores, también se podré recorrer en paralelo cada tabla incluida en la consulta, lo que aumenta el rendimiento de las consultas. Ademés, las tareas de mantenimiento (como, por ejemplo, la reconstruccién de indices 0 las copias de seguridad de una tabla), podrén ejecutarse con mayor rapidez. Mediante 1a utilizacién de una vista dividida, los datos siguen apareciendo como una sola tabla y SC 165 puede hacer una
consulta tal cual, sin necesidad de hacer referencia manualmente a la tabla subyacente que corresponda.
Creacio’n de una vista
Para crear vistas se utiliza la sentencia CREATE VIEW. Esta sentencia asigna un nombre a la vista y especiflca la consulta que la defme. Su sintaxis es la siguiente:
La sentencia CREATE VIEW puede asignar opcionalmente un nombre a cada columna en la vista recién creada. Si se especiflca una lista de nombres de columnas, deberé tener el mismo mimero de elementos que el nitmero de columnas producido por la consulta. Obsérvese que 3610 se especiflcan el tipo de datos y la longitud y que las otras caracteristicas de cada columna se deducen de la defmicién de las columnas en la tabla fuente.
Si la lista de nombres de nombres de columnas se omite en el sentencia CREATE VIEW, cada columna de la vista adopta el nombre de la columna correspondiente de la consulta. La lista de nombres de columnas debe ser
especiflcada si la consulta incluye columnas calculadas o si produce dos columnas con nombres idénticos.
La sintaxis de la sentencia CREATE VIEW es bastante sencilla y se presenta a continuacién.
Las vistas divididas puedcn estar basadas en datos de distintos origenes, como scrvidorcs remotos, y no 5610 en tablas de la misma base de datos. Por cjcmplo, para combinar datos de distintos servidores rcmotos, cada uno de los cuales almaccna datos para una rcgién distima de su organizacién, puede crear consultas distribuidas que recuperan datos de cada origen de datos y, a continuacién, crear una vista basada en esas consultas distribuidas. Las consultas
sélo leen datos de las tablas de los servidores remotos que contienen los datos pedidos por la consulta; no se intenta el acceso al resto de los servidores a los que hacen referencia las consultas distribuidas de la vista. Cuando realice una particién de datos entre varias tablas o servidores, las consultas que tengan acceso unicamente a una fraccién de los datos pueden ejecutarse con mayor rapidez, ya que se deben recorrer menos datos. Si las tablas se encuentran en servidores distintos 0 en un equipo con varios procesadores, también se podré recorrer en paralelo cada tabla incluida en la consulta, lo que aumenta el rendimiento de las consultas. Ademés, las tareas de mantenimiento (como, por ejemplo, la reconstruccién de indices 0 las copias de seguridad de una tabla), podrén ejecutarse con mayor rapidez. Mediante 1a utilizacién de una vista dividida, los datos siguen apareciendo como una sola tabla y SC 165 puede hacer una
consulta tal cual, sin necesidad de hacer referencia manualmente a la tabla subyacente que corresponda.
Creacio’n de una vista
Para crear vistas se utiliza la sentencia CREATE VIEW. Esta sentencia asigna un nombre a la vista y especiflca la consulta que la defme. Su sintaxis es la siguiente:
La sentencia CREATE VIEW puede asignar opcionalmente un nombre a cada columna en la vista recién creada. Si se especiflca una lista de nombres de columnas, deberé tener el mismo mimero de elementos que el nitmero de columnas producido por la consulta. Obsérvese que 3610 se especiflcan el tipo de datos y la longitud y que las otras caracteristicas de cada columna se deducen de la defmicién de las columnas en la tabla fuente.
Si la lista de nombres de nombres de columnas se omite en el sentencia CREATE VIEW, cada columna de la vista adopta el nombre de la columna correspondiente de la consulta. La lista de nombres de columnas debe ser
especiflcada si la consulta incluye columnas calculadas o si produce dos columnas con nombres idénticos.
La sintaxis de la sentencia CREATE VIEW es bastante sencilla y se presenta a continuacién.
Los parémctros opcionalcs bane dams y propielario indican la base de datos donde se crea la vista y su propictario. El parz'nnctro m2m/7re_vista es el nombre de la vista. Los nombres de las vistas debcn cumplir las rcglas de los identificadores. E1 parémetro columna es el nombre que se va a utilizar para una columna en una vista. solo es necesario asignar un nombre a una
columna en CREATE VIEW cuando una columna proviene de una expresién aritmética, una funcién o una constante; cuando dos o més columnas puedan tener el mismo nombre (normalmente, debido a una combinacion); o cuando una columna de una vista recibe un nombre distinto a] de la columna de la que proviene. Los nombres de columna se pueden asignar también en la instruccion SELECT. Si no se especiflca columna, las columnas de la vista adquieren los mismos nombres que las columnas de la instruccion SELECT. En las columnas de la vista, los permisos de un nombre de columna se aplican a través de una instruccion CREATE VIEW 0 ALTER VIEW, independientemente del origen de los datos subyacentes. El parémetro n es un marcador de posicion que indica que se pueden especiflcar varias columnas.
AS indica las acciones que va a llevar a cabo la vista. El parémetro insnmccio'n_seleccio'n es la instmccion SELECT que define la vista. Puede utilizarse més de una tabla y otras vistas. Para seleccionar los objetos a los que se hace referencia en la cléusula SELECT de una vista creada, es necesario tener los permisos adecuados. Una vista no tiene por qué ser un simple subconjunto de fllas y de columnas de una tabla determinada. Una vista se puede crear con més de una tabla 0 con otras vistas, mediante una cléusula SELECT de cualquier complejidad. En una deflnicion de vista indizada, 1a instruccion SELECT debe ser una instruccion para una (mica tabla o una instruccién JOIN con agregaciones opcionales. Hay unas cuantas restn'cciones en las cléusulas SELECT en una definicién de vista. Por ejemplo, una instruccion CREATE VIEW no puede incluir las cléusulas COMPUTE 0 COMPUTE BY, ni incluir la cléusula ORDER BY, 3 menos que también haya una cléusula TOP en la lista de seleccio’n de la instmccion SELECT. Tampoco puede incluir la palabra clave INTO ni hacer referencia a una tabla temporal o a una van'able de tabla. Sin embargo, se pueden utilizar funciones en instruccio’n_seleccion y pueden utilizarse varias instnlcciones SELECT separadas con UNION 0 UNION ALL.
WITH CHECK OPTION exige que todas las instrucciones de modificacién de datos ejecutadas contra la vista se adhieran a los criterios establecidos en select_statement. Cuando una flla se modifica mediante una vista, WITH CHECK OPTION garamiza que los datos permanecerz’m visibles en toda la vista despuéS de confirmar la modificacion. WITH ENCRYPTION indica que SQL Server cifra las columnas de la tabla dcl sistema que conticnen el tcxto dc la instruccién CREATE VIEW. Utilizar WITH ENCRYPTION evita que la vista se publique como parte de la duplicacion de SQL Server. SCHEMABINDING enlaza la vista al csqucma. Cuando se especiflca SCHEMABINDING, instruccidn_se/eccion dcbc incluir los nombres con dos partes (propietarioobjeto) de las tablas, vistas o funciones definidas por el usuario a las que se hace referencia. Las vistas 0 las tablas que participan en una vista creada con la cléusula de enlace de esquema no se pueden quitar ni alterar, de forma que deja de tener un enlace de esquema. De lo contrario, SQL Server genera un error. Ademés, las instrucciones ALTER TABLE sobre tablas que participan en vistas que tienen enlaces de esquemas provocarén un error si estas instrucciones afectan a la defmicion de la' vista. VIEW_METADATA especiflca que SQL Server devolveré a las API de DBLIB, ODBC y OLE DB la informacion de metadatos sobre la vista, en vez de las tablas o tabla base, cuando se soliciten los metadatos del modo de exploracion para una consulta que hace referencia a la vista. Los metadatos del modo de exploracion incluyen informacion sobre la tabla base a la que pertenecen las columnas del conjunto de resultados. Para las vistas creadas con la opcion
VIEW_METADATA, los metadatos del modo de exploracion devuelven el nombre de vista en vez de los nombres de la tabla base cuando se describen las columnas de la vista en el conjunto de resultados. Cuando se crea una vista WITH VIEW_METADATA, todas sus columnas (excepto timestamp) son actualizables si la vista tiene los desencadenadores INSERT 0 UPDATE INSTEAD OF.
Una vista 5610 se puede crear en la base de datos actual y puede hacer referencia a un méximo de 1.024 columnas. Cuando se realiza una consulta a través de una vista, SQL Server comprueba que todos los objetos de base de datos a los que se hace referencia en la instruccion existen, que son vélidos en el contexto de la instruccion y que las instrucciones de modificacion de datos no infringen ninguna regla de integridad de los datos. Las comprobaciones que no son correctas devuelven un mensaje (16 error. Las comprobaciones correctas convierten la accion en una accién contra las tablas subyacentes. Si una vista depende de una tabla (o vista) que se ha eliminado, SQL Server produce un mensaje de error si alguien trata de utilizar la vista. Si 56 crea una nueva tabla (o vista), y la estructura de la tabla no cambia de la tabla base anterior para sustituir a la eliminada, se puede volver a utilizar la vista de nuevo. Si cambia la estructura de la nueva tabla (o vista), seré necesario eliminar . la vista y volver a crearla. Cuando se crea una vista, el nombre de la vista 56 almacena en la tabla sysobjects. La informacion acerca de las columnas defmidas en una vista 56 agrega a la tabla syscolumns y la informacion acerca de las dependencias de la vista se agrega a la tabla sysdepends. Ademés, el texto de la instruccién CREATE VIEW se agrega a la tabla syscomments. Se trata de un proceso similar a1 de un procedimiento almacenado; cuando la vista se ejecuta por primera vez, solo su érbol de consulta se almacena en la cache’ de procedimientos. Cada vez que se tiene acceso a una vista, su plan de ejecucion se vuelve a compilar.
V istas horizontales
En las vistas horizontales se restringe el acceso de un usuario {micamente en las mas seleccionadas de una tabla. Por ejemplo, en la vista Slgulente se muestran solamente los vendedores de la regién Este.
_,.. mmmxrmm“
Si queremos ver la informacién de la vista recién creada, basta con utihzar la‘ sentenc1a SELECT sobre la vista (lo mismo que si fuera una tabla).
En la consulta siguiente se crea una vista que contiene fmicamente las oficinas de la regién Este y se muestra su contenido.
Vistas verticales
En las Vistas verticales se restringe el acceso de un-usuario {micamente a determlnadas columnas seleccionadas de una tabla. Por ejemplo, en la vista siguiente se muestran solamente el m'lmero de empleado el nombre y la oficina de representacién para todos los vendedores (y se muestra su contenido).
Vistas fila/columna
Es muy comlin utilizar vistas que dividan una tabla fuente tanto horizontal como verticalmente. Por ejemplo, la vista que se crea a continuacién contiene e] m’lmero de cliente, el nombre de la empresa y el limite de crédito de todos los clientes asignados a1 empleado mimero 105.
Vistas agrupadas
Se denominan vistas agrupadas las que contienen una cléusula GROUP BY que permite agrupar filas relacionadas de datos y producir una f11a de resultados para
cada grupo que resume los datos de 686 grupo. En la consulta siguiente se crea una Vista que contiene datos de pedidos resumidos por cada vendedor.
Vistas compuestas
Las vistas compuestas se crean especiflcando en la definicién de la vista una consulta que involucre dos o més tablas. De esta forma, la vista extrae sus datos de dos o més tablas y presenta los resultados como una {mica tabla virtual. Este tipo de vistas suele simplificar las consultas multitabla. Como ejemplo, creamos una vista en la tabla PEDIDOS que muestre los nombres de los clientes y de los empleados en vez de sus nL’Imeros.
Actualizacién de vistas
La mayon’a de las vistas suelen actualizarse realizando consultas INSERT 0
UPDATE sobre ellas, pero hay que tener presentes las siguientes reglas:
No se debe especiflcar DISTINCT para que las filas duplicadas no se eliminen de los resultados de las consultas.
La cléusula FROM debe especiflcar solo una tabla actualizable.
Cada elemento de seleccion debe ser una referencia de columna simple (no puede contener expresiones, columnas calculadas ni funciones de columna).
La cléusula WHERE no debe incluir una subconsulta. La consulta no debe incluir una cléusula GROUP BY 0 HAVING.
Como ejemplo introduciremos en la vista de oficinaeste (creada a1 principio
de este capitulo) una fila de valores nuevos.
WWW
Si 56 quiere que los datos pennanecezcan visibles en toda la Vista después de confirmar las modificaciones en ella, deberé crearse la Vista con la 0pci6n WITH CHECK OPTION. A continuacién, se presenta un ejemplo.