domingo, 26 de junio de 2011

ACTUALIZACION

     Para que una vista se pueda actualizar debe existir una relación directa entre las filas y columnas de la vista y las de la tabla fuente. Según el estándar ANSI, se puede actualizar a través de las vistas si la consulta que la define, satisface las siguientes restricciones:

1ª - No especifica DISTINCT
2ª - FROM debe especificar una única tabla
3ª - La lista de selección no puede contener expresiones, columnas calculadas o
funciones de columna, solo referencias a columnas simples.

4ª - WHERE no debe incluir subconsultas.
5ª - No debe incluir ni GROUP BY ni HAVING.
EJEMPLO:

1)    Crear una vista que muestre los vendedores de la región este. 

CREATE VIEW repEste AS
SELECT *
FROM RVENTAS
WHERE r_oficina IN (11,12,13); //que serían las situadas al Este
Ahora añadimos un nuevo vendedor a través de la vista.
INSERT INTO repEste (num_empl, nombre, r_oficina, edad, ventas)
VALUES (113, ‘Jorge Ruiz’, 11, 43, 0.00);
Ahora resulta que trasladan a otro empleado(104) a otra oficina (12).
UPDATE repEste


SET r_oficina = 21  //aquí se equivocan y en lugar de poner 12 ponen 21
WHERE num_empl = 104;
Con lo cual este señor no figuraría en la vista, pero sí en la tabla.

CREACION DE VISTA Y EJEMPLOS

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 los que 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 los
siguientes tipos:

a)   Horizontales o por Restricción

Son las que restringen el acceso de un usuario a únicamente un conjunto de filas de una
tabla.

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 r_oficina IN (SELECT n_oficina
FROM OFICINAS
WHERE region = ‘Este’);
Las vistas horizontales son adecuadas cuando la tabla sobre la que se definen contiene datos 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 CLIENTES
WHERE rep_clie = 102);

     2. Definir una vista, que muestre únicamente clientes que tienen más de 30000 € en pedidos registrados actualmente.

CREATE VIEW clienTresmil AS
SELECT *
FROM CLIENTES
WHERE 30000 < (SELECT SUM (importe)
FROM PEDIDOS
WHERE num_clie = clie);


2.   Crear una vista para el Banco Atlántico, que le permita ver la lista de usuarios que  pagan en él.

CREATE VIEW vistaUsuariosAtlantico AS
SELECT *
FROM USUARIOS
WHERE codigo_banco IN (SELECT ent_suc
FROM BANCOS
WHERE nombre = ‘ATLANTICO’);

b)   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.

OTRO EJEMPLO:

3.   Definir una vista de la tabla oficinas, para el personal del procesamiento de pedidos que incluya la ciudad, el número de oficina y la región.

CREATE VIEW personalPedidos AS
SELECT ciudad, n_oficina, region
FROM OFICINAS;

4.   En la tabla clientes, para el mismo departamento, que incluya el nombre de los clientes y la asignación de los vendedores

CREATE VIEW vistaClien AS
SELECT rep_clie
FROM CLIENTES;


5.   Vista sobre la tabla de usuarios para el Dpto. de Contabilidad, en el que se incluyan solamente el DNI, el código de banco y paga banco.

CREATE VIEW vistaUser AS
SELECT DNI, codigo_banco, paga_banco
FROM USUARIOS;
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

VISTAS

Adopta el nombre de la columna correspondiente en la consulta. Existen dos casos en los que 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 los siguientes tipos:

a)   Horizontales o por Restricción

Son las que restringen el acceso de un usuario a únicamente un conjunto de filas de una tabla.

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 r_oficina IN (SELECT n_oficina
FROM OFICINAS
WHERE region = ‘Este’);

Las vistas horizontales son adecuadas cuando la tabla sobre la que se definen contiene datos 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 CLIENTES
WHERE rep_clie = 102);

2. Definir una vista, que muestre únicamente clientes que tienen más de 30000 € en
pedidos registrados actualmente.

CREATE VIEW clienTresmil AS
SELECT *
FROM CLIENTES
WHERE 30000 < (SELECT SUM (importe)
FROM PEDIDOS
WHERE num_clie = clie);

3. Crear una vista para el Banco Atlántico, que le permita ver la lista de usuarios que
pagan en él.
CREATE VIEW vistaUsuariosAtlantico AS
SELECT *
FROM USUARIOS
WHERE codigo_banco IN (SELECT ent_suc
FROM BANCOS
WHERE nombre = ‘ATLANTICO’);

b) 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.

ESPECIFICACION

     Para la especificacion de tablas con informacion que se accede con frecuencia pero no posee existencia fisica
  • Informacion derivada de la relacion entre varias tablas.

  • Informacion derivada de la formacion de grupos de tuplas.

  • Informacion derivada de consultas complejas a la que se accede con frecuencia

  • Como mecanismo de seguridad: creacion de vista con, unicamente,los atributos de las tablas a los cuales se desea permitir acceder determinados usuarios

  • Para la creacion de esquemas externos

Ventajas

  • Las consultas con selecciones complejas se simplifican

  • Permiten personalizar la BD para los distintos usuarios, de forma que presenten los

  • datos con una estructura logica para los mismos.

  • Control de acceso a la BD, haciendo que los usuarios vean y manejan solo determinada informacion


Concepto

   Las vista se pueden definir como tablas virtuales basadas en una o mas 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 perminten que diferentes usuarios vean la BD desde diferentes perspectivas, asi como restrigir el acceso a los datos de modo que diferentes usuarios accedan solo a ciertas filas o columnas de una tabla.