· 8 years ago · Jul 03, 2018, 10:56 PM
1CREATE TABLE IF NOT EXISTS Paciente (
2 rut varchar(10) NOT NULL,
3 nombre varchar(100) NOT NULL,
4 edad int(3) NOT NULL,
5 PRIMARY KEY (rut)
6) ENGINE = InnoDB;
7
8CREATE TABLE IF NOT EXISTS Especialidad (
9 codigo int(2) NOT NULL,
10 nombre varchar(100) NOT NULL,
11 PRIMARY KEY (codigo)
12) ENGINE = InnoDB;
13
14CREATE TABLE IF NOT EXISTS Medico (
15 rut varchar(10) NOT NULL,
16 nombre varchar(100) NOT NULL,
17 codigo_especialidad int(2) NOT NULL REFERENCES Especialidad(codigo),
18 PRIMARY KEY (rut)
19) ENGINE = InnoDB;
20
21CREATE TABLE IF NOT EXISTS Horario_medico (
22 rut_medico varchar(10) NOT NULL REFERENCES Medico(rut),
23 fecha date NOT NULL DEFAULT '0000-00-00',
24 hora_inicio datetime NOT NULL DEFAULT '00:00:00',
25 numero_bloques int(2) NOT NULL DEFAULT 1,
26 PRIMARY KEY (rut_medico, fecha)
27) ENGINE = InnoDB;
28
29CREATE TABLE IF NOT EXISTS Bloques_atencion (
30 numero_atencion int(2) NOT NULL DEFAULT 1,
31 fecha date NOT NULL REFERENCES Horario_medico(fecha),
32 rut_medico varchar(10) NOT NULL REFERENCES Horario_medico(rut_medico),
33 rut_paciente varchar(10) NOT NULL REFERENCES Paciente(rut),
34 PRIMARY KEY (numero_atencion, fecha, rut_medico)
35) ENGINE = InnoDB;
36
37CREATE VIEW historial_paciente
38 AS SELECT Paciente.nombre nombre_paciente, Medico.nombre nombre_medico,
39 Especialidad.nombre especialidad,
40 Horario_medico.fecha fecha_atencion,
41 Horario_medico.hora_inicio hora_atencion
42 FROM Bloques_atencion, Paciente, Medico, Especialidad, Horario_medico
43 WHERE Bloques_atencion.rut_paciente = Paciente.rut AND Bloques_atencion.rut_medico = Medico.rut AND Medico.codigo_especialidad = Especialidad.codigo
44 GROUP BY Paciente.rut;
45
46CREATE VIEW top_especialidades
47 AS SELECT Especialidad.nombre nombre_especialidad, COUNT(Medico.codigo_especialidad) cantidad_consultas /* FALTA RANKING */
48 FROM Especialidad, Medico
49 WHERE Medico.codigo_especialidad = Especialidad.codigo
50 GROUP BY Medico.codigo_especialidad;
51
52DELIMITER //
53
54CREATE TRIGGER bloques_maximos BEFORE INSERT ON Horario_medico
55FOR EACH ROW BEGIN
56 IF ((NEW.hora_inicio >= '08:00:00') OR
57 (NEW.numero_bloques*'00:30:00' + NEW.hora_inicio >= '23:00:00')) THEN
58 SET NEW.rut_medico = NULL;
59 SET NEW.fecha = NULL;
60 SET NEW.hora_inicio = NULL;
61 SET NEW.numero_bloques = NULL;
62 END IF;
63END; //
64
65CREATE TRIGGER bloques_maximos BEFORE UPDATE ON Horario_medico
66FOR EACH ROW BEGIN
67 IF ((NEW.hora_inicio >= '08:00:00') OR
68 (NEW.numero_bloques*'00:30:00' + NEW.hora_inicio >= '23:00:00')) THEN
69 SET NEW.rut_medico = NULL;
70 SET NEW.fecha = NULL;
71 SET NEW.hora_inicio = NULL;
72 SET NEW.numero_bloques = NULL;
73 END IF;
74END; //
75
76DELIMITER ;