¿Cuál es una buena razón para utilizar vistas SQL?

98

Estoy leyendo la Biblia de SQL Server 2008 y estoy cubriendo la sección de vistas. Pero el autor realmente no explica el propósito de las opiniones. ¿Cuál es un buen uso de las vistas? ¿Debo usarlos en mi sitio web y cuáles son los beneficios de ellos?

Luke101
fuente
¿Podría proporcionarme los archivos de la base de datos de ese libro "SQL Server 2008 Bible"? El sitio web del autor está muerto y no puedo comunicarme con él.

Respuestas:

92

Otro uso que ninguna de las respuestas anteriores parece haber mencionado es la implementación más fácil de cambios en la estructura de la tabla.

Digamos que desea retirar una tabla ( T_OLD) que contiene datos para usuarios activos y, en su lugar, usar una nueva tabla con datos similares (nombrados T_NEW) pero que tenga datos para usuarios activos e inactivos, con una columna adicional active.

Si su (s) sistema (s) tiene miles de consultas que las tienen SELECT whatever FROM T_OLD WHERE whatever, tiene dos opciones para la implementación:

1) Cold Turkey : cambie la base de datos y, al mismo tiempo, cambie, pruebe y libere numerosos fragmentos de código que contenían dicha consulta. MUY difícil de hacer (o incluso coordinar), muy arriesgado. Malo.

2) Gradual : cambie la base de datos creando la T_NEWtabla, soltando la T_OLDtabla y en su lugar creando una VISTA llamada T_OLDque imita la T_OLDtabla al 100% (por ejemplo, la consulta de vista es SELECT all_fields_except_active FROM T_NEW WHERE active=1).

Eso le permitiría evitar la liberación de CUALQUIER código que se selecciona actualmente T_OLDy realizar los cambios para migrar el código T_OLDa T_NEWsu gusto.

Este es un ejemplo simple, hay otros mucho más involucrados.

PD Por otro lado, probablemente debería haber tenido una API de procedimiento almacenado en lugar de consultas directas de T_OLD, pero ese no es siempre el caso.

DVK
fuente
3
No conocía el término "API de procedimiento almacenado" y los pros / contras asociados y encontré útil este artículo: codinghorror.com/blog/2005/05/…
Jeff Widman
Siento llegar tarde a la fiesta, pero ¿qué pasa con la actuación? Si necesito uniones en la tabla original y me uniré a la Vista, ¿utilizará el mejor plan de ejecución?
Zikato
@Zikato sí, si es una vista indexada
LinkBerest
V Buena indicación
Afnan Ahmad
47

(Copiado del primer tutorial que apareció en una búsqueda de Google (el enlace ahora está muerto), pero tiene todos los beneficios que yo mismo habría escrito manualmente).

Las vistas tienen los siguientes beneficios:

  • Seguridad: los usuarios pueden acceder a las vistas mientras que las tablas subyacentes no son directamente accesibles. Esto permite que el DBA brinde a los usuarios solo los datos que necesitan, mientras protege otros datos en la misma tabla.
  • Simplicidad: las vistas se pueden utilizar para ocultar y reutilizar consultas complejas.
  • Simplificación o aclaración de nombres de columnas: las vistas se pueden utilizar para proporcionar alias en los nombres de las columnas para que sean más memorables y / o significativos.
  • Stepping Stone: las vistas pueden proporcionar un escalón en una consulta de "múltiples niveles". Por ejemplo, podría crear una vista de una consulta que contara el número de ventas que había realizado cada vendedor. Luego, puede consultar esa vista para agrupar a los vendedores por el número de ventas que han realizado.
David
fuente
Como me gusta tu respuesta y no veo mucho sentido agregar otra, ¿puedo sugerir dos adiciones a tu lista? Las vistas indexadas pueden mejorar el rendimiento. La ejecución de actualizaciones en las vistas en lugar de directamente en las tablas puede brindar una mayor confianza de que no actualizará incorrectamente esa tabla de producción clave :)
David Hall
Un punto más en su lista, a la mayoría de los administradores de bases de datos les gustaría usar la vista porque pueden ajustar una vista y la mayoría (no siempre) todas las consultas que usan esa vista se ajustarán.
Nitin Midha
Esta es la respuesta del 99% en mi libro.
John Steedman
Por cierto @David enlace roto
Manuel Jordan
El último punto, ¿no podemos usar una tabla temporal para eso?
Jiechao Wang
16

Algunas razones de Wikipedia :

Las vistas pueden ofrecer ventajas sobre las tablas:

  1. Las vistas pueden representar un subconjunto de los datos contenidos en una tabla
  2. Las vistas pueden unir y simplificar varias tablas en una sola tabla virtual
  3. Las vistas pueden actuar como tablas agregadas , donde el motor de la base de datos agrega datos (suma, promedio, etc.) y presenta los resultados calculados como parte de los datos.
  4. Las vistas pueden ocultar la complejidad de los datos ; por ejemplo, una vista podría aparecer como Sales2000 o Sales2001, dividiendo de forma transparente la tabla subyacente real
  5. Las vistas ocupan muy poco espacio para almacenar ; la base de datos contiene solo la definición de una vista, no una copia de todos los datos que presenta
  6. Dependiendo del motor SQL utilizado, las vistas pueden proporcionar seguridad adicional
  7. Las vistas pueden limitar el grado de exposición de una mesa o mesas al mundo exterior
user210748
fuente
14

Las VIEWS se pueden usar como secciones reutilizables de SELECT / CODE, que se pueden incluir en otras selecciones / consultas a las que se unirán, y usar varios filtros diferentes, sin tener que volver a crear todo el SELECT cada vez.

Esto también coloca la lógica en una sola ubicación, de modo que no tenga que cambiarla en todo el código base.

Mira esto

Elección entre procedimientos almacenados, funciones, vistas, activadores, SQL en línea

La principal belleza de una vista es que se puede usar como una tabla en la mayoría de las situaciones, pero a diferencia de una tabla, puede encapsular cálculos muy complejos y combinaciones de uso común. También puede usar prácticamente cualquier objeto en la base de datos, excepto los procedimientos almacenados. Las vistas son más útiles cuando siempre necesita unir el mismo conjunto de tablas, por ejemplo, un pedido con un detalle de pedido para obtener campos de cálculo de resumen, etc.

Adriaan Stander
fuente
6
Tenga mucho cuidado al hacer esto. Si usa vistas que llaman a otras vistas, puede crear un gran lío de rendimiento.
HLGEM
10

Una vista es una capa de abstracción y hace lo que hace cualquier buena capa de abstracción, incluido encapsular el esquema de la base de datos y protegerlo de las consecuencias de cambiar los detalles de implementación interna.

Es una interfaz.

dkretz
fuente
1
Siempre que no apile vistas en vistas para una mayor abstracción.
HLGEM
Creo que efectivamente he repudiado cualquier tipo de abstracción multinivel en bases de datos relacionales. Y tampoco llamo a procedimientos almacenados desde procedimientos almacenados. :)
dkretz
3

Este es un uso muy común del uso de vistas para restringir una entidad según algunos criterios.

Tabla: USUARIOS contiene todos los usuarios

Ver: ACTIVE_USERS contiene todos los usuarios, excepto aquellos que están suspendidos, baneados, esperando ser activados y que no cumplen con ningún criterio que pueda elegir definir en el futuro como parte de los requisitos activos. Esto hace que no sea necesario eliminar ninguna fila de su tabla USERS si decide no hacerlo porque ACTIVE_USERS siempre puede ocultar las filas no deseadas.

De esta manera, puede usar la tabla en sus páginas de administración de usuarios, pero el resto de la aplicación puede usar ACTIVE_USERS, ya que pueden ser los únicos usuarios que deberían poder ejecutar procesos y acceder / modificar datos.

Nefsu
fuente
2

Las vistas pueden permitirle combinar datos de varias tablas diferentes y formatearlos (combinar campos, dar nombres de campo más significativos, etc.) para que sea más fácil para los usuarios finales. Son una abstracción del modelo de base de datos. También se pueden utilizar para dar a los usuarios acceso a los datos de la tabla sin darles acceso directo a la tabla en sí.

TLiebe
fuente
2

Estas son algunas de las muchas razones para usar la vista en lugar de la tabla directamente

  • Simplicidad: las vistas se pueden utilizar para ocultar consultas complejas.
  • Seguridad: la vista puede ocultar información importante al usuario final al crear una vista en algunas columnas seleccionadas
  • Seguridad: tabla segura para cambiar su estructura usando VIEW.
  • Redundancia: reduzca el código redundante en cada procedimiento / consulta utilizando una vista común.
  • Cálculo: todos los cálculos se pueden realizar una vez en la consulta de vista.
  • Nombre significativo: la tabla puede tener un nombre para id como tbl_org_emp_id que puede tener un alias como [No de empleado] o algún nombre significativo.

De imexploring.com

Ali Adravi
fuente
1

Una pequeña lista de razones / usos comunes:

  • úselos para cambiar el formato o el 'aspecto' de los datos (es decir, puede unir un nombre y un apellido)

    realizar cálculos u otras búsquedas de datos

    desnormalizar datos (extraer datos de varias tablas en un solo lugar)

babosa
fuente
-6

¡Las vistas son malvadas! Evítelos si es posible y utilícelos solo por el motivo mencionado por DVK: migración temporal de datos.

Debe comprender que en una base de datos con 100 tablas es difícil recordar el propósito de cada tabla. Ahora, si agrega aquí otras 300 vistas, se convertirá en un completo desastre. Los 'amantes de la vista' tienden a usar vistas anidadas y luego usan las vistas anidadas en procedimientos almacenados. ¡Personalmente trabajo ahora con una base de datos donde hay Vistas anidadas en profundidad 4 veces! Entonces, para comprender la lógica más simple de un procedimiento almacenado, primero tengo que pasar por todas las vistas.

Dan
fuente
8
-1 Las vistas son buenas. Ellos pueden llegar a ser malo si se utilizan inadecuadamente - pero eso es cierto acerca de cualquier cosa.
NullUserException
1
Las vistas pueden ser malas si se usan mal. Las personas que las usan mal con más frecuencia parecen ser las que las usan para abstraer cosas y luego hacen lo que usted dice, llaman vistas que llaman vistas que llaman vistas hasta el punto en que es posible que deba materializar 10 millones de recrods antes de devolver un resultado. Un conjunto de 3. Las vistas que llaman directamente a las tablas pueden ser muy útiles.
HLGEM
@HGLEM ¿hay alguna forma de restringir las llamadas de vista desde otras vistas?
Igor Soloydenko