Você está na página 1de 15

UNIVERSIDAD CATOLICA DE TEMUCO

INGENIERIA DE EJECUCION INFORMATICA

GUIA DE VISTAS
-SQL
Guía básica usando Postgre SQL

CURSO : Bases de Datos


PROFESOR : Gustavo Donoso
AYUDANTE : Marcelo Sáez
Guía de Vistas SQL – Postgre SQL

II SEMESTRE DEL 2003


Escrito por Marcelo O. Sáez Segura – Septiembre 2003
marcelosaez@hotmail.com

INTRODUCCION A
LAS VISTAS SQL
USANDO POSTGRE-SQL

CONCEPTOS Y DEFINICION
VENTAJAS Y DESVENTAJAS
DE LAS VISTAS SQL
Guía de Vistas SQL – Postgre SQL

CONCEPTOS Y DEFINICION DE VISTA.

Los usuarios que acceden a una base de datos relacional, lo hacen típicamente a
través de vistas, de modo que diferentes usuarios tienen diferentes vistas.

Una vista, en sí, es una “tabla virtual” derivada, con nombre. El término virtual
significa que la tabla no existe como tal, pero para el usuario si parece existir. Por el
contrario una tabla es real, en el sentido que existe y está almacenada en algún
dispositivo físico de almacenamiento.
Las vistas no se sustentan en datos almacenados físicamente, solo se almacena su
definición en el catálogo de sistema, y esta construida en base a otras tablas.
Las vistas tienen la misma estructura que una tabla : filas y columnas. los datos se
recuperan mediante una consulta SELECT y se presentarán igual que los de una tabla.

Definición de vista en SQL.

Como dijimos anteriormente, una vista es una relación virtual cuya extensión se
deriva de las relaciones básicas de la base de datos, es decir, por medio de sentencias
SELECT.

La sintaxis de definición de una vista en SQL es:


CREATE [OR REPLACE] VIEW nombre_de_vista AS
sentencia_SELECT

Ejemplo sencillo :

CREATE VIEW cliente_apellido AS


SELECT * FROM clientes
WHERE ap_paterno LIKE ‘A%’

En este ejemplo se crea una vista con el nombre “cliente_apellido” que consulta
por todos los clientes cuyo apellido paterno comienza con la letra A.
Guía de Vistas SQL – Postgre SQL

VENTAJAS Y DESVENTAJAS DE LAS VISTAS

Ya sabemos entonces cual es la definición de vista, puede usted imaginar entonces


que este modelo de representación de los datos tiene sus ventajas y desventajas, a
continuación veremos cuales son los beneficios y problemas de usar vistas en un modelo
de base de datos relacional.

VENTAJAS EN EL USO DE VISTAS:

• SEGURIDAD : Las vistas pueden proporcionar un nivel adicional de seguridad. Por


ejemplo, en la tabla de empleados, cada responsable de departamento sólo tendrá
acceso a la información de sus empleados.
• SIMPLICIDAD : Las vistas permiten ocultar la complejidad de los datos. Una base
de datos se compone de muchas tablas. La información de dos o más tablas puede
recuperarse utilizando una combinación de dos o más tablas (relacional), y estas
combinaciones pueden llegar a ser muy confusas. Creando una vista como
resultado de la combinación se puede ocultar la complejidad al usuario.
• ORGANIZACION : Las vistas ayudan a mantener uno nombres razonables en la
base de datos para acceder a consultas complejas.
• EXACTITUD EN LOS DATOS SOLICITADOS: Permiten acceder a un subconjunto
de datos específicos, omitiendo datos e información innecesaria e irrelevante para
el usuario.
• AMPLIA PERSPECTIVAS DE LA BASE DE DATOS : Proporciona diversos modelos
de información basados en los mismos datos, enfocándolos hacia distintos usuarios
con necesidades especificas. El mostrar la información desde distintos ángulos nos
ayuda a crear ambientes de trabajo y operación acordes a los objetivos de la
empresa. Debe evaluarse el perfil y requerimientos de información de los usuarios
destino de la vista.
• TRANSPARENCIA EN LAS MODIFICACIONES : El usuario final no se vera
afectado por el diseño o alteraciones que se realicen en el esquema conceptual de
la base de datos. Si el sistema requiere una modificación en su funcionamiento
Guía de Vistas SQL – Postgre SQL

interno, podrán afectarse diversas estructuras que proveen el desempeño de este;


se pretende que los usuarios finales no adviertan tales alteraciones.

DESVENTAJAS EN EL USO DE VISTAS:


Aunque el uso de vistas implica muchas ventajas y muy provechosas todas,
también implican una serie de desventajas a considerar a la hora de diseñar una base de
datos relacional que mas que nada tienen que ver con las limitantes del motor de base
de datos :

CARACTERISTICAS NO SOPORTADAS

• NO SON ACTUALIZABLES : Las vistas en Postgre no son actualizables, es decir,


si bien es cierto, son tratadas como tablas, no es posible hacer INSERT, DELETE ni
UPDATE sobre las vistas, esta desventaja es una característica particular en
Postgre dado que esta cualidad si esta disponible en otros motores de bases de
datos como ORACLE, Informix y SQL Server, sin embargo cabe notar que Postgre
cubre esta falencia en las vistas con la creación de reglas (CREATE RULE) que
permite llenar el vacío dejado por la vista.
Guía de Vistas SQL – Postgre SQL

INTRODUCCION A
LAS VISTAS SQL
USANDO POSTGRE-SQL

DEFINICION SQL
EJEMPLOS DE VISTAS
LLAMADAS A VISTAS
Guía de Vistas SQL – Postgre SQL

ELIMINAR UNA VISTA

DEFINICION DE VISTA SQL.

Como explicamos anteriormente, la sintaxis de definición de una vista en SQL en


Postgre es básicamente la siguiente :

CREATE [OR REPLACE] VIEW <nombre_de_vista> AS


< SELECT campos1 [, campo2, ... , campoN ]
FROM tabla1 [, tabla2, ... , tablaN ]
[ WHERE condiciones_de_consulta ]
[ ORDER BY lista_de_campos ]
[ GROUP BY lista_de_campos ] >

Como podemos apreciar, existe una similitud muy grande entre una consulta
SELECT y la creación de una vista propiamente tal, de hecho, una vista es una definión
almacenada de una consulta SELECT SQL, tambien notemos que esta es una definición
básica de vista pues las cláusulas de la sentencia de consulta SELECT son muy amplias y
pueden tambien aplicarse a la vista..
Guía de Vistas SQL – Postgre SQL

EJEMPLOS DE VISTAS SQL.

Para poder mostrar las cualidades y características de las vistas, utilizaremos el


siguiente modelo de entidad y relación (MER) de un sistema sencillo de ventas (modelo
relacional de la guía de ejercicios Nº1 del curso ) :

detalle_ventas unidades
id_venta <fk1> id_unidad <pk>
id_producto <fk2> productos descripcion
id_unidad <fk3> id_unidad <pk>
cantidad id_producto <pk>
precio_unit id_unidad <fk1> id_unidad
total_prod id_categoria <fk2>
nombre
descripcion
venta precio_venta categoria
producto stock_actual id_categoria <pk>
unidad id_producto <pk> descripcion
id_productos id_categoria <pk>
id_categoria

ventas clientes giros


id_venta <pk> rut_cliente <pk> id_giro <pk>
rut_cliente <fk1> id_ciudad <fk1> descripcion
rut_vendedor <fk2> id_giro <fk2> id_giro <pk>
num_factura nombres
fecha apellidos id_giro
hora direccion
forma_pago telefono
id_venta <pk> fax
ciudad
email
id_venta id_ciudad <pk>
rut_cliente <pk>
id_region <fk>
rut_cliente nombre
id_ciudad <pk>
id_ciudad
vendedores region
rut_vendedor <pk> id_region <pk>
nombres descripcion
apellidos id_region <pk>
rut_vendedor <pk> id_region
rut_vendedor
Guía de Vistas SQL – Postgre SQL

CREANDO LAS PRIMERAS VISTAS :


Una vez definido el modelo de datos relacional anterior, podemos comenzar
explotar toda la potencia de las vistas :

• EJEMPLO 1 : Supongamos que se necesita implementar una vista con el nombre


“vista_ciudades” que considere todas las ciudades de la tabla, la región a la que esta
ciudad pertenece, sus respectivos códigos de ciudad y región ordenados por el codigo
de la región y el nombre de la ciudad, nuestra vista entonces se puede definir de la
siguiente manera :

CREATE VIEW vista_ciudades AS


SELECT ciudad.id_ciudad,
ciudad.nombre AS nombre_ciudad,
region.id_region,
region.descripcion AS nombre_region
FROM ciudad, region
WHERE ciudad.id_region = region.id_region
ORDER BY region.id_region, ciudad.nombre

Ciertamente esta podría ser la vista necesitada para nuestro primer ejemplo, pero
también podemos considerar las cláusulas de unión JOIN para establecer nuestras
relaciones, de esta forma podemos redefinir esta misma vista utilizando en vez de la
clausula WHERE una cláusula JOIN :

CREATE VIEW vista_ciudades AS


SELECT ciudad.id_ciudad,
ciudad.nombre AS nombre_ciudad,
region.id_region,
region.descripcion AS nombre_region
FROM ciudad JOIN region USING (id_region)
ORDER BY region.id_region, ciudad.nombre
Guía de Vistas SQL – Postgre SQL

Claramente entonces esta segunda vista es mas sencilla que la primera y por ende
más veloz en términos de tiempos de respuesta del motor de base de datos.
• EJEMPLO 2 : Se necesita implementar una vista con el nombre “datos_clientes” que
despliege los datos personales de nuestros clientes, esto implica saber tambien, el
giro del cliente, la ciudad y la región en la cual viven, ordenados por apellido y
nombres :

CREATE VIEW datos_clientes AS


SELECT clientes.rut_cliente, clientes.nombres,
clientes.apellidos, clientes.direccion,
clientes.telefono, clientes.id_giro,
giros.descripcion AS nombre_giro,
ciudad.id_ciudad,
ciudad.nombre AS nombre_ciudad,
region.id_region,
region.descripcion AS nombre_region
FROM
(clientes JOIN giros USING (id_giro) )
JOIN
(ciudad JOIN region USING (id_region))
USING
(id_ciudad)
ORDER BY clientes.apellidos, clientes.nombres;

En este caso establecemos las relaciones entre cuatro tablas ( clientes, giros,
ciudades y región) los datos importantes son los del cliente, pero también existen otros
datos asociados a las otras tablas. Consideremos que la tabla de regiones no esta
directamente vinculada a los clientes, entonces, establecemos primero una condición de
unión o JOIN entre la tabla de clientes y la de giros por medio del campo id_giro, este
“nuevo conjunto de datos” se une nuevamente a un “segundo grupo de datos” que
nacen a partir de la unión entre la tabla de ciudades y la de regiones a través del campo
id_region finalmente estos dos conjuntos de datos por medio del campo id_ciudad.
Guía de Vistas SQL – Postgre SQL

• EJEMPLO 3 : Uno de los detalles de PosgreSQL es que no existen comandos directos


para mostrar las tablas de la base de datos con una sentencia en particular, como por
ejemplo en mySQL existe el comando SHOW TABLES que visualiza la lista de tablas de
bases de datos, para ello, crearemos una vista sencilla que consulte al catálogo de
tablas de sistema de PostgreSQL, y en particular a la tabla “pg_tables” que contiene la
lista de tablas de la base de datos para así emular el comando SHOW TABLES de
mySQL :

CREATE VIEW show_tables AS


SELECT tablename AS nombre,
tableowner AS propietario,
hasindexes AS indexada,
hasrules AS reglas,
hastriggers AS desencadenantes
FROM pg_tables
WHERE substr(tablename, 1, 3) <> 'pg_'

Cabe notar que las tablas de sistema en PostgreSQL comienzan todas con el prefijo
“pg_”, entonces para consultar sólo por las tablas de usuario, debemos excluir todas
aquellas que son de sistema. Existen más tablas de sistema que alojan información
importante y muchas veces crítica de la base de datos Postgre, es por ello que no se
recomienda manipular los datos de las tablas de sistema pues se pueden causar daños
en la integridad de la base de datos.

• EJEMPLO 4 : De forma análoga consultaremos ahora por las vistas existentes en la


base de datos, exeptuando las vistas del catálogo de sistema :

CREATE VIEW show_vistas AS


SELECT viewname AS nombre,
viewowner AS propietario,
definition AS codigo_sql
FROM pg_views
Guía de Vistas SQL – Postgre SQL

WHERE substr(tablename, 1, 3) <> 'pg_'

NOTA : Estas dos vistas que hemos creado ya se encuentran implementadas en el


catálogo de PostgreSQL bajo el nombre de “pg_tables” y “pg_views” respectivamente.
• EJEMPLO 5 : Volviendo a nuestro modelo relacional del sistema de ventas, crearemos
una vista llamada “registro_ventas” que nos permita visualizar las ventas registradas
por el sistema, el detalle de productos, cliente al que fue realizada la venta, su
respectivo giro comercial, así, la vista puede resultar de la siguiente forma :

CREATE VIEW registro_ventas AS


SELECT ventas.id_venta, ventas.num_factura, ventas.fecha,
ventas.hora, ventas.forma_pago, ventas.rut_cliente,
clientes.nombres AS nombres_cliente,
clientes.apellidos AS apellidos_cliente,
clientes.direccion, clientes.id_giro,
giros.descripcion AS nombre_giro,
ventas.rut_vendedor, vendedores.nombres AS nombre_vendedor,
vendedores.apellidos AS apellidos_vendedor,
detalle_ventas.id_producto,
productos.nombre AS nombre_producto, productos.descripcion,
detalle_ventas.precio_unit, detalle_ventas.total_prod,
productos.id_unidad
FROM
ventas, detalle_ventas, clientes, vendedores,
productos, categoria, giros
WHERE
ventas.id_venta = detalle_ventas.id_venta AND
ventas.rut_cliente = clientes.rut_cliente AND
clientes.id_giro = giros.id_giro AND
ventas.rut_vendedor = vendedores.rut_vendedor AND
detalle_ventas.id_producto = productos.id_producto AND
productos.id_categoria = categoria.id_categoria AND
productos.id_unidad = unidades.id_unidad
ORDER BY
ventas.id_venta, detalle_ventas.id_producto
Guía de Vistas SQL – Postgre SQL

De esta forma hemos creado una vista relativamente compleja por el numero de
relaciones entre tablas, sin embargo, todavía no sabemos efectuar llamadas a vistas, ese
será nuestro próximo punto a tratar.

LLAMADAS A VISTAS.

Como lo dijimos anteriormente, las vistas tienen la misma estructura que una
tabla, es decir, poseen filas y columnas, los datos se recuperan mediante una consulta
SELECT y se presentarán igual que los de una tabla, de esta forma solo es necesario
saber el nombre de la vista a recuperar, por lo tanto las llamadas a vistas pueden ser de
las siguentes formas.

• EJEMPLO 1 :
SELECT * FROM vista_ciudades;

Esta vista devolverá tal cual como fué definida el codigo y nombre de ciudad y
tambien el codigo y nombre de región para cada ciudad, tal cual como fué definida
anteriormente,

• EJEMPLO 2 :
SELECT * FROM vista_ciudades WHERE id_region = 'R-09';

Esta otra llamada devolverá los mismos datos, sin embargo, hemos añadido a las
condiciones internas de la vista nuestra propia condicion, para este caso, que el ID de la
región sera igual a R-09.
Claramente en este caso podemos apreciar la potencialidad de las vistas pues
extendemos las condiciones y acotamos más aún nuestro conjunto de datos pudiendo
llegar a generar vistas genéricas que nos permitan obtener no solo un tipo de consulta
sino muchas consultas de forma más personalizada.

• EJEMPLO 3 :
SELECT * FROM vista_ciudades WHERE nombre_ciudad LIKE 'C%'
ORDER BY nombre_ciudad
Guía de Vistas SQL – Postgre SQL

Recordemos que esta vista (“vista_ciudades”) fué definida con un orden, sin
embargo, podemos reasignar el orden en el cual deseamos el conjunto de datos, en este
caso, por nombre de ciudad, de igual forma que en el ejemplo anterior, establecemos una
condición para mostrar solo las ciudades que comienzen con la letra “C”.

• EJEMPLO 4 :
SELECT * FROM show_tables;

Este ejemplo muy sencillo permite mostrar las tablas que están definidas en
nuestra base de datos, cabe notar que esta sentencia SELECT es muy similar a la vista de
sistema pg_tables que puede ser llamada de la siguiente forma: SELECT * FROM
pg_tables;

• EJEMPLO 5 :
SELECT rut_cliente, nombres, apellidos,
direccion, telefono,
nombre_giro, nombre_ciudad
FROM datos_clientes;

En este otro ejemplo acotamos el numero predefinido de campos de la vista a un


numero personalizado y específico para el propósito que necesitemos, de esta forma
podemos omitir aún más información no relevante para nuestras consultas.

• EJEMPLO 6 :
SELECT * FROM registro_ventas
WHERE num_factura = '0055009'

La vista “registro_ventas” fué definida de forma general, sin embargo, las


llamadas pueden ser específicas, de esta forma podemos obtener todos los datos de la
factura solicitada, evitando así volver a crear tediosas consultas SELECT y mejoranto el
proceso de desarrollo de aplicaciones de bases de datos.
Guía de Vistas SQL – Postgre SQL

ELIMINAR VISTAS.

Si en algún caso, se necesita modificar una vista, deberá eliminarla primero y


luego volverla a crear, de forma similar si tambien necesitas eliminar una vista de la base
de datos, la sentencia es la siguiente :
DROP VIEW <nombre_de_la_vista>

La sentencia es muy sencilla, por lo que no será necesario aplicar ejemplos para
eliminar una vista, puesto que solo es necesario saber el nombre de ella para eliminarla.
NOTA : No puede eliminar vistas de sistema pues dichas vistas están pre definidas en el
momento de crear la base de datos

Você também pode gostar