vistas vista ventajas varias usar una tipos tablas parametros definicion datos crear creacion consultas con sql views rdbms-agnostic

ventajas - vistas sql definicion



¿Para qué sirven las vistas? (14)

Solo intento tener una idea general de las vistas que se usan en RDBMS. Es decir, sé lo que es una vista y cómo hacer una. También sé para qué los he usado en el pasado.

Pero quiero asegurarme de que entiendo perfectamente para qué es útil una vista y para qué no debería ser útil una vista. Más específicamente:

  1. ¿Para qué sirve una vista?
    • ¿Hay alguna situación en la que es tentador usar una vista cuando no debes usar una?
    • ¿Por qué usaría una vista en lugar de algo así como una función con valores de tabla o viceversa?
    • ¿Hay alguna circunstancia que una vista pueda ser útil y que no sea evidente a primera vista?

(Y para que quede constancia, algunas de estas preguntas son intencionalmente ingenuas. Esto es, en parte, una verificación conceptual).


Además de lo que otros han declarado, las vistas también pueden ser útiles para eliminar consultas SQL más completas de la aplicación.

Como ejemplo, en lugar de hacerlo en una aplicación que hace:

sql = "select a, b from table1 union select a, b from table2";

Puedes abstraer eso a una vista:

create view union_table1_table2_v como
seleccione a, b de la tabla1
Unión
seleccione a, b de la tabla2

y en el código de la aplicación, simplemente tiene:

sql = "select a, b from union_table1_table2_v";

Además, si las estructuras de datos cambian alguna vez, no tendrá que cambiar el código de la aplicación, volver a compilar ni volver a desplegar. simplemente cambiaría la vista en el db.


Cada vez que necesite [my_interface]! = [User_interface].

Ejemplo:

TABLA A:

  • carné de identidad
  • información

VER para la TABLA A:

  • Información al cliente

esta es una forma en que puede esconder la identificación del cliente y cambiar el nombre de la información a un nombre más detallado a la vez.

La vista utilizará el índice subyacente para la identificación de la clave principal, por lo que no verá una pérdida de rendimiento, solo una mejor abstracción de la consulta de selección.


El OP preguntó si había situaciones en las que podría ser tentador usar una vista, pero no es apropiado.

Lo que no quiere usar una vista es un sustituto de combinaciones complejas. Es decir, no permita que su hábito de programación procedural de dividir un problema en partes más pequeñas lo lleve a utilizar varias vistas unidas en lugar de una unión más grande. Hacerlo matará la eficiencia del motor de la base de datos ya que básicamente está haciendo varias consultas separadas en lugar de una más grande.

Por ejemplo, supongamos que tiene que unir las tablas A, B, C y D juntas. Puede sentirse tentado de hacer una vista desde las tablas A y B y una vista desde C & D, luego unir las dos vistas juntas. Es mucho mejor simplemente unir A, B, C y D en una consulta.


En cierto modo, una vista es como una interfaz. Puede cambiar la estructura de la tabla subyacente todo lo que desee, pero la vista le permite al código no tener que cambiar.

Las vistas son una buena forma de proporcionar algo simple para informar escritores. Si los usuarios de su empresa desean acceder a los datos de algo parecido a Crystal Reports, puede darles algunas vistas en su cuenta que simplifiquen los datos, incluso pueden desnormalizarlos.


En cierto sentido, las vistas se desnormalizan. La desnormalización a veces es necesaria para proporcionar datos de una manera más significativa. Esto es lo que hacen muchas aplicaciones de todos modos a través del modelado de dominio en sus objetos. Ayudan a presentar los datos de una manera que se aproxima más a la perspectiva de una empresa.


Las respuestas hasta ahora son correctas: las vistas son buenas para proporcionar seguridad, desnormalización (aunque hay mucho dolor en ese camino si se hace mal), abstracción del modelo de datos, etc.

Además, las vistas se usan comúnmente para implementar la lógica comercial (un usuario caducado es un usuario que no ha iniciado sesión en los últimos 40 días, ese tipo de cosas).


Las vistas guardan muchas sentencias JOIN complejas repetidas en sus scripts SQL. Puede encapsular algunos JOIN complejos en alguna vista y llamarlos en su instrucción SELECT siempre que sea necesario. Esto a veces sería útil, directo y más fácil que escribir las instrucciones de combinación en cada consulta.


Las vistas ocultan la complejidad de la base de datos. Son geniales por muchas razones y son útiles en muchas situaciones, pero si tiene usuarios que pueden escribir sus propias consultas e informes, puede usarlos como medida de seguridad para asegurarse de que no se envíen mal diseñados. consultas con desagradables uniones cartesianas que anulan su servidor de base de datos.


Las vistas pueden centralizar o consolidar datos. En donde estoy, tenemos varias bases de datos diferentes en un par de servidores vinculados diferentes. Cada base de datos contiene datos para una aplicación diferente. Algunas de esas bases de datos contienen información que se relaciona con varias aplicaciones diferentes. Lo que haremos en esas circunstancias es crear una vista en la base de datos de esa aplicación que simplemente extraiga datos de la base de datos donde realmente se almacenan los datos, de modo que las consultas que escribimos no parezcan estar pasando por diferentes bases de datos.


Las vistas pueden usarse para proporcionar seguridad (es decir, los usuarios pueden tener acceso a vistas que solo acceden a ciertas columnas en una tabla), las vistas pueden proporcionar seguridad adicional para actualizaciones, inserciones, etc. Las vistas también proporcionan una forma de alias de nombres de columna (como sp) pero las vistas son más un aislamiento de la tabla real.


Quería resaltar el uso de vistas para informar. A menudo, existe un conflicto entre normalizar las tablas de la base de datos para acelerar el rendimiento, especialmente para editar e insertar datos (utiliza OLTP) y desnormalizar para reducir el número de combinaciones de tabla para consultas de informes y análisis (utiliza OLAP). Por necesidad, OLTP generalmente gana, porque la entrada de datos debe tener un rendimiento óptimo. Por lo tanto, la creación de vistas para un rendimiento óptimo de los informes puede ayudar a satisfacer ambas clases de usuarios (entrada de datos y visores de informes).


Recuerdo un SELECT muy largo que involucraba a varios UNION. Cada UNION incluía un join a una tabla de precios que fue creada sobre la marcha por un SELECT que era bastante largo y difícil de entender. Creo que habría sido una buena idea tener una visión para crear la tabla de precios. Habría acortado la SELECCIÓN general en aproximadamente la mitad.

No sé si el DB evaluaría la vista una vez, o una vez cada vez que se invocara. ¿Nadie sabe? Si lo primero, usar una vista mejoraría el rendimiento.


Una vista es simplemente una declaración almacenada, llamada SELECT. Piense en vistas como las funciones de la biblioteca.


1) ¿Para qué sirve una vista?

IOPO en un solo lugar

• Ya sea que considere los datos en sí o las consultas que hacen referencia a las tablas unidas, la utilización de una vista evita la redundancia innecesaria.

• Las vistas también proporcionan una capa de abstracción que impide el acceso directo a las tablas (y las esposas resultantes que hacen referencia a las dependencias físicas). De hecho, creo que es una buena práctica 1 ofrecer solo acceso abstraído a sus datos subyacentes (utilizando vistas y funciones con valores de tabla), incluyendo vistas tales como

CREATE VIEW AS
SELECT * FROM tblData


1 Tengo que admitir que hay una gran cantidad de "Haz lo que digo, no lo que hago" en ese consejo;)

2) ¿Hay alguna situación en la cual es tentador usar una vista cuando no debes usar una?

El rendimiento en las uniones de vista solía ser una preocupación (por ejemplo, SQL 2000). No soy un experto, pero no me he preocupado por un tiempo. (Tampoco puedo pensar en dónde estoy actualmente usando view joins).

Otra situación en la que una vista puede ser excesiva es cuando la vista solo se referencia desde una ubicación de llamada y, en su lugar, se puede usar una tabla derivada. Al igual que un tipo anónimo es preferible a una clase en .NET si el tipo anónimo solo se utiliza / hace referencia una vez.

• Consulte la descripción de la tabla derivada en http://msdn.microsoft.com/en-us/library/ms177634.aspx

3) ¿Por qué usarías una vista en lugar de algo así como una función con valores de tabla o viceversa?

(Aparte de los motivos de rendimiento) Una función de valor de tabla es funcionalmente equivalente a una vista parametrizada. De hecho, un caso de uso de función de tabla simple común es simplemente agregar un filtro de cláusula WHERE a una vista existente en un solo objeto.

4) ¿Hay alguna circunstancia que una vista pueda ser útil y que no sea aparente a primera vista?

No puedo pensar en ningún uso no aparente de la parte superior de mi cabeza. (Supongo que si pudiera, eso los haría aparentes;)