06. Información derivada: vistas

INFORMACIÓN DERIVADA: VISTAS

Concepto de vista

Como se introdujo en el Tema I, una base de datos es una colección de datos estructurados de acuerdo a las estructuras de datos que proporciona un modelo de datos. En el caso de una sistema relacional, los datos almacenados en la base de datos se organizan en estructuras relación y estas relaciones, definidas en el esquema junto a sus restricciones de integridad, representan todo el conocimiento que se tiene de la parcela del mundo representada por la base de datos.

Aunque, en una organización, la mayor parte de la información se recoge y almacena en forma de datos, es frecuente que se disponga también de información expresada en forma de reglas generales de conocimiento relativas al funcionamiento de la organización.

Ejemplo 2.43

En el sistema de información relativo a la docencia en una universidad (Ejemplo 2.35), existen las siguientes reglas de conocimiento o propiedades que sólo tienen sentido en el contexto de una universidad:

R1: “se consideran estudios de primer ciclo los tres primeros años del plan de estudios de una titulación, y estudios de segundo ciclo los años posteriores (si es que existen)”.

R2: “se considera que una asignatura es aplicada si tiene un número de créditos prácticos igual o mayor al 75% del total de créditos”

El conocimiento de estas reglas permite derivar información implícita que no está almacenada en la base de datos, por ejemplo: “los datos de las asignaturas aplicadas que son de primer ciclo”.

Cuando en un sistema de bases de datos, se permite definir en el esquema, información en forma de reglas de conocimiento, se dice que el sistema tiene capacidad deductiva. El interés de poder expresar este tipo de reglas es obvio, ya que aumenta la capacidad expresiva de la base de datos, la información disponible ya no es sólo la almacenada explícitamente en forma de datos sino también la que se puede derivar a partir de estos datos por medio de reglas.

Para poder hacer uso de este conocimiento en forma de reglas, éstas deben definirse en el esquema de la base de datos. La forma mas natural de representar una regla de conocimiento es utilizando un lenguaje que permita definir la información derivada (información implícita) a partir de la información básica (información explícita), expresando las propiedades que caracterizan dicha información derivada. Esto puede hacerse utilizando cualquier tipo de lenguaje relacional, el Álgebra Relacional (AR) o un lenguaje de tipo lógico (L).

Ejemplo 2.44

Las reglas del Ejemplo 2.43, podrían expresarse con las siguientes expresiones escritas en los dos tipos de lenguajes relacionales que se han estudiado: algebraico (Álgebra Relacional) y lógico (lenguaje del tipo introducido en el apartado 2.3.2):

R1: “se consideran estudios de primer ciclo los tres primeros años del plan de estudios de una titulación, y estudios de segundo ciclo los años posteriores (si es que existen)”.

Álgebra Relacional: PrimerCiclo ← Asignatura DONDE semestre IN (“1A”, “1B”, “2A”, “2B”,“3A”, “3B”)

Lógica: PrimerCiclo (AX) ← (AX:Asignatura AX.semestre IN (“1A”,“1B”,“2A”,“2B”,“3A”,“3B”) )

R2: se considera que una asignatura es aplicada si tiene un número de créditos prácticos igual o mayor al 75% del total de créditos”

Álgebra Relacional: Aplicada ← Asignatura DONDE ((prac / (teo + prac ))*100) ≥ 75

Lógica: Aplicada (AX) ← (AX: Asignatura ((AX.prac / (AX.teo + AX.prac ))*100) ≥ 75 )

En las expresiones de Álgebra Relacional, se definen las relaciones derivadas PrimerCiclo y Aplicada con las tuplas resultantes de la evaluación de la correspondiente operación de Selección. En las fórmulas lógicas se expresa que las tuplas de las relaciones PrimerCiclo y Aplicada se construyen a partir de las tuplas de Asignatura que hacer cierta la fórmula especificada en cada caso.

Es importante destacar cómo en los ejemplos anteriores, la información derivada, asignaturas de primer ciclo y asignaturas aplicadas, se puede representar en forma de relaciones derivadas, las relaciones PrimerCiclo y Aplicada. Estas relaciones derivadas no tienen existencia real, son relaciones virtuales cuyo valor (extensión) se deriva a partir de la relación básica Asignatura de la base de datos, es decir las tuplas de PrimerCiclo y Aplicada se construyen a partir de las tuplas de Asignatura que cumplen las propiedades especificadas en cada regla. Esto se ilustra en el siguiente dibujo:

Una vez se han definido en el esquema las relaciones derivadas a través de sus reglas de derivación, ya se puede consultar la información derivada de la misma forma que se consulta la información almacenada explícitamente.

Ejemplo 2.45

En el Ejemplo 2.44, el usuario podría plantear las siguientes consultas:

Consulta 1: “Obtener todos los datos de las asignaturas de primer ciclo que tienen mas de 5 créditos”

AR: PrimerCiclo DONDE ( teo + prac)>5

L: AX:PrimerCiclo (AX.teo+AX.prac)>5

Consulta 2: “Obtener todos los datos de las asignaturas de primer ciclo que son aplicadas”

AR: PrimerCiclo ∩ Aplicada

L: AX:PrimerCiclo ∃ AY: Aplicada (AX.codigo=AY.codigo)

Para evaluar estas consultas el SGBD aplica la regla de derivación que define la correspondiente relación derivada en el esquema de la base de datos. Las consultas anteriores serán evaluadas por el SGBD reemplazando la consulta del usuario por una nueva consulta que combina ésta última con la regla de derivación:

Consulta 1: “Obtener todos los datos de las asignaturas de primer ciclo que tienen mas de 5 créditos”

Usuario:

AR: PrimerCiclo DONDE ( teo + prac) >5

L: AX:PrimerCiclo (AX.teo+AX.prac) >5

SGBD:

AR: Asignatura DONDE semestre IN (“1A”, “1B”, “2A”, “2B”, “3A”, “3B”)

AND

( teo + prac) >5

L: AX:AsignaturaAX.semestre IN (“1A”, “1B”, “2A”, “2B”, “3A”, “3B”)

(AX.teo+AX.prac)>5)

Consulta 2: “Obtener todos los datos de las asignaturas de primer ciclo que son aplicadas”

Usuario:

AR: PrimerCiclo ∩ Aplicada

L: AX:PrimerCiclo ∃ AY: Aplicada (AX.codigo=AY.codigo)

SGBD:

AR: Asignatura DONDE semestre IN (“1A”, “1B”, “2A”, “2B”, “3A”, “3B”)

Asignatura DONDE ((prac / (teo + prac ))*100) ≥ 75

L: AX:Asignatura ∃ AY: Asignatura (AX.codigo=AY.codigo

AX.semestre IN (“1A”,“1B”,“2A”,“2B”,“3A”,“3B”)

((AY.prac / (AY.teo + AY.prac ))*100) ≥ 75 )

En el Modelo Relacional, a las relaciones derivadas se les denomina vistas. Una vista es una relación derivada definida por una regla de derivación a partir de relaciones básicas (u otras relaciones derivadas) de la base de datos. La regla de derivación que define la vista se puede representar con una expresión escrita en un lenguaje relacional, la evaluación de esta expresión devuelve las tuplas que constituyen la relación derivada.

Las tuplas de una relación básica se almacenan explícitamente, las tuplas de una vista se calculan cuando el usuario plantea una consulta sobre la vista.

El usuario de una base de datos relacional, puede manipular indistintamente las relaciones básicas y las vistas. Esto que no plantea ningún problema cuando se trata de consultas, es mucho más complejo en el caso de operaciones de actualización. Para ejecutar una consulta sobre una vista el SGBD reemplaza la consulta del usuario por una nueva consulta en la que se combina la petición del usuario y la definición de la vista (ver ejemplos anteriores). Sin embargo para ejecutar una operación de actualización sobre una vista, el SGBD debe analizar la definición de la vista y determinar qué actualizaciones deberían ejecutarse sobre las relaciones básicas, subyacentes a la vista, de forma que se satisfaga el requisito de actualización del usuario. Por este motivo, los sistemas establecen muchas restricciones para la actualización de vistas.

2.6.2 Vistas en SQL.

El lenguaje de definición de datos del SQL (DDL) incluye una sentencia para la definición de vistas en el esquema de la base de datos. Su sintaxis es la siguiente:

CREATE VIEW nombre_vista [nom_columna1, nom_columna2, ..., nom_columnan]

AS expresión_tabla

[WITH CHECK OPTION]

Donde nombre_vista es el nombre de la vista, nom_columna1, nom_columna2, ...,nom_columnan son los nombres de columna de la vista (relación derivada), si esta parte opcional no se incluye, la vista hereda los nombres de las columnas de las relaciones a partir de las cuales se define la vista, y expresión_tabla es la sentencia que define la relación derivada, es decir las tuplas de la vista son las tuplas de la relación resultante de evaluar dicha expresión; usualmente esta expresión es una sentencia SELECT, pero puede ser cualquier otra expresión que defina una tabla (UNION, INTERSECT, etc).

La opción [WITH CHECK OPTION], impide que se realice una actualización sobre la vista que viole su definición.

La operación DROP VIEW nombre_vista, permite eliminar una vista del esquema de la base de datos.

Ejemplo 2.46

Las vistas del Ejemplo 2.44, se definen en SQL de la siguiente forma:

R1: “se consideran estudios de primer ciclo los tres primeros años del plan de estudios de una titulación, y estudios de segundo ciclo los años posteriores (si es que existen)”.

CREATE VIEW PrimerCiclo

AS SELECT *

FROM Asignatura AX

WHERE AX.semestre IN (1A”, “1B”, “2A”, “2B”, “3A”, “3B”)

WITH CHECK OPTION

R2: se considera que una asignatura es aplicada si tiene un número de créditos prácticos igual o mayor al 75% del total de créditos”

CREATE VIEW Aplicada

AS SELECT *

FROM Asignatura AX

WHERE ( (AX.prac / (AX.teo + AX.prac ))*100) ≥ 75

WITH CHECK OPTION

Asumiendo esta definición de vistas, las consultas del Ejemplo 2.45, se expresarían en SQL:

Consulta 1: “Obtener todos los datos de las asignaturas de primer ciclo que tienen mas de 5 créditos”

SELECT * FROM PrimerCiclo PX WHERE (PX.teo + PX.prac) > 5

Consulta 2: “Obtener todos los datos de las asignaturas de primer ciclo que son aplicadas”

SELECT * FROM PrimerCiclo

INTERSECT

SELECT * FROM Aplicada, o

SELECT * FROM PrimerCiclo PX WHERE EXISTS (SELECT * FROM Aplicada AX

WHERE AX.codigo=PX.codigo)

Para evaluarlas el SGBD, reescribirá la sentencia SELECT del usuario utilizando la definición de las vistas:

Consulta 1: “Obtener todos los datos de las asignaturas de primer ciclo que tienen mas de 5 créditos”

SELECT * FROM Asignatura AX WHERE (AX.teo + AX.prac) > 5

AND

AX.semestre IN (1A”, “1B”, “2A”, “2B”, “3A”, “3B”)

Consulta 2: “Obtener todos los datos de las asignaturas de primer ciclo que son aplicadas”

SELECT * FROM Asignatura AX WHERE AX.semestre IN (1A”, “1B”, “2A”, “2B”, “3A”, “3B”)

INTERSECT

SELECT * FROM Asignatura AX WHERE ( (AX.prac / (AX.teo + AX.prac ))*100) ≥ 75 , o

SELECT * FROM Asignatura AX WHERE AX.semestre IN (1A”,“1B”,“2A”,“2B”,“3A”, “3B”)

AND

EXISTS (SELECT * FROM Asignatura AY

WHERE ((AY.prac / (AY.teo + AY.prac ))*100) ≥ 75

AND

(AX.codigo=AY.codigo) )

La opción [WITH CHECK OPTION], en la definición de ambas vistas prohibiría las siguientes operaciones de actualización.

Actualización 1: Insertar en PrimerCiclo la asignatura de datos: (PD, Programación Declarativa, 5A, 3, 3, DSIC).

INSERT INTO PrimerCiclo VALUES (“PD”, “Programación Declarativa”, “5a”, 3, 3, “DSIC”)

La tupla que va a ser insertada viola la definición de la vista PrimerCiclo, ya que PD es una asignatura de 5º curso.

Actualización 2: Realizar la siguiente modificación sobre la vista Aplicada: la asignatura APB va a pasar a tener 3 créditos teóricos y 3 créditos prácticos.

UPDATE Aplicada SET teo=3, prac=3 WHERE codigo=”APB”

La modificación que se va a aplicar a la asignatura APB, viola la definición de la vista Aplicada, ya que APB pasa a tener menos del 75% de créditos prácticos.

2.6.3 Aplicaciones de las vistas.

Como se ha visto en el apartado 2.6.1, las vistas permiten la definición de información implícita a través de reglas de conocimiento aumentando de esta forma, la capacidad expresiva de la base de datos, pero también pueden ser utilizadas para muchas otras aplicaciones, a continuación se presentan algunas de éstas.

Definición de esquemas externos.

Una de las aplicaciones mas interesantes de las vistas tiene como objetivo ocultar información a los usuarios o presentar la información de la base de datos de la forma mas adecuada a las necesidades de cada colectivo de usuarios.

Esta idea está ligada a los conceptos de esquema externo e independencia lógica, contemplados en la arquitectura de niveles ANSI/SPARC (Tema I). La arquitectura ANSI/SPARC contempla tres niveles de definición de la base de datos: el nivel lógico en el que se definen las estructuras de la base de datos, el nivel físico en el que se elige una implementación para cada una de esas estructuras y el nivel externo en el que se definen vistas parciales del esquema lógico para distintos grupos de usuarios. A la definición de la base de datos en cada uno de estos niveles se le denomina esquema (esquema lógico, esquema físico y esquemas externos). La arquitectura de niveles asegura

la independencia de datos.

Las vistas constituyen, en el Modelo Relacional, el mecanismo para la definición de esquemas externos. Un esquema externo se compone de un conjunto de vistas.

Ejemplo 2.47

En la base de datos sobre la docencia en una universidad, Ejemplo 2.35, tendría sentido definir para cada departamento, un esquema externo con una vista de la relación Asignatura que contuviese exclusivamente las asignaturas del departamento, una vista de la relación Profesor que contuviese sólo los profesores del departamento, y una vista de la relación Docencia con la docencia del departamento. El esquema externo del DSIC tendría el siguiente aspecto:

CREATE VIEW Asignaturas_DSIC AS

SELECT codigo, nombre, semestre, teo, prac FROM Asignatura

WHERE dep=”DSIC”

CREATE VIEW Profesor_DSIC AS

SELECT codigo, nombre, telefono, categoria FROM Profesor

WHERE dep=”DSIC”

CREATE VIEW Docencia_DSIC AS

SELECT cod_pro, cod_asg, gteo, gprac FROM Docencia

WHERE cod_pro IN (SELECT codigo FROM Profesor WHERE dep=”DSIC”)

Los usuarios de cada departamento sólo tendrían autorización para consultar el esquema externo correspondiente a su departamento.

Preparación de consultas: Las vistas también pueden utilizarse para definir y almacenar en la base de datos consultas complejas que son utilizadas frecuentemente; de esta forma se le evita al usuario enfrentarse a la complejidad de la consulta.

Ejemplo 2.48

En la base de datos sobre la docencia en una universidad, Ejemplo 2.35, considérese la siguiente consulta:

“obtener el nombre de los profesores que imparten docencia de asignaturas que no son de su departamento, indicando cuáles son estos departamentos, y el total de créditos impartidos en cada uno de ellos”

CREATE VIEW DocenciaExterna (nombre_prof, nombre_dep, creditos) AS

SELECT PX.nombre, DX.nombre, SUM(DCX.gteo* AX.teo + DCX.gprac*AX.prac)

FROM Profesor PX, Departamento DX, Docencia DCX, Asignatura AX

WHERE PX.codigo=DCX.cod_pro AND AX.codigo=DCX.cod_asg AND DX.codigo= AX.dep

AND

AX.dep<>PX.dep

GROUP BY PX.codigo, PX.nombre, DX.codigo, DX.nombre

Esta vista evitaría a un usuario enfrentarse a la complejidad de la consulta, y le permitiría consultar de forma sencilla la información relativa a la docencia externa al departamento.

Consulta: “ Obtener los nombres de los profesores que imparten mas de 5 créditos fuera de su departamento”

SELECT DISTINCT nombre_prof

FROM DocenciaExterna

WHERE creditos>5

Criterios de seguridad.

Las vistas también pueden utilizarse para aplicar políticas de seguridad (privacidad) de los datos, es decir para ocultar a los usuarios de la base de datos información que es confidencial.

Ejemplo 2.49

Supongamos que los datos de un profesor, excepto su código y su nombre, son confidenciales. La siguiente vista permitiría ocultar dichos datos a los usuarios de la base de datos.

CREATE VIEW DatosProfesor AS

SELECT codigo, nombre FROM Profesor.