Sei sulla pagina 1di 25

GUIA PARA LA

IMPLEMENTACIN
DE TRIGGER
Dr. Luis Boy Chavil

BIBLIOTECA ADRITICA
PRESTAMOS Y DEVOLUCIONES DE LIBROS

La Biblioteca es una institucin creada con la


finalidad de proveer de libros, manuales,
revistas, CD, entre otros materiales de
lectura, a los diversos usuarios Lectores para
cuya tarea se ha definido el siguiente
procedimiento:

DR. LUIS BOY CHAVIL

Procedimiento
Los Lectores son personas naturales
identificados con una ficha de inscripcin a
travs de su nmero de DNI, nombre
completo, direccin, nmero de telfono fijo,
nmero de telfono mvil, e-mail y un
atributo denominado estado que tendr los
siguientes valores:

1.
2.
3.
4.

Lector castigado con libro prestado fuera de fecha,


libro indefinidamente,
Lector con libro prestado
Lector habilitado.
DR. LUIS BOY CHAVIL

Procedimiento
Algunos libros tienen ms de un ejemplar
disponible para el servicio de lectura.
Asimismo, se llevar registro de los Autores.
Tendremos en cuenta que un Autor puede
haber escrito uno o ms libros y un libro
puede estar escrito por uno o ms autores.

DR. LUIS BOY CHAVIL

Procedimiento
De igual manera se tendr en cuenta la
informacin de las Editoriales a las que
pertenecen los libros de la biblioteca.
Los ejemplares de Libros pueden estar
disponible para lectura en sala o a domicilio.

DR. LUIS BOY CHAVIL

Procedimiento
Asimismo, los ejemplares tienen registro de
su estado actual; el mismo que puede ser:

1:
2:
3:
4:

Buen estado
Manchado
Roto
Perdido

DR. LUIS BOY CHAVIL

Procedimiento
Adems;
se
llevar registro
de la
disponibilidad del ejemplar del libro; es decir,
si dicho ejemplar se encuentra en calidad de
prestado, para ello utilizaremos un atributo
del Ejemplar que marcar 1 si el ejemplar
est prestado marcar 2, si el ejemplar est
disponible.

DR. LUIS BOY CHAVIL

Procedimiento
Cuando el ejemplar de un libro es entregado
en calidad de prstamo, el atributo
disponibilidad pasar a prestado; es decir,
cambiar de 1 a 2. Cuando el ejemplar es
devuelto por el lector, el atributo cambiar
nuevamente a disponible; esto es, ser
modificado de 2 a 1.

DR. LUIS BOY CHAVIL

Procedimiento
La solicitud del Ejemplar de un Libro se lleva a cabo a
travs de la Ficha de Prstamo en la cul se consignarn
los siguientes datos:
Fecha de prstamo del Libro, DNI del Lector, Tipo de prstamo :
1: Lectura en sala
2. Lectura a domicilio

Fecha a devolver el ejemplar, Fecha de devolucin


Al insertar el prstamo del ejemplar es null; pero se cargar al actualizar el registro
de devolucin.

Estado del Libro


Se cargar en la actualizacin del registro de devolucin y ser:
1.
2.
3.
4.

Buen estado
Manchado
Roto
Perdido

DR. LUIS BOY CHAVIL

Procedimiento
Cuando un nuevo prstamo se inserte en la
tabla de prstamos haremos los siguientes
controles:
Verificar el estado del lector para saber si est
autorizado.
Verificar el estado del Libro para saber si est
disponible
Actualizar el atributo disponibilidad del ejemplar,
que pasar de disponible a prestado.

DR. LUIS BOY CHAVIL

Procedimiento
Cuando un ejemplar ha sido devuelto,
Actualizaremos la tabla de prstamos y llevaremos
a cabo los siguientes controles:
Verificar que la fecha a devolver sea menor o igual a la
fecha de devolucin del libro. Si no es asi, aplicar una
sancin y actualizar el estado del lector teniendo en cuenta
que su nuevo valor ser: 3. Lector amonestado hasta nuevo
aviso.
Verificar el estado del Libro y compararlo con el estado del
ejemplar; si no coinciden; aplicar una sancin, y actualizar el
estado del Lector segn sea el caso.

Actualizar el atributo disponibilidad del ejemplar, que


pasar de 1. Prestado a su nuevo valor 2. Disponible.
DR. LUIS BOY CHAVIL

Procedimiento
Al Insertar un nuevo prstamo de Libro se
ejecutar el Trigger FOR Insert.
Al Actualizar la devolucin de un Libro
prestado, se ejecutar el Trigger FOR Update.

DR. LUIS BOY CHAVIL

Modelado de datos

DR. LUIS BOY CHAVIL

TRIGGER For Insert sobre MOVE_LIBROS


(Al Insertar un nuevo Prstamo de Libro)
CREATE TRIGGER InsertaPrestamos
ON MOVE_LIBROS
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @estadoLector char(01)
DECLARE @disponibilidad char(01)
-- Obtener el estado del Lector
select @estadolector =
(select LEC_estado
from LECTORES L
inner join inserted i
on L.LEC_dni = i.LEC_dni)
DR. LUIS BOY CHAVIL

TRIGGER
-- Obtener la disponibilidad del Ejemplar
select @disponibilidad =
(select EJE_disponibilidad
from EJEMPLARES E
inner join inserted i
on E.EJE_numero = i.EJE_numero)

DR. LUIS BOY CHAVIL

TRIGGER
if @disponibilidad = '1' AND @estadolector = '4'
begin
UPDATE EJEMPLARES
SET EJE_disponibilidad = '2'
FROM EJEMPLARES E
inner join MOVE_LIBROS M
on E.EJE_numero = M.EJE_numero
UPDATE LECTORES
SET LEC_estado='3'
from LECTORES L
inner join MOVE_LIBROS M
on L.LEC_dni = M.LEC_dni
end
DR. LUIS BOY CHAVIL

TRIGGER
ELSE
begin
if @disponibilidad = 2
Begin
RAISERROR('El Libro esta prestado', 10,1)
ROLLBACK TRANSACTION
End
IF @estadolector = 1
Begin
RAISERROR('El Lector tiene libro prestado fuera de fecha', 10,1)
ROLLBACK TRANSACTION
End

DR. LUIS BOY CHAVIL

TRIGGER
IF @estadolector = 2
Begin
RAISERROR('El Lector esta castigado', 10,1)
ROLLBACK TRANSACTION
End
IF @estadolector = 3
Begin
RAISERROR('El Lector tiene un libro prestado', 10,1)
ROLLBACK TRANSACTION
End
end
END
GO
DR. LUIS BOY CHAVIL

TRIGGER For Update para MOVE_LIBROS


(Actualizacin de la Devolucin de Libros)
CREATE TRIGGER devolucionPrestamos
ON MOVE_LIBROS
FOR UPDATE
AS
BEGIN
SET NOCOUNT ON
DECLARE @estadolibro char(01)
DECLARE @fechaDevuelto datetime
DECLARE @fechaDevolver datetime
DR. LUIS BOY CHAVIL

TRIGGER For Update


select @estadolibro =
(select MOV_estadolibro
from inserted)
select @fechaDevuelto =
(select MOV_estadolibro
from inserted)
select @fechaDevolver =
(select MOV_estadolibro
from inserted)
DR. LUIS BOY CHAVIL

TRIGGER For Update


IF(@estadolibro = 1)
BEGIN
UPDATE EJEMPLARES
SET EJE_disponibilidad = '1'
FROM inserted I
inner join EJEMPLARES E
on E.LIB_codigo = I.LIB_codigo
and E.EJE_numero = I.EJE_numero
DR. LUIS BOY CHAVIL

TRIGGER For Update


IF(@fechaDevuelto <= @fechaDevolver)
BEGIN
UPDATE LECTORES
SET LEC_estado='1' -- Habilitado
FROM inserted I
inner join LECTORES L
on I.LEC_dni = L.LEC_dni
END
DR. LUIS BOY CHAVIL

TRIGGER For Update


ELSE
BEGIN
UPDATE LECTORES
SET LEC_estado='3' --Inhabilitado
FROM inserted I
inner join LECTORES L
on I.LEC_dni = L.LEC_dni
END
DR. LUIS BOY CHAVIL

TRIGGER For Update


-- Actualiza el estado de los Ejemplares
UPDATE EJEMPLARES
SET EJE_estado=@estadoLibro
FROM inserted I
inner join EJEMPLARES E
on E.LIB_codigo = I.LIB_codigo
and E.EJE_numero = I.EJE_numero
END
ELSE --No est permitido devolver libros en mal estado
BEGIN
rollback transaction
raiserror('Libro en mal estado', 10, 1)
END
END
go
DR. LUIS BOY CHAVIL

GUIA PARA LA
IMPLEMENTACIN
DE TRIGGER
Dr. Luis Boy Chavil

Potrebbero piacerti anche