jueves, 17 de octubre de 2013

VISTAS

VISTAS
Las vistas se pueden definir como tablas virtuales basadas en una o más tablas o vistas y cuyos contenidos vienen definidos por una consulta sobre las mismas. Esta tabla virtual o consulta se le asigna un nombre y se almacena permanentemente en la BD, generando al igual que en las tablas una entrada en el diccionario de datos. Las vistas permiten que diferentes usuarios vean la BD desde diferentes perspectivas, así como restringir el acceso a los datos de modo que diferentes usuarios accedan sólo aciertas filas o columnas de una tabla. Desde el punto de vista del usuario, la vista es como una tabla real con filas y columnas, pero a diferencia de esta, sus datos no se almacenan físicamente en la BD. Las filas y columnas de datos visibles a través de la vista son los resultados producidos por la consulta que define la vista.

 CREACION DE VISTAS:

La cláusula CREATE VIEW permite la creación de vistas. La cláusula asigna un nombre a la vista y permite especificar la consulta que la define. Su sintaxis es: CREATE VIEW id vista [(columna,…)]AS especificación consulta; Opcionalmente se puede asignar un nombre a cada columna de la vista. Si se especifica, la lista de nombres de las columnas debe de tener el mismo número de elementos que el número de columnas producidas por la consulta. Si se omiten, cada columna de la vista adopta el nombre de la columna correspondiente en la consulta. Existen dos casos en losque es obligatoria la especificación de la lista de columnas:
1 – Cuando la consulta incluye columnas calculadas
2 – Cuando la consulta produce nombres idénticos.Según el propósito con el que se organizan las vistas, pueden clasificarse en lossiguientes tipos:

 Horizontales o por Restricción

Son las que restringen el acceso de un usuario a únicamente un conjunto de filas de unatabla.
EJEMPLO: Si se desea que un director de ventas vea sólo las filas de la tabla
RVENTAS, correspondientes a los vendedores de su región, se debería de definir una vista para cada región.
 CREATE VIEW repEste AS
SELECT *
FROM RVENTAS
WHERE oficina IN (SELECT n_oficina FROM OFICINASWHERE region = ‘Este’);

Las vistas horizontales son adecuadas cuando la tabla sobre la que se definen contienedatos que relacionan a varias organizaciones o usuarios, proporcionando una “tabla privada” para cada usuario compuesta únicamente de las filas necesarias para ese usuario en concreto.
OTRO EJEMPLO:
1. Definir una vista para el empleado nº 102 que contenga solo los pedidos emitidos, por los clientes asignados al mismo.
CREATE VIEW emplCientodos AS
SELECT *
FROM PEDIDOS
WHERE clie IN (SELECT num_clie
FROM CLIENTESWHERE rep_clie = 102);

Verticales o por proyección

Son aquellas que restringen el acceso de un usuario sólo a ciertas columnas de una tabla.
EJEMPLO:
El departamento de procesamiento de pedidos necesita acceso únicamente al número de empleado, nombre y oficina asignada al mismo para procesar los pedidos. Crear una vista que muestre esta información.
CREATE VIEW infoPedidos AS
SELECT num_empl, r_oficina
FROM RVENTAS;
El uso de estas vistas es aconsejable cuando los datos de la tabla son compartidos también por varios usuarios diferentes. La diferencia está en que ahora solo necesitamos parte de los campos, no todos.

SQL> CREATE VIEW UnidadesPorPedido
  2  SELECT pedido_id, SUM(cantidad) as "productos por pedido"
  3  FROM detalles_del_pedido
  4  GROUP BY pedido_id;

      Vista creada.
SQL> CREATE VIEW Categorias
2 As Select nombre_categoria,descripcion_categoria
3 From Categorias
4 where Id_categoria>1;
Vista creada.
SQL> CREATE VIEW empleado
2 As Select nombre_empleado,apellido_empleado,puesto_empleado
3 From Empleado
4 Where Id_empleado<3;
Vista creada.
 SQL> CREATE VIEW PedidosDetallados AS
  2  SELECT d.*,p.nombre_producto,p.nombre_latin ,c.*
  3  FROM productos p
  4  JOIN detalles_del_pedido d ON   p.codigo_producto=d.producto_id
  5  JOIN categorias c ON c.nombre_categoria=p.categoria;
       
      Vista creada.
SQL> CREATE VIEW Pedidos
2 As Select nombre_destinatario,pais_destino
3 From Pedidos
4 Where Id_pedido>0;

Vista creada.


No hay comentarios:

Publicar un comentario