Solución Ejercicio Prac. 3b (Esquema).



Documentos relacionados
Solució Exercici Prac. 3b (Esquema).

BASES DE DATOS 2º CURSO E.U.I. / F.I. Práctica 4: Estudio del SGBD ORACLE8 1 Gestión de transacciones 22 DE MAYO DE 2000

Lenguaje SQL (2ª Parte) Definición de datos

Práctica 3: Lenguaje SQL 2ª Parte: Definición de datos. Objetivos

Triggers 24/12/2016. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers

Triggers en PL/SQL. Jonathan Medina Gómez Facultad de Ingeniería Universidad de Antioquia

Diseño de bases de datos

Triggers. BASES DE DATOS Mercedes García Merayo

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

Triggers 27/11/2014. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

Departamento de Lenguajes y Sistemas Informáticos

DISPARADORES EN SQL SINTAXIS GENERAL DE UN DISPARADOR EN SQL:2003

Concepto de vista. (con ciertas limitaciones). nivel físico) Una vista es una tabla virtual (no tiene una correspondencia a

Práctica 4: Estudio del SGBD Oracle 10 Gestión de Transacciones

Diseño de bases de datos

Examen de Ficheros y bases de datos Convocatoria de junio II PARCIAL

RESTRICCIONES DE DOMINIOS

Tema II: El modelo relacional de datos. (2.7) Automatización

Checks, Triggers y Excepciones en InterBase: validando desde la base de datos

Unidad 6. Procedimientos Almacenados y Disparadores

Bases de Datos Ejercicio Número 2 Bogotá, Diciembre 5 de 2013

Tipos de datos en SQL. SQL. DDL (Data Definition Language) CREATE DOMAIN CREATE TABLE CREATE TABLE. CREATE TABLE con restricciones de atributo

Unidad III. Bases de Datos

Práctica 3: El lenguaje SQL (2ª parte). (6ª sesión).

Jair Ospino Ardila -- Guía Sencilla

LEA ATENTAMENTE LAS PREGUNTAS Y RESUELVA CADA EJERCICIO COMO SE INDIQUE (EN CASO CONTRARIO EL EJERCICIO NO PUNTUARÁ) CADA EJERCICIO VALE UN PUNTO

PL/SQL avanzado: Secuencias, triggers, cursores y subprogramas

GUIA DE TRIGGERS (Disparadores) EN MYSQL

EXAMEN DE BASES DE DATOS 11/06/04 Esquema de trabajo

5.1 Procedimientos y Funciones Almacenados. 5.2 Disparadores (Triggers).

Access SQL: DDL y DML. Una empresa de Ingeniería precisa una base de datos para la gestión de sus proyectos.

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Ejercicios SQL - Definición de Datos - Solución

SQL. (...la guía básica de supervivencia de dmi) Universidad de los Andes Demián Gutierrez Enero

Examen 24/6/97. Cuestionario de Bases de Datos: Nota del Test: 3.5 puntos (0.25 por cuestión). Cada 3 cuestiones incorrectas anulan 1 correcta.

A. Introducción. B. Los DATABASES TRIGGERS. PL/SQL en objetos de la base de datos. Oracle 11g - SQL, PL/SQL, SQL*Plus 271

MATERIAL SOBRE SENTENCIAS SQL

EXAMEN: BASES DE DATOS 4º Ingeniería Informática (31 de enero de 2008)

Examen de Bases de datos Grado de Ingeniería en Informática 3 de septiembre, 2015

Conceptos de Bases de Datos Relacionales Triggers

PROCEDIMIENTOS ALMACENADOS

Tema: DISPARADORES (TRIGGERS)

GBD Diseño físico de DDBB

Oracle Express y Toad for Oracle

Gestión de nóminas diciembre 2011

Bases de Datos 2: Procedimientos Almacenados, Funciones y Triggers. Tecnólogo en Informática, sede Paysandú Bases de Datos 2

TRIGGER LEONEL CADOSO ROMERO 1

T07 Opciones de integridad referencial

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

Práctica 3: El lenguaje SQL (2ª parte). Definici ón de datos. Programa de prácticas: Lenguaje SQL: manipulación de datos. definición de datos

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Examen de Bases de datos Grado de Ingeniería en Informática, Febrero, 2015

Bases de Datos Curso Grado en Ingeniería del Software Examen Junio. Nombre:

Introducción a SQL (DDL)

Tema 1. Bases de datos activas

DR/UC. DR/UC FACTURA(CIF, N_Factura, Fecha, Total) ASIGNATURA(Cod_Asignatura, Titulación, Nombre_Asig, Curso, Empresa_fotocopias, precio_fotocopia)

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

SQL Sintaxis. Ejemplo de Alumno, Curso, Profesor. Esquemas de Alumno, Curso, Profesor. Andrés Moreno S.

ejemplos de consultas SQL para obtener claves, DF y DMV en la BD de prendas de ropa

Seguridad de la Información Permisos. Sistemas de Bases de Datos II - ITS EMT - CETP

Unidad6. Diseño físico de datos

Apartado A (3 puntos):

SQL Sintaxis. OpenOffice. Ejemplo de Alumno, Curso, Profesor. Ejemplo de Alumno, Curso, Profesor. Andrés Moreno S. Nombre. Apellido. RutAlumno.

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

Base de Datos SQL Server

Manejo de Tablas y Llaves Foráneas

GUÍA DE TRABAJO N 5 GRADO 11 Programación y Diseño de Articulación SENA Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

Tema 5. Lenguaje de Definición de Datos

: COMPUTACIÓN E INFORMATICA : Ingeniería de Software Ingeniería de Redes y Comunicaciones : Administración de Bases de Datos I : T-INF127

Diseño de bases de datos

GUÍA DE TRABAJO N 7 GRADO 11. Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6 GUIA N 7 COMANDOS MYSQL II. CREAR UNA TABLA

Gestión de Usuarios en MySQL

Restricciones de Integridad

Integridad en sistemas de bases de datos relacionales

Bases de Datos / Elementos de Bases de Datos Que es un Stored Procedure? Stored Procedures: Ventajas

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

Consultas trabajadas en clase:

Procedimientos, Funciones, Trigger y Cursores en ORACLE

SQL: Lenguaje de Interrogación Estructurado

PRÓLOGO... XI CAPÍTULO 1. FUNDAMENTOS DEL LENGUAJE PL/SQL.

Transcripción:

Solución Ejercicio Prac. 3b (Esquema). LIBRO(codlib, título, autores, temática, totalpres) CP= {codlib} VNN= {título} PRÉSTAMO(codlib, codsoc, fechapres, fechadev) CP= {codlib, fechapres} VNN= {codsoc} CAj= {codlib} LIBRO CAj= {codsoc} SOCIO SOCIO(codsoc, nombre, dir, tel) CP= {codsoc} VNN= {nombre}

Solución Ejercicio Prac. 3b (Esquema). R1: LX:LIBRO LX ((LIBRO(LX) ( nulo(lx.temática)) ( (LX.temática = Física ) (LX.temática = Óptica ) (LX.temática = Mecánica ) (LX.temática = Electricidad ) )) R2: PX:PRÉSTAMO PX ((PRÉSTAMO(PX) ( nulo(px.fechadev)) (PX.fechapres PX.fechadev)) Faltarían algunas restricciones, como que no haya dos préstamos del mismo libro con fechas solapadas.

Solución Parcial Ejercicio (SQL). CREATE TABLE socio ( codsoc NUMBER constraint cp_socio PRIMARY KEY deferrable, nombre varchar(40) NOT NULL, dir varchar(60), tel varchar(15), totalpres number default 0 not null deferrable ); CREATE TABLE libro (codlib number constraint cp_libro PRIMARY KEY deferrable, titulo varchar(50) NOT NULL, autores varchar(60) NOT NULL, tematica varchar(20), constraint r1 CHECK (tematica IN ('Fisica','Optica','Mecanica','Electricidad')) ); CREATE TABLE prestamo (codlib number, codsoc number NOT NULL, fechapres date, fechadev date, constraint cp_prestamo PRIMARY KEY(codlib, fechapres) deferrable, constraint ca_pre_libro FOREIGN KEY (codlib) REFERENCES libro deferrable, constraint ca_pre_socio FOREIGN KEY (codsoc) REFERENCES socio deferrable, constraint R2 CHECK (fechapres <= fechadev) deferrable );

Queda mantener el dato totalpres... Solución ORACLE: TRIGGERS

EVENTOS que deben afectar a totalpres : EVENTO CONDICIÓN ACCIÓN Operación Tabla Atributo INSERT PRESTAMO - nula(fechadev) +1 UPDATE PRESTAMO fechadev de nula a no nula -1 de no nula a nula +1 (o no perm.) UPDATE PRESTAMO codsoc nula(fechadev) +1 y -1 DELETE PRESTAMO - nula(fechadev) -1 (o no perm.) INSERT SOCIO - si <> 0 no permitir UPDATE SOCIO totalpres si no correcto no permitir

Se ha de añadir un valor por defecto a totalpres en la definición de la tabla socio de la siguiente manera: totalpres DEFAULT 0 Y se deben crear los siguientes triggers para mantener el atributo derivado totalpres.

El siguiente disparador controla la inserción de nuevos préstamos: CREATE TRIGGER T1 AFTER INSERT ON Prestamo FOR EACH ROW BEGIN IF :new.fechadev IS NULL THEN UPDATE socio SET totalpres = totalpres +1 WHERE codsoc = :new.codsoc; END;

El siguiente disparador controla la modificación del atributo fechadev de préstamos (se devuelve o se modifica a prestado un libro): CREATE TRIGGER T2 AFTER UPDATE OF fechadev ON Prestamo FOR EACH ROW BEGIN IF :new.fechadev IS NULL AND :old.fechadev IS NOT NULL THEN UPDATE socio SET totalpres = totalpres +1 WHERE codsoc = :new.codsoc; ELSE IF :new.fechadev IS NOT NULL AND :old.fechadev IS NULL THEN UPDATE socio SET totalpres = totalpres -1 WHERE codsoc = :new.codsoc; END;

El siguiente disparador controla la modificación del atributo codsoc de préstamos (se le asigna un préstamo a otro socio): CREATE TRIGGER T3 AFTER UPDATE OF codsoc ON Prestamo FOR EACH ROW BEGIN IF :new.fechadev IS NULL THEN UPDATE socio SET totalpres = totalpres +1 WHERE codsoc = :new.codsoc; UPDATE socio SET totalpres = totalpres -1 WHERE codsoc = :old.codsoc; END;

El siguiente disparador controla el borrado de préstamos (sólo se puede hacer si el libro se ha devuelto): CREATE TRIGGER T4 AFTER DELETE ON Prestamo FOR EACH ROW BEGIN IF :old.fechadev IS NULL THEN UPDATE socio SET totalpres = totalpres -1 WHERE codsoc = :old.codsoc; END;

El siguiente disparador controla que el número de préstamos siempre sea 0 al insertar un nuevo socio: CREATE TRIGGER T5 AFTER INSERT ON Socio FOR EACH ROW BEGIN IF :new.totalpres <> 0 then RAISE_APPLICATION_ERROR(-20000, Cuando se inserta un socio, su número de préstamos ha de ser 0. ); END;

El siguiente disparador controla que el número de préstamos de un socio no se pueda modificar: CREATE TRIGGER T6 Este trigger podría dar problemas porque puede llamarse por otros triggers (T1-T4). AFTER UPDATE OF totalpres ON Socio FOR EACH ROW DECLARE N NUMBER; BEGIN SELECT COUNT(*) INTO N FROM PRESTAMO P WHERE P.fechadev IS NULL AND P.codsoc = :new.codsoc; IF N <> :new.totalpres THEN RAISE_APPLICATION_ERROR(-20000, Modificación no consistente. ); END; Una opción mejor es no permitir la modificación de totalpres a ningún usuario utilizando permisos: REVOKE UPATE(totalpres) TO ALL;