2.6.1.- Concepto de vista. 2.6.2.- Aplicaciones de las vistas. 2.6.3

Anuncio
2.6.1.- Concepto de vista.
2.6.2.- Aplicaciones de las vistas.
• Una vista es una tabla derivada de otras tablas (básicas o virtuales).
• Una vista se caracteriza porque:
– Se considera que forma parte del esquema externo.
– Una vista es una tabla virtual (no tiene una correspondencia a
• Para la especificación de tablas con información que se accede con
frecuencia pero no posee existencia física:
– Información derivada de la relación entre varias tablas.
– Información derivada de la formación de grupos de tuplas (p.e. para
la obtención de estadísticas).
– En general: información derivada de consultas complejas a la que se
accede con frecuencia.
nivel físico)
– Se puede consultar como cualquier tabla básica.
– Las actualizaciones se transfieren a la/s tabla/s original/es
(con ciertas limitaciones).
• Como mecanismo de seguridad: creación de vistas con, únicamente, los
atributos de las tablas a los cuales se desea permitir acceder a determinados
usuarios.
• Para la creación de esquemas externos.
1
2
2.6.3.- Vistas en SQL.
2.6.3.- Vistas en SQL.
• La sintaxis para la creación de vistas en SQL es la siguiente:
• La sintaxis para la creación de vistas en SQL es la siguiente:
CREATE | REPLACE VIEW vista [(comalista_columna)]
CREATE | REPLACE VIEW vista [(comalista_columna)]
AS expresión_tabla [with check option]
AS expresión_tabla [with check option]
en donde:
en donde:
– CREATE VIEW es la orden que permite la creación de la vista.
– expresión_tabla es una consulta SQL cuyo resultado será el contenido de la vista.
– vista es el nombre de la tabla virtual que se va a crear.
– WITH CHECK OPTION es opcional y se debe incluir si se desea actualizar la
– (comalista_columna) son los nombres de los atributos de la tabla y es opcional:
vista de una manera íntegra.
– Para la eliminación de una vista se utiliza la instrucción:
• Si no se especifica, el nombre coincide con el nombre de los atributos
resultantes en expresión_tabla.
– DROP VIEW vista [restrict | cascade];
• Es obligatorio si algún atributo de expresión_tabla es el resultado de una
función de agregación o una operación aritmética.
3
4
2.6.3.- Vistas en SQL (Ejemplos).
2.6.3.- Vistas en SQL (Vistas Actualizables).
• Dada la siguiente relación de una base de datos:
Motivos por los que una vista NO es actualizable:
Cocinero(nombre:varchar, edad: number, país:varchar)
•
contiene operadores conjuntistas (UNION, INTERSECT,…).
•
el operador DISTINCT
•
funciones agregadas (SUM, AVG, ..)
•
la cláusula GROUP BY
Obtén una vista con, únicamente, los cocineros franceses:
El Check Option impide que yo pueda añadir
cocineros que no sean franceses
Obtén una vista con la edad media de los cocineros agrupados por país:
5
2.6.3.- Vistas en SQL (Vistas Actualizables).
2.6.3.- Vistas en SQL (Vistas Actualizables).
Vista sobre una concatenación de relaciones:
Vista sobre una tabla básica:
•
•
el sistema traducirá la actualización sobre la vista en una operación de
actualización sobre la relación básica.
•
la actualización sólo puede modificar una de las tablas básicas
•
actualización modificará la relación básica que cumpla la propiedad de
conservación de la clave (aquella relación tal que su clave primaria podría ser
también clave de la vista)
•
la actualización no se realizará si viola alguna de las restricciones definidas
sobre la relación básica que se va a actualizar
siempre que no se viole ninguna restricción de integridad definida sobre
dicha relación.
2.6.3.- Vistas en SQL (Vistas Actualizables).
2.7.1.- Concepto de disparador.
EJEMPLO:
• Dadas las siguientes relaciones:
Persona(nif: dom_nif, nombre: dom_nom, edad: dom_edad)
CP:{nif}
Son reglas que especifican acciones que son activadas
automáticamente por determinados eventos.
Vivienda(cod_viv: dom_cod, nif: dom_nif, dir: dom_dir, num_hab: dom_num)
CP:{cod_viv}
CAj:{nif} Æ Persona
• Dada la siguiente vista definida sobre dichas relaciones:
CREATE VIEW Todo_Vivienda AS
SELECT * FROM Persona NATURAL JOIN Vivienda
¿Podré modificar la dirección de una vivienda en Todo_Vivienda?
¿Podré modificar el nombre del propietario de una vivienda?
9
2.7.2.- Reglas Evento-Condición-Acción.
10
2.7.3.- Aplicaciones de los disparadores.
Forma de una regla de actividad:
Define el comportamiento activo del sistema. Aplicaciones:
Evento - Condición - Acción
acción que el sistema ejecuta cuando como respuesta a la ocurrencia de
un evento cuando cierta condición se satisface:
•
evento: operación de actualización
•
condición: expresión lógica del SQL. Sólo se ejecutará la acción si
esta condición existe y es verdadera.
•
acción: procedimiento escrito en un lenguaje de programación que
incluye instrucciones de manipulación de la BD.
11
•
comprobación de restricciones de integridad
•
restauración de la consistencia
•
definición de reglas de funcionamiento de la organización
•
mantenimiento de información derivada
12
2.7.4.- Disparadores en SQL.
2.7.4.- Disparadores en SQL.
definición_regla::=
{CREATE | REPLACE} TRIGGER nombre_regla
{BEFORE | AFTER | INSTEAD OF} evento [disyunción_eventos]
ON {nombre_relación | nombre_vista}
[ [REFERENCING OLD AS nombre_referencia
[NEW AS nombre_referencia] ]
[FOR EACH {ROW | STATEMENT} [WHEN ( condición ) ] ]
bloque PL/SQL
EVENTOS
{BEFORE | AFTER | INSTEAD OF} evento [disyunción_eventos]
ON {nombre_relación | nombre_vista}
disyunción_eventos ::= OR evento [disyunción_eventos]
evento ::=
INSERT | DELETE | UPDATE [OF comalista_nombre_atributo]
disyunción_eventos ::= OR evento [disyunción_eventos]
evento ::=
INSERT | DELETE | UPDATE [OF comalista_nombre_atributo]
13
2.7.4.- Disparadores en SQL.
14
2.7.4.- Disparadores en SQL.
EVENTOS
FOR EACH STATEMENT
Parametrización de eventos:
– los eventos de las reglas FOR EACH ROW están parametrizados
– pametrización implícita:
• evento INSERT o DELETE: n (n grado de la relación)
• evento UPDATE: 2*n
BEFORE
– nombre de parámetros:
• evento INSERT: NEW
• evento DELETE: OLD
• evento UPDATE: OLD y NEW
AFTER
La regla se ejecuta una vez antes de la
ejecución de la operación de
actualización
La regla se ejecuta una vez después de
la ejecución de la operación de
actualización
FOR EACH ROW
La regla se ejecuta una vez antes de
actualización de cada tupla afectada
por la operación de actualización
La regla se ejecuta una vez después
de actualización de cada tupla
afectada por la operación de
actualización
– se pueden usar en la condición de la regla
– se pueden usar en el bloque PL/SQL
15
16
2.7.4.- Disparadores en SQL.
2.7.4.- Disparadores en SQL.
ACCIONES
CONDICIONES
bloque PL/SQL
WHEN (condición)
– expresión lógica de sintaxis similar a la condición de la cláusula WHERE de la
instrucción SELECT
– bloque escrito en el lenguaje de programación de Oracle PL/SQL
– sentencias de manipulación de la BD: INSERT, DELETE, UPDATE,
SELECT ... INTO ...
– no puede contener subconsultas ni funciones agregadas
– sentencias de programa: asignación, selección, iteración
– sólo se puede hacer referencia a los parámetros del evento
– sentencias de manejo de errores
– sentencias de entrada/salida
17
2.7.4.- Disparadores en SQL.
18
2.7.4.- Disparadores en SQL (Ejemplo).
La restricción R2 :
Lenguaje de reglas:
R2) Px: Pieza, Sx: Suministro ∀Px : Pieza (∃Sx : Suministro ( Sx.código=Px.código ) )
– Creación: CREATE TRIGGER nombre_regla ...
– Eliminación: DROP TRIGGER nombre_reglas
– Modificación: REPLACE TRIGGER nombre_regla ...
– Recompilación: ALTER TRIGGER nombre_regla COMPILE
– Des/Habilitar regla: ALTER TRIGGER nombre_regla [ENABLE | DISABLE]
– Des/Habilitar todas las reglas sobre una relación:
ALTER TABLE nombre_relación [{ENABLE | DISABLE} ALL TRIGGERS]
se define mediante una restricción general:
create assertion R2 check
not exists(select * from Pieza P
where not exists(select *
from Suministro S
where P.código=S.código));
¿Cómo controlar la restricción mediante reglas de actividad?
19
20
2.7.4.- Disparadores en SQL (Ejemplo).
2.7.4.- Disparadores en SQL (Ejemplo).
Detectar qué eventos pueden afectar a la R.I.:
TABLA,
Suministro,
Suministro,
Pieza,
OPERACIÓN,
Borrado,
Modificación,
Inserción,
ATRIBUTO
código
-
Construir Triggers para controlar estos eventos.
21
CREATE TRIGGER T2
AFTER INSERT ON Pieza
FOR EACH ROW
DECLARE N: NUMBER;
BEGIN
SELECT COUNT(*) INTO N
FROM Suministro S WHERE :new.codigo = S.codigo;
IF N=0 THEN
RAISE_APPLICATION_ERROR(-20000, ‘No se puede
insertar una pieza, porque la pieza no tiene suministros.
Cree las dos tuplas (la de pieza y la de suministro)
dentro de una transacción deshabilitando este trigger.’);
END IF;
END;
22
2.8.- Limitaciones del modelo relacional.
2.8.- Limitaciones del modelo relacional.
• Los modelos de datos tradicionales (relacional, jerárquico y red) han tenido
éxito en aplicaciones tradicionales de negocios.
• Requisitos y características de las nuevas aplicaciones:
¾ estructuras más complejas para los objetos,
¾ transacciones de mayor duración,
¾ nuevos tipos de datos para almacenar imágenes o elementos de texto
grandes y
¾ la necesidad de definir operaciones no estándar específicas para las
aplicaciones.
• Los modelos tradicionales presentan deficiencias en aplicaciones:
¾ de diseño y fabricación en ingeniería (CAD/CAM/CIM),
¾ experimentos científicos,
¾ telecomunicaciones,
¾ sistemas de información geográfica, y
¾ multimedia.
• Evolución de las bases de datos relacionales:
¾ bases de datos deductivas,
¾ bases de datos activas,
¾ bases de datos orientadas a objetos y
¾ bases de datos objeto-relacionales (SQL3)
23
24
Descargar