Documentos de Académico
Documentos de Profesional
Documentos de Cultura
GO
Go
cedulaIdentidad cedula,
correo mail,
'[0][9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),
);
GO
GO
Go
'[9][7][8-9]-[0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9]'),
);
CREACIÓN DE LA TABLA Prestamo
GO
DROP TABLE IF EXISTS Prestamo
GO
CREATE TABLE Prestamo (
idPrestamo SMALLINT IDENTITY (1,1) NOT NULL,
idEstudiante SMALLINT NOT NULL,
idLibro SMALLINT NOT NULL,
fechaPrestamo DATE NOT NULL,
fechaDevolucion DATE NOT NULL,
fechaEntrega DATE NULL,
usuarioRegistro VARCHAR(128) DEFAULT SYSTEM_USER NOT NULL,
fechaRegistro DATETIME DEFAULT GETDATE() NOT NULL,
CONSTRAINT PK_Prestamo PRIMARY KEY (idPrestamo),
CONSTRAINT FK_Prestamo_Estudiante FOREIGN KEY (idEstudiante)
REFERENCES Estudiante(IdEstudiante),
CONSTRAINT FK_Prestamo_Libro FOREIGN KEY (idLibro) REFERENCES
Libro(IdLibro),
CONSTRAINT CH_Prestamo_fechaPrestamo CHECK (fechaPrestamo <=
GETDATE()
AND TRY_CONVERT(DATE, fechaPrestamo) IS NOT NULL),
CONSTRAINT CH_Prestamo_fechaDevolucion CHECK (fechaDevolucion >
fechaPrestamo
AND fechaDevolucion <= DATEADD(day, 3, fechaPrestamo)
AND TRY_CONVERT(DATE, fechaDevolucion) IS NOT NULL),
CONSTRAINT CH_Prestamo_fechaEntrega CHECK (fechaEntrega IS NULL OR
(fechaEntrega >= fechaPrestamo
AND fechaEntrega <= GETDATE()
AND TRY_CONVERT(DATE, fechaEntrega) IS NOT NULL))
);
GO
GO
DROP TRIGGER IF EXISTS tr_fechaDevolucion
GO
CREATE TRIGGER tr_fechaDevolucion
ON Prestamo
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT * FROM inserted dato
INNER JOIN Libro L ON dato.idLibro = L.idLibro
WHERE dato.fechaDevolucion > DATEADD(day,
CAST(L.diasPrestamo AS INT), dato.fechaPrestamo)
)
BEGIN
RAISERROR ('La fecha de devolución no puede sobrepasar el máximo
de días de préstamo del libro.', 16, 1);
ROLLBACK TRANSACTION;
END
END;
GO
GO
DROP TRIGGER IF EXISTS tr_estadoParaPrestamo
GO
CREATE TRIGGER tr_estadoParaPrestamo
ON Prestamo
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT * FROM inserted dato
INNER JOIN Libro L ON dato.idLibro = L.idLibro
WHERE (L.estado = 'Dañado') OR (L.estado = 'Prestado'
AND dato.fechaEntrega IS NULL)
)
BEGIN
RAISERROR ('El libro no está disponible.',16,1);
ROLLBACK TRANSACTION;
END
END;
GO
GO
DROP TRIGGER IF EXISTS tr_cambioEstado
GO
CREATE TRIGGER tr_cambioEstado
ON Prestamo
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS (
SELECT * FROM inserted dato
INNER JOIN Libro L ON dato.idLibro = L.idLibro
WHERE dato.fechaEntrega IS NULL
)
BEGIN
UPDATE Libro
SET estado = 'Prestado'
WHERE idLibro = (SELECT idLibro FROM inserted)
END
ELSE IF EXISTS (
SELECT * FROM inserted dato
INNER JOIN Libro L ON dato.idLibro = L.idLibro
WHERE dato.fechaEntrega IS NOT NULL
)
BEGIN
UPDATE Libro
SET estado = 'Disponible'
WHERE idLibro = (SELECT idLibro FROM inserted)
END
END;
GO
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(13,11,'2023-03-25','2023-03-28','2023-03-27')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(11,12,'2022-04-07','2022-04-09','2022-04-09')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(13,9,'2022-10-30', '2022-11-02', '2022-11-02')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(15,11,'2022-10-03', '2022-10-05', '2022-10-05')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(16,11,'2022-10-31', '2022-11-01', '2022-11-02')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(12,12,'2022-01-31', '2022-02-01', '2022-02-03')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(13,9,'2022-11-02', '2022-11-05', '2022-12-04')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(13,12,'2022-01-02', '2022-01-04', '2022-01-04')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(11,12,'2022-02-02', '2022-02-05', '2022-02-04')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(12,16,'2022-05-02', '2022-05-05', '2022-05-04')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(12,15,'2022-07-22', '2022-07-25', '2022-07-24')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(14,14,'2022-09-22', '2022-09-25', '2022-09-24')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(15,13,'2022-10-02', '2022-10-05', '2022-10-04')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(16,11,'2022-11-02', '2022-11-05', '2022-11-04')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(16,10,'2022-01-02', '2022-01-03', '2022-01-03')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(16,11,'2023-01-02', '2023-01-05', '2023-01-04')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(15,12,'2023-03-02', '2023-03-05', '2023-03-04')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(14,13,'2023-02-02', '2023-02-05', '2023-02-04')
INSERT INTO
Prestamo(idEstudiante,idLibro,fechaPrestamo,fechaDevolucion,fechaEntrega)
VALUES(12,13,'2023-03-02', '2023-03-05', '2023-03-04')