Una vista es una tabla derivada de otras tablas (bsicas 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 nivel fsico) Se puede consultar como cualquier tabla bsica. Las actualizaciones se transfieren a la/s tabla/s original/es (con ciertas limitaciones). 2 2.6.2.- Aplicaciones de las vistas. Para la especificacin de tablas con informacin que se accede con frecuencia pero no posee existencia fsica: Informacin derivada de la relacin entre varias tablas. Informacin derivada de la formacin de grupos de tuplas (p.e. para la obtencin de estadsticas). En general: informacin derivada de consultas complejas a la que se accede con frecuencia. Como mecanismo de seguridad: creacin de vistas con, nicamente, los atributos de las tablas a los cuales se desea permitir acceder a determinados usuarios. Para la creacin de esquemas externos. 3 La sintaxis para la creacin de vistas en SQL es la siguiente: CREATE | REPLACE VIEW vista [(comalista_columna)] AS expresin_tabla [with check option] en donde: 2.6.3.- Vistas en SQL. CREATE VIEW es la orden que permite la creacin de la vista. vista es el nombre de la tabla virtual que se va a crear. (comalista_columna) son los nombres de los atributos de la tabla y es opcional: Si no se especifica, el nombre coincide con el nombre de los atributos resultantes en expresin_tabla. Es obligatorio si algn atributo de expresin_tabla es el resultado de una funcin de agregacin o una operacin aritmtica. 4 La sintaxis para la creacin de vistas en SQL es la siguiente: CREATE | REPLACE VIEW vista [(comalista_columna)] AS expresin_tabla [with check option] en donde: 2.6.3.- Vistas en SQL. expresin_tabla es una consulta SQL cuyo resultado ser el contenido de la vista. WITH CHECK OPTION es opcional y se debe incluir si se desea actualizar la vista de una manera ntegra. Para la eliminacin de una vista se utiliza la instruccin: DROP VIEW vista [restrict | cascade]; 5 2.6.3.- Vistas en SQL (Ejemplos). Dada la siguiente relacin de una base de datos: Cocinero(nombre:varchar, edad: number, pas:varchar) Obtn una vista con, nicamente, los cocineros franceses: Obtn una vista con la edad media de los cocineros agrupados por pas: El Check Option impide que yo pueda aadir cocineros que no sean franceses Motivos por los que una vista NO es actualizable: contiene operadores conjuntistas (UNION, INTERSECT,). el operador DISTINCT funciones agregadas (SUM, AVG, ..) la clusula GROUP BY 2.6.3.- Vistas en SQL (Vistas Actualizables). Vista sobre una tabla bsica: el sistema traducir la actualizacin sobre la vista en una operacin de actualizacin sobre la relacin bsica. siempre que no se viole ninguna restriccin de integridad definida sobre dicha relacin. 2.6.3.- Vistas en SQL (Vistas Actualizables). Vista sobre una concatenacin de relaciones: la actualizacin slo puede modificar una de las tablas bsicas actualizacin modificar la relacin bsica que cumpla la propiedad de conservacin de la clave (aquella relacin tal que su clave primaria podra ser tambin clave de la vista) la actualizacin no se realizar si viola alguna de las restricciones definidas sobre la relacin bsica que se va a actualizar 2.6.3.- Vistas en SQL (Vistas Actualizables). 9 EJEMPLO: Dadas las siguientes relaciones: Persona(nif: dom_nif, nombre: dom_nom, edad: dom_edad) CP:{nif} 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 direccin de una vivienda en Todo_Vivienda? Podr modificar el nombre del propietario de una vivienda? 2.6.3.- Vistas en SQL (Vistas Actualizables). 10 2.7.1.- Concepto de disparador. Son reglas que especifican acciones que son activadas automticamente por determinados eventos. 11 Forma de una regla de actividad: Evento - Condicin - Accin accin que el sistema ejecuta cuando como respuesta a la ocurrencia de un evento cuando cierta condicin se satisface: evento: operacin de actualizacin condicin: expresin lgica del SQL. Slo se ejecutar la accin si esta condicin existe y es verdadera. accin: procedimiento escrito en un lenguaje de programacin que incluye instrucciones de manipulacin de la BD. 2.7.2.- Reglas Evento-Condicin-Accin. 12 Define el comportamiento activo del sistema. Aplicaciones: comprobacin de restricciones de integridad restauracin de la consistencia definicin de reglas de funcionamiento de la organizacin mantenimiento de informacin derivada 2.7.3.- Aplicaciones de los disparadores. 13 definicin_regla::= {CREATE | REPLACE} TRIGGER nombre_regla {BEFORE | AFTER | INSTEAD OF} evento [disyuncin_eventos] ON {nombre_relacin | nombre_vista} [ [REFERENCING OLD AS nombre_referencia [NEW AS nombre_referencia] ] [FOR EACH {ROW | STATEMENT} [WHEN ( condicin ) ] ] bloque PL/SQL disyuncin_eventos ::= OR evento [disyuncin_eventos] evento ::= INSERT | DELETE | UPDATE [OF comalista_nombre_atributo] 2.7.4.- Disparadores en SQL. 14 EVENTOS {BEFORE | AFTER | INSTEAD OF} evento [disyuncin_eventos] ON {nombre_relacin | nombre_vista} disyuncin_eventos ::= OR evento [disyuncin_eventos] evento ::= INSERT | DELETE | UPDATE [OF comalista_nombre_atributo] 2.7.4.- Disparadores en SQL. 15 EVENTOS Parametrizacin de eventos: los eventos de las reglas FOR EACH ROW estn parametrizados pametrizacin implcita: evento INSERT o DELETE: n (n grado de la relacin) evento UPDATE: 2*n nombre de parmetros: evento INSERT: NEW evento DELETE: OLD evento UPDATE: OLD y NEW se pueden usar en la condicin de la regla se pueden usar en el bloque PL/SQL 2.7.4.- Disparadores en SQL. 16 BEFORE FOR EACH STATEMENT FOR EACH ROW La regla se ejecuta una vez antes de la ejecucin de la operacin de actualizacin La regla se ejecuta una vez antes de actualizacin de cada tupla afectada por la operacin de actualizacin AFTER La regla se ejecuta una vez despus de la ejecucin de la operacin de actualizacin La regla se ejecuta una vez despus de actualizacin de cada tupla afectada por la operacin de actualizacin 2.7.4.- Disparadores en SQL. 17 CONDICIONES WHEN (condicin) expresin lgica de sintaxis similar a la condicin de la clusula WHERE de la instruccin SELECT no puede contener subconsultas ni funciones agregadas slo se puede hacer referencia a los parmetros del evento 2.7.4.- Disparadores en SQL. 18 ACCIONES bloque PL/SQL bloque escrito en el lenguaje de programacin de Oracle PL/SQL sentencias de manipulacin de la BD: INSERT, DELETE, UPDATE, SELECT ... INTO ... sentencias de programa: asignacin, seleccin, iteracin sentencias de manejo de errores sentencias de entrada/salida 2.7.4.- Disparadores en SQL. 19 Lenguaje de reglas: Creacin: CREATE TRIGGER nombre_regla ... Eliminacin: DROP TRIGGER nombre_reglas Modificacin: REPLACE TRIGGER nombre_regla ... Recompilacin: ALTER TRIGGER nombre_regla COMPILE Des/Habilitar regla: ALTER TRIGGER nombre_regla [ENABLE | DISABLE] Des/Habilitar todas las reglas sobre una relacin: ALTER TABLE nombre_relacin [{ENABLE | DISABLE} ALL TRIGGERS] 2.7.4.- Disparadores en SQL. 20 La restriccin R2 : R2) Px: Pieza, Sx: Suministro Px : Pieza (Sx : Suministro ( Sx.cdigo=Px.cdigo ) ) se define mediante una restriccin general: create assertion R2 check not exists(select * from Pieza P where not exists(select * from Suministro S where P.cdigo=S.cdigo)); Cmo controlar la restriccin mediante reglas de actividad? 2.7.4.- Disparadores en SQL (Ejemplo). 21 Detectar qu eventos pueden afectar a la R.I.: TABLA, OPERACIN, ATRIBUTO Suministro, Borrado, - Suministro, Modificacin, cdigo Pieza, Insercin, - Construir Triggers para controlar estos eventos. 2.7.4.- Disparadores en SQL (Ejemplo). 22 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 transaccin deshabilitando este trigger.); END IF; END; 2.7.4.- Disparadores en SQL (Ejemplo). 23 2.8.- Limitaciones del modelo relacional. Los modelos de datos tradicionales (relacional, jerrquico y red) han tenido xito en aplicaciones tradicionales de negocios. Los modelos tradicionales presentan deficiencias en aplicaciones: de diseo y fabricacin en ingeniera (CAD/CAM/CIM), experimentos cientficos, telecomunicaciones, sistemas de informacin geogrfica, y multimedia. 24 2.8.- Limitaciones del modelo relacional. Requisitos y caractersticas de las nuevas aplicaciones: estructuras ms complejas para los objetos, transacciones de mayor duracin, nuevos tipos de datos para almacenar imgenes o elementos de texto grandes y la necesidad de definir operaciones no estndar especficas para las aplicaciones. Evolucin 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)