· 5 years ago · Feb 24, 2020, 05:00 PM
1
2-- COMO ROOT PARA CREAR LA BBDD Y EL USUARIO
3
4-- CREAMOS LA BBDD PARA UTF-8 COLLATION EN ESPAÑOL
5CREATE DATABASE gestion_reservas \
6 CHARACTER SET utf16 COLLATE utf16_spanish_ci;
7
8-- CAMBIAMOS LA BBDD ACTIVA
9USE gestion_reservas;
10
11
12-- CREAMOS LAS TABLAS
13CREATE TABLE `usuario` (
14 `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
15 `username` varchar(12) NOT NULL,
16 `password` varchar(20) NOT NULL,
17 `email` varchar(50) NOT NULL
18) ENGINE='InnoDB';
19
20CREATE TABLE `instalacion` (
21 `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
22 `nombre` varchar(50) NOT NULL
23) ENGINE='InnoDB';
24
25CREATE TABLE `horario` (
26 `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
27 `instalacion` int(11) NOT NULL,
28 `inicio` time NOT NULL,
29 `fin` time NOT NULL,
30 FOREIGN KEY (`instalacion`) REFERENCES `instalacion` (`id`) ON DELETE CASCADE
31) ENGINE='InnoDB';
32
33CREATE TABLE `reserva` (
34 `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
35 `usuario` int(11) NOT NULL,
36 `horario` int(11) NOT NULL,
37 `fecha` date NOT NULL,
38 FOREIGN KEY (`usuario`) REFERENCES `usuario` (`id`),
39 FOREIGN KEY (`horario`) REFERENCES `horario` (`id`)
40) ENGINE='InnoDB';
41
42
43
44DROP TRIGGER IF EXISTS reserva_pasado;
45
46DELIMITER $$
47CREATE TRIGGER `reserva_pasado`
48 BEFORE DELETE ON `reserva` FOR EACH ROW
49 BEGIN
50 IF ( OLD.`fecha` < CURDATE())
51 THEN
52 SIGNAL sqlstate '45004'
53 SET message_text = 'No se permite eliminar una fecha pasada.';
54 END IF;
55 END;
56$$
57
58
59DROP TRIGGER IF EXISTS reserva_actualizar_pasado;
60
61DELIMITER $$
62CREATE TRIGGER `reserva_actualizar_pasado`
63 BEFORE UPDATE ON `reserva` FOR EACH ROW
64 BEGIN
65 IF ( OLD.`fecha` <= CURDATE())
66 THEN
67 SIGNAL sqlstate '45004'
68 SET message_text = 'No se permite actualizar una reserva ya pasada o en el día de la misma.';
69 END IF;
70 END;
71$$
72
73
74
75DROP TRIGGER IF EXISTS reserva_semanal;
76
77DELIMITER $$
78CREATE TRIGGER `reserva_semanal`
79 BEFORE INSERT ON `reserva` FOR EACH ROW
80 BEGIN
81 IF ( NEW.`fecha` < CURDATE())
82 THEN
83 SIGNAL sqlstate '45002'
84 SET message_text = 'No se permite reservar en una fecha anterior a la actual.';
85 ELSEIF ( NEW.`fecha` > DATE_ADD(CURDATE(), INTERVAL 14 DAY) )
86 THEN
87 SIGNAL sqlstate '45003'
88 SET message_text = 'No se permite reservar con más de dos semanas de antelación.';
89 END IF;
90 END;
91$$
92
93DROP TABLE user;
94
95CREATE TABLE user (
96 `id` int NOT NULL PRIMARY KEY AUTO_INCREMENT,
97 `user` varchar(100),
98 `pwd` varchar(100),
99 `token` varchar(255),
100 `token_valid_from` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
101 `token_valid_until` TIMESTAMP NOT NULL DEFAULT (TIMESTAMPADD(DAY,21,CURRENT_TIMESTAMP()))
102 -- `token_valid_until` TIMESTAMP NOT NULL DEFAULT (CURRENT_DATE + INTERVAL 21 DAY)
103) ENGINE = 'InnoDB';
104
105INSERT INTO user(user,pwd) VALUES ('admin','admin');