¿Cuándo y por qué alguien decide que necesita crear una Vista en su base de datos? ¿Por qué no simplemente ejecutar un procedimiento almacenado normal o seleccionar?
sql
sql-server
database
tsql
Curandero
fuente
fuente
Respuestas:
Una vista proporciona varios beneficios.
1. Las vistas pueden ocultar la complejidad
Si tiene una consulta que requiere unir varias tablas, o tiene cálculos o lógica compleja, puede codificar toda esa lógica en una vista, luego seleccionar de la vista como lo haría con una tabla.
2. Las vistas se pueden usar como un mecanismo de seguridad
Una vista puede seleccionar ciertas columnas y / o filas de una tabla (o tablas), y los permisos establecidos en la vista en lugar de las tablas subyacentes. Esto permite mostrar solo los datos que un usuario necesita ver.
3. Las vistas pueden simplificar el soporte de código heredado
Si necesita refactorizar una tabla que rompería mucho código, puede reemplazar la tabla con una vista del mismo nombre. La vista proporciona exactamente el mismo esquema que la tabla original, mientras que el esquema real ha cambiado. Esto evita que el código heredado que hace referencia a la tabla se rompa, lo que le permite cambiar el código heredado cuando lo desee.
Estos son solo algunos de los muchos ejemplos de cómo las vistas pueden ser útiles.
fuente
Entre otras cosas, se puede usar para seguridad. Si tiene una tabla de "clientes", es posible que desee dar a todos sus vendedores acceso a los campos de nombre, dirección, código postal, etc., pero no credit_card_number. Puede crear una vista que solo incluya las columnas a las que necesitan acceso y luego otorgarles acceso en la vista.
fuente
Select name, address, zipcode from customer
no serviría el propósito en lugar decreating a view
?select * from customer
que les da acceso a todo. Si les da acceso a la vista y no a la tabla, no podrán acceder a los campos que no están en la vista.Una vista es una encapsulación de una consulta. Las consultas que se convierten en vistas tienden a ser complicadas y, como tal, guardarlas como una vista para su reutilización puede ser ventajoso.
fuente
Por lo general, creo vistas para desnormalizar y / o agregar datos utilizados con frecuencia para fines de informes.
EDITAR
A modo de elaboración, si tuviera una base de datos en la que algunas de las entidades fueran persona, empresa, función, tipo de propietario, pedido, detalle del pedido, dirección y teléfono, donde la tabla de personas almacenaba tanto empleados como contactos y la dirección y Las tablas telefónicas almacenaron números de teléfono tanto para personas como para empresas, y el equipo de desarrollo se encargó de generar informes (o hacer que los datos de informes sean accesibles para los no desarrolladores), como ventas por empleado o ventas por cliente, o ventas por región, ventas por mes , clientes por estado, etc. Crearía un conjunto de vistas que desnormalizarían las relaciones entre las entidades de la base de datos para que estuviera disponible una vista más integrada (sin juego de palabras) de las entidades del mundo real. Algunos de los beneficios podrían incluir:
fuente
Varias razones: si tiene uniones complicadas, a veces es mejor tener una vista para que cualquier acceso siempre tenga las uniones correctas y los desarrolladores no tengan que recordar todas las tablas que puedan necesitar. Normalmente, esto podría ser para una aplicación financiera en la que sería extremadamente importante que todos los informes financieros se basen en el mismo conjunto de datos.
Si tiene usuarios que desea limitar los registros que pueden ver, puede usar una vista, darles acceso solo a la vista, no a las tablas subyacentes, y luego consultar la vista
Crystal Reports parece preferir usar vistas a los procesos almacenados, por lo que las personas que escriben muchos informes tienden a usar muchas vistas
Las vistas también son muy útiles al refactorizar bases de datos. A menudo puede ocultar el cambio para que el código anterior no lo vea creando una vista. Lea sobre la refactorización de bases de datos para ver cómo funciona esto, ya que es una forma muy poderosa de refactorizar.
fuente
La principal ventaja de una vista sobre un procedimiento almacenado es que puede usar una vista como si fuera una tabla. Es decir, se puede hacer referencia a una vista directamente en la
FROM
cláusula de una consulta. EjSELECT * FROM dbo.name_of_view
.Casi de cualquier otra forma, los procedimientos almacenados son más potentes. Puede pasar en los parámetros, incluyendo
out
los parámetros que permiten eficazmente a regresar varios valores a la vez, se puede hacerSELECT
,INSERT
,UPDATE
, yDELETE
operaciones, etc., etc.Si desea la capacidad de una Vista para realizar consultas desde dentro de la
FROM
cláusula, pero también desea poder pasar parámetros, también hay una manera de hacerlo. Se llama una función con valores de tabla.Aquí hay un artículo bastante útil sobre el tema:
http://databases.aspfaq.com/database/should-i-use-a-view-a-stored-procedure-or-a-user-defined-function.html
EDITAR: Por cierto, esto plantea la pregunta, ¿qué ventaja tiene una vista sobre una función con valores de tabla? No tengo una respuesta realmente buena para eso, pero notaré que la sintaxis de T-SQL para crear una vista es más simple que para una función con valores de tabla, y los usuarios de su base de datos pueden estar más familiarizados con las vistas.
fuente
Puede funcionar como un buen "intermediario" entre su ORM y sus tablas.
Ejemplo:
Teníamos una tabla de Persona que necesitábamos para cambiar la estructura, de modo que la columna SomeColumn se movería a otra tabla y tendría una relación de uno a muchos.
Sin embargo, la mayoría del sistema, con respecto a la Persona, todavía usaba SomeColumn como una sola cosa, no muchas cosas. Usamos una vista para unir todas las Columnas y ponerlas en la vista, que funcionó muy bien.
Esto funcionó porque la capa de datos había cambiado, pero el requisito comercial no había cambiado fundamentalmente, por lo que los objetos comerciales no tenían que cambiar. Si los objetos comerciales tuvieran que cambiar, no creo que esta hubiera sido una solución viable, pero las opiniones definitivamente funcionan como un buen punto medio.
fuente
Centrarse en vistas de datos específicos permite a los usuarios centrarse en datos específicos que les interesan y en las tareas específicas de las que son responsables. Los datos innecesarios pueden quedar fuera de la vista. Esto también aumenta la seguridad de los datos porque los usuarios solo pueden ver los datos definidos en la vista y no los datos de la tabla subyacente. Para obtener más información sobre el uso de vistas con fines de seguridad, consulte Uso de vistas como mecanismos de seguridad.
Para simplificar la manipulación de datos Las vistas pueden simplificar la forma en que los usuarios manipulan los datos. Puede definir combinaciones, proyecciones, consultas UNION y consultas SELECT de uso frecuente como vistas para que los usuarios no tengan que especificar todas las condiciones y calificaciones cada vez que se realiza una operación adicional en esos datos. Por ejemplo, una consulta compleja que se utiliza para informar y realiza subconsultas, uniones externas y agregación para recuperar datos de un grupo de tablas se puede crear como una vista. La vista simplifica el acceso a los datos porque la consulta subyacente no tiene que escribirse o enviarse cada vez que se genera el informe; la vista se consulta en su lugar. Para más información sobre la manipulación de datos.
También puede crear funciones en línea definidas por el usuario que operan lógicamente como vistas parametrizadas, o vistas que tienen parámetros en condiciones de búsqueda de la cláusula WHERE. Para obtener más información, consulte Funciones definidas por el usuario en línea.
Para personalizar las vistas de datos, permita que diferentes usuarios vean los datos de diferentes maneras, incluso cuando usan los mismos datos simultáneamente. Esto es particularmente ventajoso cuando los usuarios con muchos intereses y niveles de habilidad diferentes comparten la misma base de datos. Por ejemplo, se puede crear una vista que recupere solo los datos de los clientes con los que trata un administrador de cuentas. La vista puede determinar qué datos recuperar en función del ID de inicio de sesión del administrador de cuentas que utiliza la vista.
Para exportar e importar datos Las vistas se pueden usar para exportar datos a otras aplicaciones. Por ejemplo, es posible que desee utilizar las tablas de tiendas y ventas en la base de datos de pubs para analizar los datos de ventas con Microsoft® Excel. Para hacer esto, puede crear una vista basada en las tablas de tiendas y ventas. Luego puede usar la utilidad bcp para exportar los datos definidos por la vista. Los datos también se pueden importar a ciertas vistas desde archivos de datos utilizando la utilidad bcp o la instrucción BULK INSERT, siempre que las filas se puedan insertar en la vista utilizando la instrucción INSERT. Para obtener más información sobre las restricciones para copiar datos en vistas, vea INSERTAR. Para obtener más información sobre el uso de la utilidad bcp y la instrucción BULK INSERT para copiar datos hacia y desde una vista, consulte Copiar ao desde una vista.
Para combinar datos particionados El operador de conjunto Transact-SQL UNION se puede usar dentro de una vista para combinar los resultados de dos o más consultas de tablas separadas en un único conjunto de resultados. Esto aparece para el usuario como una sola tabla llamada vista particionada. Por ejemplo, si una tabla contiene datos de ventas para Washington y otra tabla contiene datos de ventas para California, se podría crear una vista desde la UNIÓN de esas tablas. La vista representa los datos de ventas para ambas regiones. Para usar vistas particionadas, crea varias tablas idénticas, especificando una restricción para determinar el rango de datos que se pueden agregar a cada tabla. La vista se crea utilizando estas tablas base. Cuando se consulta la vista, SQL Server determina automáticamente qué tablas se ven afectadas por la consulta y solo hace referencia a esas tablas. Por ejemplo, si una consulta especifica que solo se requieren datos de ventas para el estado de Washington, SQL Server lee solo la tabla que contiene los datos de ventas de Washington; No se accede a otras tablas.
Las vistas particionadas pueden basarse en datos de múltiples fuentes heterogéneas, como servidores remotos, no solo en tablas en la misma base de datos. Por ejemplo, para combinar datos de diferentes servidores remotos, cada uno de los cuales almacena datos para una región diferente de su organización, puede crear consultas distribuidas que recuperen datos de cada fuente de datos y luego crear una vista basada en esas consultas distribuidas. Cualquier consulta solo lee datos de las tablas en los servidores remotos que contienen los datos solicitados por la consulta; no se accede a los otros servidores a los que hacen referencia las consultas distribuidas en la vista.
Cuando particiona datos en varias tablas o servidores múltiples, las consultas que acceden solo a una fracción de los datos pueden ejecutarse más rápido porque hay menos datos para escanear. Si las tablas están ubicadas en diferentes servidores, o en una computadora con múltiples procesadores, cada tabla involucrada en la consulta también se puede escanear en paralelo, mejorando así el rendimiento de la consulta. Además, las tareas de mantenimiento, como la reconstrucción de índices o la copia de seguridad de una tabla, pueden ejecutarse más rápidamente. Al usar una vista particionada, los datos siguen apareciendo como una sola tabla y pueden consultarse como tales sin tener que hacer referencia a la tabla subyacente correcta manualmente.
Las vistas particionadas se pueden actualizar si se cumple alguna de estas condiciones: se define un desencadenador INSTEAD OF en la vista con lógica para admitir las instrucciones INSERT, UPDATE y DELETE.
Tanto la vista como las instrucciones INSERT, UPDATE y DELETE siguen las reglas definidas para vistas particionadas actualizables. Para obtener más información, vea Crear una vista particionada.
https://technet.microsoft.com/en-us/library/aa214282(v=sql.80).aspx#sql:join
fuente
Aquí hay dos razones comunes:
Puedes usarlo por seguridad. No otorgue permisos en la tabla principal y cree vistas que limiten el acceso a columnas o filas y otorgue permisos a los usuarios para ver la vista.
Puede usarlo para su conveniencia. Une algunas tablas que usas juntas todo el tiempo en la vista. Esto puede hacer que las consultas sean consistentes y fáciles.
fuente
Hay más de una razón para hacer esto. En ocasiones, las consultas de combinación comunes son fáciles, ya que se puede consultar el nombre de una tabla en lugar de realizar todas las combinaciones.
Otra razón es limitar los datos a diferentes usuarios. Entonces, por ejemplo:
Tabla1: Columnas: USER_ID; USERNAME; SSN
Los usuarios administradores pueden tener privilegios en la tabla real, pero los usuarios a los que no desea tener acceso para decir el SSN, crean una vista como
Luego, deles privilegios para acceder a la vista y no a la mesa.
fuente
Las vistas pueden ser una bendición cuando se realizan informes en bases de datos heredadas. En particular, puede usar nombres de tablas sensuales en lugar de nombres crípticos de 5 letras (¡donde 2 de esos son un prefijo común!), O nombres de columna llenos de abreviaturas que estoy seguro de que tenían sentido en ese momento.
fuente
En general, utilizo vistas para hacer la vida más fácil, obtengo detalles extendidos de alguna entidad que se almacena en varias tablas (elimina muchas uniones en el código para mejorar la legibilidad) y, a veces, para compartir datos en múltiples bases de datos o incluso para hacer que las inserciones sean más fáciles de leer.
fuente
Aquí se explica cómo usar una Vista junto con permisos para limitar las columnas que un usuario puede actualizar en la tabla.
fuente
Cuando quiero ver una instantánea de una (s) tabla (s), y / o ver (en forma de solo lectura)
fuente
Me gusta usar vistas sobre procedimientos almacenados cuando solo estoy ejecutando una consulta. Las vistas también pueden simplificar la seguridad, se pueden usar para facilitar las inserciones / actualizaciones en varias tablas y se pueden usar para capturar / materializar datos (ejecutar una consulta de larga duración y mantener los resultados en caché).
He utilizado vistas materializadas para ejecutar consultas de anhelo que no es necesario que se mantengan precisas en tiempo real.
fuente
Las vistas también dividen la configuración y las tablas muy complejas en fragmentos manejables que se pueden consultar fácilmente. En nuestra base de datos, todo nuestro sistema de gestión de tablas se divide en vistas desde una tabla grande.
fuente
Esto no responde a su pregunta exactamente, pero pensé que valdría la pena mencionar las Vistas materializadas . Mi experiencia es principalmente con Oracle, pero supuestamente SQL-Server es bastante similar.
Utilizamos algo similar en nuestra arquitectura para abordar los problemas de rendimiento de XML. Nuestros sistemas están diseñados con una gran cantidad de datos almacenados como XML en una fila y las aplicaciones pueden necesitar consultar valores particulares dentro de él. El manejo de muchos tipos de XML y la ejecución de XPaths en un gran número de filas tiene un gran impacto en el rendimiento, por lo que utilizamos una forma de vistas materializadas para extraer los nodos XML deseados en una tabla relacional cada vez que cambia la tabla base. Esto efectivamente proporciona una instantánea física de la consulta en un punto en el tiempo en lugar de vistas estándar que ejecutarían su consulta a pedido.
fuente
Veo un procedimiento almacenado más como un método que puedo invocar contra mis datos, mientras que para mí una vista proporciona un mecanismo para crear una versión sintética de los datos base contra la cual se pueden crear consultas o procedimientos almacenados. Crearé una vista cuando la simplificación o la agregación tengan sentido. Escribiré un procedimiento almacenado cuando quiera proporcionar un servicio muy específico.
fuente
Una cosa curiosa sobre las vistas es que Microsoft Access las ve como tablas: cuando adjunta un front-end de Microsoft Access a una base de datos SQL usando ODBC, ve las tablas y las vistas en la lista de tablas disponibles. Entonces, si está preparando informes complicados en MS Access, puede dejar que el servidor SQL se una y realice consultas, y simplifique enormemente su vida. Lo mismo para preparar una consulta en MS Excel.
fuente
Solo tengo aproximadamente 10 vistas en mis bases de datos de producción. Yo uso varios para las columnas que uso todo el tiempo. Un conjunto que uso proviene de 7 tablas, algunas con uniones externas y en lugar de reescribir que constantemente solo tengo que llamar a esa vista en una selección y hacer una o 2 uniones. Para mí es solo un ahorro de tiempo.
fuente
Estoy creando xxx que asigna todas las relaciones entre una tabla principal (como la tabla de Productos) y las tablas de referencia (como ProductType o ProductDescriptionByLanguage). Esto creará una vista que me permitirá recuperar un producto y todos sus detalles traducidos de sus claves externas a su descripción. Entonces puedo usar un ORM para crear objetos para construir fácilmente cuadrículas, cuadros combinados, etc.
fuente
Piense en ello como refactorizando su esquema de base de datos.
fuente
Creo que primero. Para ocultar la complejidad de la consulta. Es muy apropiado para las vistas. Cómo cuando normalizamos las tablas de la base de datos aumenta. Ahora es muy difícil obtener datos cuando aumenta el número de tablas. Así que la mejor manera de manejarlo es seguir las vistas. Si me equivoco, corrígeme.
fuente
Creamos una vista para limitar o restringir el acceso a todas las filas / columnas de una tabla. Si el propietario desea que solo se compartan filas / columnas específicas o limitadas, creará una vista con esas columnas.
fuente
Por seguridad: otorga a cada usuario permiso para acceder a la base de datos solo a través de un pequeño conjunto de vistas que contienen los datos específicos que el usuario o grupo de usuarios está autorizado a ver, lo que restringe el acceso del usuario a otros datos.
Simplicidad para las consultas y la estructura : una vista puede extraer datos de varias tablas y presentar una sola tabla, simplificando la información y convirtiendo las consultas de varias tablas en consultas de una sola tabla para una vista y brinda a los usuarios una vista específica de la estructura de la base de datos, presentando la base de datos como un conjunto de tablas virtuales específicas para usuarios particulares o grupos de usuarios.
Para crear una estructura de base de datos coherente : las vistas presentan una imagen coherente y sin cambios de la estructura de la base de datos, incluso si se cambian las tablas de origen subyacentes.
fuente