¿Cuándo usar una vista en lugar de una tabla?

108

¿Cuándo debería usarse realmente una vista sobre una tabla real? ¿Qué beneficios debo esperar que produzca?

En general, ¿cuáles son las ventajas de utilizar una vista sobre una mesa? ¿No debería diseñar la tabla de la forma en que debería verse la vista en primer lugar?

bevacqua
fuente

Respuestas:

80

Oh, hay muchas diferencias que deberás considerar

Vistas para la selección:

  1. Las vistas proporcionan abstracción sobre las tablas. Puede agregar / eliminar campos fácilmente en una vista sin modificar su esquema subyacente
  2. Las vistas pueden modelar uniones complejas fácilmente.
  3. Las vistas pueden ocultarle cosas específicas de la base de datos. Por ejemplo, si necesita hacer algunas comprobaciones usando la función Oracles SYS_CONTEXT o muchas otras cosas
  4. Puede administrar fácilmente sus SUBVENCIONES directamente en las vistas, en lugar de en las tablas reales. Es más fácil de administrar si sabe que un determinado usuario solo puede acceder a una vista.
  5. Las vistas pueden ayudarte con la compatibilidad con versiones anteriores. Puede cambiar el esquema subyacente, pero las vistas pueden ocultar esos hechos a un cliente determinado.

Vistas para inserción / actualizaciones:

  1. Puede manejar problemas de seguridad con vistas utilizando funciones como la cláusula "WITH CHECK OPTION" de Oracle directamente en la vista.

Inconvenientes

  1. Pierde información sobre las relaciones (claves primarias, claves externas)
  2. No es obvio si podrá insertar / actualizar una vista, porque la vista le oculta sus combinaciones subyacentes.
Lukas Eder
fuente
3
Pregunta rápida: ¿las vistas son "permanentes" o solo duran la duración de la sesión? Razón por la que pregunto: tenemos un sistema que a veces falla en medio de una larga ejecución de código. Mitigo esto mordiendo partes del código en tablas intermedias que guardan los resultados intermedios. Entonces, si el sistema funciona antes de que se complete el código, solo tengo que continuar desde la última tabla temporal guardada. Podría cambiar a usar vistas si ofrecieran la misma permanencia. De lo contrario, seguiré haciendo lo mismo y bajaré las temperaturas al final de la carrera. ¡Gracias!
ouonomos
8
@ouonomos: una vista normal no contiene ningún dato. Es solo una declaración SQL almacenada, es decir, una vista de los datos subyacentes. Algunas bases de datos (por ejemplo, Oracle, PostgreSQL) admiten vistas materializadas, que almacenan la "vista" temporalmente en otra tabla para un acceso más rápido. Esto se hace para acelerar el acceso de lectura cuando la vista es compleja. Pero eso no le ayuda en su caso porque una vista materializada sigue siendo una vista, no datos en sí misma. Probablemente su enfoque esté bien.
Lukas Eder
44

Las vistas pueden:

  • Simplifique una estructura de tabla compleja
  • Simplifique su modelo de seguridad permitiéndole filtrar datos confidenciales y asignar permisos de una manera más sencilla
  • Le permite cambiar la lógica y el comportamiento sin cambiar la estructura de salida (la salida sigue siendo la misma, pero el SELECT subyacente podría cambiar significativamente)
  • Aumente el rendimiento (vistas indexadas de Sql Server)
  • Ofrezca optimización de consultas específicas con la vista que podría ser difícil de obtener de otra manera

Y no debe diseñar tablas para que coincidan con las vistas . Su modelo base debe preocuparse por el almacenamiento y la recuperación eficientes de los datos. Las vistas son en parte una herramienta que mitiga las complejidades que surgen de un modelo eficiente y normalizado al permitirle abstraer esa complejidad.

Además, preguntar "¿Cuáles son las ventajas de usar una vista sobre una mesa?" No es una gran comparación. No puede prescindir de tablas, pero puede prescindir de vistas. Cada uno existe por una razón muy diferente. Las tablas son el modelo concreto y las vistas son una vista abstraída.

Paul Sasik
fuente
1
Las vistas +1 son en parte una herramienta que mitiga las complejidades que surgen de un modelo eficiente y normalizado al permitirle abstraer esa complejidad.
metdos
34

Las vistas son aceptables cuando necesita asegurarse de que se sigue una lógica compleja en todo momento. Por ejemplo, tenemos una vista que crea los datos brutos necesarios para todos los informes financieros. Al hacer que todos los informes utilicen esta vista, todos trabajan con el mismo conjunto de datos, en lugar de que un informe utilice un conjunto de uniones y otro se olvide de utilizar uno que dé resultados diferentes.

Las vistas son aceptables cuando desea restringir a los usuarios a un subconjunto particular de datos. Por ejemplo, si no elimina registros sino que solo marca el actual como activo y las versiones anteriores como inactivas, desea utilizar una vista para seleccionar solo los registros activos. Esto evita que las personas se olviden de poner la cláusula where en la consulta y obtengan malos resultados.

Las vistas se pueden utilizar para garantizar que los usuarios solo tengan acceso a un conjunto de registros; por ejemplo, una vista de las tablas para un cliente en particular y la ausencia de derechos de seguridad en las tablas puede significar que los usuarios de ese cliente solo pueden ver los datos. para ese cliente.

Las vistas son muy útiles al refactorizar bases de datos.

Las vistas no son aceptables cuando usa vistas para llamar a vistas que pueden resultar en un rendimiento horrible (al menos en SQL Server). Casi perdemos un cliente multimillonario porque alguien decidió abstraer la base de datos de esa manera y el rendimiento fue terrible y los tiempos de espera frecuentes. Tuvimos que pagar por la reparación también, no por el cliente, ya que el problema de rendimiento fue completamente culpa nuestra. Cuando las vistas llaman a las vistas, tienen que generar completamente la vista subyacente. He visto esto donde la vista llamó una vista que llamó a una vista y se generaron tantos millones de registros para ver los tres que el usuario finalmente necesitaba. Recuerdo que una de estas vistas tomó 8 minutos para hacer un conteo simple (*) de los registros. Vistas que llaman vistas son una idea muy mala.

Las vistas a menudo son una mala idea para actualizar registros, ya que normalmente solo puede actualizar campos de la misma tabla (nuevamente, esto es SQL Server, otras bases de datos pueden variar). Si ese es el caso, tiene más sentido actualizar directamente las tablas de todos modos para que sepa qué campos están disponibles.

HLGEM
fuente
1
No sabía que había un problema de rendimiento con la vista de llamadas. Eso parece extraño. ¿No lo maneja correctamente el optimizador de consultas? ¿Qué versión de SQL Server se utilizó en su caso?
Patrick Honorez
7

Las vistas son útiles cuando necesita seleccionar entre varias tablas o simplemente para obtener un subconjunto de una tabla.

Debe diseñar sus tablas de tal manera que su base de datos esté bien normalizada (duplicación mínima). Esto puede dificultar la consulta.

Las vistas son un poco separadas, lo que le permite ver los datos en las tablas de manera diferente a como están almacenados.

Oded
fuente
7

Una práctica común es ocultar uniones en una vista para presentar al usuario un modelo de datos más desnormalizado. Otros usos implican seguridad (por ejemplo, ocultando ciertas columnas y / o filas) o rendimiento (en caso de vistas materializadas)

TToni
fuente
6

Debes diseñar tu mesa SIN considerar las vistas.
Además de guardar uniones y condiciones, las Vistas tienen una ventaja de rendimiento: SQL Server puede calcular y guardar su plan de ejecución en la vista y, por lo tanto, hacerlo más rápido que las instrucciones SQL "sobre la marcha".
Ver también puede facilitar su trabajo con respecto al acceso de los usuarios a nivel de campo.

Patrick Honorez
fuente
5

En primer lugar, como sugiere el nombre, una vista es inmutable. eso es porque una vista no es más que una tabla virtual creada a partir de una consulta almacenada en la base de datos. Por eso tienes algunas características de las vistas:

  • puede mostrar solo un subconjunto de los datos
  • puede unir varias tablas en una sola vista
  • puede agregar datos en una vista (seleccione recuento)
  • vista no contienen datos, no necesitan ningún espacio de tabla, ya que son agregaciones virtuales de tablas subyacentes

por lo que hay una gran cantidad de casos de uso para los que las vistas se ajustan mejor que las tablas, solo piense en mostrar solo los usuarios activos en un sitio web. una vista sería mejor porque opera solo en un subconjunto de los datos que realmente están en su base de datos (usuarios activos e inactivos)

mira este artículo

Espero que esto haya ayudado ...

fasseg
fuente
2

Según Wikipedia ,

Las vistas pueden proporcionar muchas ventajas sobre las tablas:

  • Las vistas pueden representar un subconjunto de los datos contenidos en una tabla.
  • Las vistas pueden limitar el grado de exposición de las tablas subyacentes al mundo exterior: un usuario determinado puede tener permiso para consultar la vista, mientras se le niega el acceso al resto de la tabla base.

  • Las vistas pueden unir y simplificar varias tablas en una sola tabla virtual.

  • 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.

  • 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.

  • 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.

  • Las vistas pueden proporcionar seguridad adicional , según el motor SQL utilizado.

Loukan ElKadi
fuente