· 6 years ago · Jan 31, 2020, 11:04 AM
1
2SET NAMES utf8;
3SET time_zone = '+00:00';
4SET foreign_key_checks = 0;
5SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
6
7SET NAMES utf8mb4;
8
9DROP TABLE IF EXISTS `horario`;
10CREATE TABLE `horario` (
11 `id` int(11) NOT NULL AUTO_INCREMENT,
12 `instalacion` int(11) NOT NULL,
13 `inicio` time NOT NULL,
14 `fin` time NOT NULL,
15 PRIMARY KEY (`id`),
16 KEY `instalacion` (`instalacion`),
17 CONSTRAINT `horario_ibfk_1` FOREIGN KEY (`instalacion`) REFERENCES `instalacion` (`id`) ON DELETE CASCADE
18) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
19
20INSERT INTO `horario` (`id`, `instalacion`, `inicio`, `fin`) VALUES
21(1, 3, '11:00:00', '12:00:00'),
22(2, 2, '11:00:00', '12:00:00');
23
24DROP TABLE IF EXISTS `instalacion`;
25CREATE TABLE `instalacion` (
26 `id` int(11) NOT NULL AUTO_INCREMENT,
27 `nombre` varchar(50) NOT NULL,
28 PRIMARY KEY (`id`)
29) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
30
31INSERT INTO `instalacion` (`id`, `nombre`) VALUES
32(2, 'jj'),
33(3, 'Tenis'),
34(4, 'Futbol sala');
35
36DROP TABLE IF EXISTS `reserva`;
37CREATE TABLE `reserva` (
38 `id` int(11) NOT NULL AUTO_INCREMENT,
39 `usuario` int(11) NOT NULL,
40 `horario` int(11) NOT NULL,
41 `fecha` date NOT NULL,
42 PRIMARY KEY (`id`),
43 KEY `usuario` (`usuario`),
44 KEY `horario` (`horario`),
45 CONSTRAINT `reserva_ibfk_1` FOREIGN KEY (`usuario`) REFERENCES `usuario` (`id`),
46 CONSTRAINT `reserva_ibfk_2` FOREIGN KEY (`horario`) REFERENCES `horario` (`id`)
47) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
48
49
50DELIMITER ;;
51
52CREATE TRIGGER `reserva_diaria` BEFORE INSERT ON `reserva` FOR EACH ROW
53BEGIN
54 IF (SELECT COUNT(*) FROM `reserva` WHERE `reserva`.`fecha` = NEW.`fecha` AND `reserva`.`usuario`= NEW.`usuario`) > 0
55 THEN
56 SIGNAL sqlstate '45001'
57 SET message_text = 'Sólo se permite una reserva al día.';
58 END IF;
59 END;;
60
61CREATE TRIGGER `reserva_semanal` BEFORE INSERT ON `reserva` FOR EACH ROW
62BEGIN
63 IF ( NEW.`fecha` < CURDATE())
64 THEN
65 SIGNAL sqlstate '45002'
66 SET message_text = 'No se permite reservar en una fecha anterior a la actual.';
67 ELSEIF ( NEW.`fecha` > DATE_ADD(CURDATE(), INTERVAL 14 DAY) )
68 THEN
69 SIGNAL sqlstate '45003'
70 SET message_text = 'No se permite reservar con más de dos semanas de antelación.';
71 END IF;
72 END;;
73
74CREATE TRIGGER `reserva_actualizar_pasado` BEFORE UPDATE ON `reserva` FOR EACH ROW
75BEGIN
76 IF ( OLD.`fecha` <= CURDATE())
77 THEN
78 SIGNAL sqlstate '45004'
79 SET message_text = 'No se permite actualizar una reserva ya pasada o en el día de la misma.';
80 END IF;
81 END;;
82
83CREATE TRIGGER `reserva_pasado` BEFORE DELETE ON `reserva` FOR EACH ROW
84BEGIN
85 IF ( OLD.`fecha` < CURDATE())
86 THEN
87 SIGNAL sqlstate '45004'
88 SET message_text = 'No se permite eliminar una fecha pasada.';
89 END IF;
90 END;;
91
92DELIMITER ;
93
94DROP TABLE IF EXISTS `usuario`;
95CREATE TABLE `usuario` (
96 `id` int(11) NOT NULL AUTO_INCREMENT,
97 `username` varchar(12) NOT NULL,
98 `password` varchar(20) NOT NULL,
99 `email` varchar(50) NOT NULL,
100 `token` varchar(255) DEFAULT NULL,
101 PRIMARY KEY (`id`)
102) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
103
104INSERT INTO `usuario` (`id`, `username`, `password`, `email`, `token`) VALUES
105(1, 'bruh', 'bca', 'abc@sincorreo.com', NULL);