Está en la página 1de 7

CREACIÓN DE LA TABLA Estudiante

GO

DROP TABLE IF EXISTS Estudiante

Go

CREATE TABLE Estudiante (

  idEstudiante SMALLINT IDENTITY (1,1) NOT NULL,

  cedulaIdentidad cedula,

  nombre VARCHAR(20) NOT NULL,

  apellido VARCHAR(20) NOT NULL,

  correo mail,

  telefono CHAR(10) NULL,-- UNIQUE,

  usuarioRegistro VARCHAR(128) DEFAULT SYSTEM_USER NOT NULL,

  fechaRegistro DATETIME DEFAULT GETDATE() NOT NULL,

  

  CONSTRAINT PK_Estudiante PRIMARY KEY (idEstudiante),

  CONSTRAINT CK_Estudiante_Telefono CHECK(telefono IS NULL OR


(LEN(telefono)=10 AND telefono LIKE

'[0][9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),

CONSTRAINT UK_correo UNIQUE(correo),

CONSTRAINT UK_cedulaIdentidad UNIQUE(cedulaIdentidad) 

); 

CREACIÓN DE INDEX PARA ACEPTAR VARIOS VALORES NULL EN


TABLA Estudiante, telefono

DROP INDEX IF EXISTS UK_tbl_Estudiante_telefono ON dbo.Estudiante;

CREATE UNIQUE NONCLUSTERED INDEX UK_tbl_Estudiante_telefono


ON dbo.Estudiante(telefono)

WHERE telefono IS NOT NULL;

GO

CREACIÓN DE LA TABLA Libro

GO

DROP TABLE IF EXISTS Libro

Go

CREATE TABLE Libro (

  idLibro SMALLINT IDENTITY (1,1) NOT NULL,

  ISBN CHAR(17) NOT NULL,

  titulo NVARCHAR(100) NOT NULL,

  anio CHAR(4) NOT NULL,

  autorPrincipal NVARCHAR(50) DEFAULT 'Anónimo' NOT NULL,

  diasPrestamo CHAR(1) NOT NULL,

  estado VARCHAR(10) NOT NULL,

  usuarioRegistro VARCHAR(128) DEFAULT SYSTEM_USER NOT NULL,

  fechaRegistro DATETIME DEFAULT GETDATE() NOT NULL,

  CONSTRAINT PK_Libro PRIMARY KEY (idLibro),

  CONSTRAINT CK_ISBN CHECK (ISBN LIKE

'[9][7][8-9]-[0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9]'),

  CONSTRAINT CK_Libro_Anio CHECK (anio <= CONVERT(CHAR(4),


YEAR(GETDATE()))),

  CONSTRAINT CK_Libro_DiasPrestamo CHECK (diasPrestamo = '1' OR


diasPrestamo = '2' OR diasPrestamo = '3'),

  CONSTRAINT CK_Libro_Estado CHECK(estado IN ('Disponible', 'Prestado',


'Dañado')),

  CONSTRAINT UK_ISBN UNIQUE (ISBN)

);
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

CREACIÓN DE TRIGGERS PARA TABLA Prestamo

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

TRIGGER VERIFICA QUE NO SE PRESTE UN LIBRO A MENOS QUE ESTÉ


DISPONIBLE

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

TRIGGER QUE CAMBIA EL ESTADO DEL LIBRO SI ESTE FUE DEVUELTO


O NO

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 DE LOS DATOS PARA CADA UNA DE LAS TABLAS


INSERTS TABLA ESTUDIANTE:

INSERT INTO Estudiante(cedulaIdentidad,nombre,apellido,correo,telefono)


VALUES ('1750270905' ,'Emilio', 'Andrade', 'joseemilioai@hotmail.com',
'0980429187')

INSERT INTO Estudiante(cedulaIdentidad,nombre,apellido,correo,telefono)


VALUES ( '1718636465' ,'Martin', 'Aldas', 'martinaldas57@hotmail.com',
'0980438745')

INSERT INTO Estudiante(cedulaIdentidad,nombre,apellido,correo)


VALUES ('1720439213' ,'Esteban', 'Carranza', 'estebencarr2@hotmail.com')

INSERT INTO Estudiante(cedulaIdentidad,nombre,apellido,correo)


VALUES ('1722548730','Camila','Diaz','camdii@hotmail.com')

INSERT INTO Estudiante(cedulaIdentidad,nombre,apellido,correo,telefono)


VALUES ('1803239559' ,'Miranda', 'Burneo', 'mirandaburneo@hotmail.com',
'0997739816')

INSERT INTO Estudiante(cedulaIdentidad,nombre,apellido,correo,telefono)


VALUES ('1712546785' ,'Gabriela', 'Rivera', 'gabrielarivera@hotmail.com',
'0984158122')

INSERTS TABLA LIBRO:

INSERT INTO Libro(ISBN,titulo,anio,autorPrincipal,diasPrestamo,estado)


VALUES('978-8-40-811959-3', 'Historia del tiempo', '2001', 'Stephen Hawking', '3',
'Disponible')

INSERT INTO Libro(ISBN,titulo,anio,autorPrincipal,diasPrestamo,estado)


VALUES('978-6-07-557524-7', 'El Bosón de Higgs', '2016', 'Javier Santaolalla', '3',
'Disponible')
INSERT INTO Libro(ISBN,titulo,anio,autorPrincipal,diasPrestamo,estado)
VALUES( '978-5-46-324592-9', 'Don Quijote de la Mancha', '2010', 'Miguel de
Cervantes', '3', 'Disponible')

INSERT INTO Libro(ISBN,titulo,anio,autorPrincipal,diasPrestamo,estado)


VALUES('978-4-71-421453-4', 'Viaje al fin de la noche', '2019', 'Louis-Ferdninand
Céline', '3', 'Disponible')

INSERT INTO Libro(ISBN,titulo,anio,autorPrincipal,diasPrestamo,estado)


VALUES('978-8-99-745632-1', 'Los cuentos de Canterbury', '2020', 'Geoffrey Chaucer',
'3', 'Disponible')

INSERT INTO Libro(ISBN,titulo,anio,autorPrincipal,diasPrestamo,estado)


VALUES('978-3-21-456541-0', 'En busca del tiempo perdido', '2014', 'Marcel Proust',
'3', 'Disponible')

INSERTS TABLA PRESTAMO:

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) 


VALUES(2,10,'2023-02-07', '2023-02-08')

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')

También podría gustarte