]> git.llucax.com Git - z.facultad/75.52/sercom.git/blob - doc/schema/schema.sql
Bugfix. Faltaba una condición en los JOIN ordenados.
[z.facultad/75.52/sercom.git] / doc / schema / schema.sql
1
2 CREATE TABLE curso (
3     id INTEGER PRIMARY KEY,
4     anio INT NOT NULL,
5     cuatrimestre INT NOT NULL,
6     numero INT NOT NULL,
7     descripcion VARCHAR(255)
8 );
9 CREATE UNIQUE INDEX curso_pk ON curso (anio, cuatrimestre, numero);
10
11 CREATE TABLE usuario (
12     id INTEGER PRIMARY KEY,
13     child_name VARCHAR(255),
14     usuario VARCHAR(10) NOT NULL UNIQUE,
15     contrasenia VARCHAR(255),
16     nombre VARCHAR(255) NOT NULL,
17     email VARCHAR(255),
18     telefono VARCHAR(255),
19     creado TIMESTAMP NOT NULL,
20     observaciones TEXT,
21     activo TINYINT NOT NULL
22 );
23
24 CREATE TABLE docente (
25     id INTEGER PRIMARY KEY,
26     nombrado TINYINT NOT NULL
27 );
28
29 CREATE TABLE alumno (
30     id INTEGER PRIMARY KEY,
31     nota DECIMAL(3, 1)
32 );
33
34 CREATE TABLE tarea (
35     id INTEGER PRIMARY KEY,
36     child_name VARCHAR(255),
37     nombre VARCHAR(30) NOT NULL UNIQUE,
38     descripcion VARCHAR(255)
39 );
40
41 CREATE TABLE dependencia (
42     padre_id INTEGER NOT NULL CONSTRAINT tarea_id_exists REFERENCES tarea(id),
43     hijo_id INTEGER NOT NULL CONSTRAINT tarea_id_exists REFERENCES tarea(id),
44     orden INT,
45     PRIMARY KEY (padre_id, hijo_id)
46 );
47
48 CREATE TABLE enunciado (
49     id INTEGER PRIMARY KEY,
50     nombre VARCHAR(60) NOT NULL UNIQUE,
51     descripcion VARCHAR(255),
52     autor_id INT CONSTRAINT autor_id_exists REFERENCES docente(id),
53     creado TIMESTAMP NOT NULL
54 );
55
56 CREATE TABLE enunciado_tarea (
57     enunciado_id INTEGER NOT NULL CONSTRAINT enunciado_id_exists REFERENCES enunciado(id),
58     tarea_id INTEGER NOT NULL CONSTRAINT tarea_id_exists REFERENCES tarea(id),
59     orden INT,
60     PRIMARY KEY (enunciado_id, tarea_id)
61 );
62
63 CREATE TABLE caso_de_prueba (
64     id INTEGER PRIMARY KEY,
65     enunciado_id INT CONSTRAINT enunciado_id_exists REFERENCES enunciado(id),
66     nombre VARCHAR(40) NOT NULL,
67     parametros TEXT NOT NULL,
68     retorno INT,
69     tiempo_cpu FLOAT,
70     descripcion VARCHAR(255)
71 );
72 CREATE UNIQUE INDEX caso_de_prueba_pk ON caso_de_prueba (enunciado_id, nombre);
73
74 CREATE TABLE ejercicio (
75     id INTEGER PRIMARY KEY,
76     curso_id INT NOT NULL CONSTRAINT curso_id_exists REFERENCES curso(id),
77     numero INT NOT NULL,
78     enunciado_id INT NOT NULL CONSTRAINT enunciado_id_exists REFERENCES enunciado(id),
79     grupal TINYINT NOT NULL
80 );
81 CREATE UNIQUE INDEX ejercicio_pk ON ejercicio (curso_id, numero);
82
83 CREATE TABLE instancia_de_entrega (
84     id INTEGER PRIMARY KEY,
85     ejercicio_id INT NOT NULL CONSTRAINT ejercicio_id_exists REFERENCES ejercicio(id),
86     numero INT NOT NULL,
87     inicio TIMESTAMP NOT NULL,
88     fin TIMESTAMP NOT NULL,
89     procesada TINYINT NOT NULL,
90     observaciones TEXT,
91     activo TINYINT NOT NULL
92 );
93
94 CREATE TABLE instancia_tarea (
95     instancia_id INTEGER NOT NULL CONSTRAINT instancia_id_exists REFERENCES instancia_de_entrega(id),
96     tarea_id INTEGER NOT NULL CONSTRAINT tarea_id_exists REFERENCES tarea(id),
97     orden INT,
98     PRIMARY KEY (instancia_id, tarea_id)
99 );
100
101 CREATE TABLE docente_inscripto (
102     id INTEGER PRIMARY KEY,
103     curso_id INT NOT NULL CONSTRAINT curso_id_exists REFERENCES curso(id),
104     docente_id INT NOT NULL CONSTRAINT docente_id_exists REFERENCES docente(id),
105     corrige TINYINT NOT NULL,
106     observaciones TEXT
107 );
108 CREATE UNIQUE INDEX docente_inscripto_pk ON docente_inscripto (curso_id, docente_id);
109
110 CREATE TABLE entregador (
111     id INTEGER PRIMARY KEY,
112     child_name VARCHAR(255),
113     nota DECIMAL(3, 1),
114     nota_cursada DECIMAL(3, 1),
115     observaciones TEXT,
116     activo TINYINT NOT NULL
117 );
118
119 CREATE TABLE grupo (
120     id INTEGER PRIMARY KEY,
121     curso_id INT NOT NULL CONSTRAINT curso_id_exists REFERENCES curso(id),
122     nombre VARCHAR(20) NOT NULL,
123     responsable_id INT CONSTRAINT responsable_id_exists REFERENCES alumno_inscripto(id) 
124 );
125
126 CREATE TABLE alumno_inscripto (
127     id INTEGER PRIMARY KEY,
128     curso_id INT NOT NULL CONSTRAINT curso_id_exists REFERENCES curso(id),
129     alumno_id INT NOT NULL CONSTRAINT alumno_id_exists REFERENCES alumno(id),
130     condicional TINYINT NOT NULL,
131     tutor_id INT CONSTRAINT tutor_id_exists REFERENCES docente_inscripto(id) 
132 );
133 CREATE UNIQUE INDEX alumno_inscripto_pk ON alumno_inscripto (curso_id, alumno_id);
134
135 CREATE TABLE tutor (
136     id INTEGER PRIMARY KEY,
137     grupo_id INT NOT NULL CONSTRAINT grupo_id_exists REFERENCES grupo(id),
138     docente_id INT NOT NULL CONSTRAINT docente_id_exists REFERENCES docente_inscripto(id),
139     alta TIMESTAMP NOT NULL,
140     baja TIMESTAMP
141 );
142 CREATE UNIQUE INDEX tutor_pk ON tutor (grupo_id, docente_id);
143
144 CREATE TABLE miembro (
145     id INTEGER PRIMARY KEY,
146     grupo_id INT NOT NULL CONSTRAINT grupo_id_exists REFERENCES grupo(id),
147     alumno_id INT NOT NULL CONSTRAINT alumno_id_exists REFERENCES alumno_inscripto(id),
148     nota DECIMAL(3, 1),
149     alta TIMESTAMP NOT NULL,
150     baja TIMESTAMP
151 );
152 CREATE UNIQUE INDEX miembro_pk ON miembro (grupo_id, alumno_id);
153
154 CREATE TABLE entrega (
155     id INTEGER PRIMARY KEY,
156     instancia_id INT NOT NULL CONSTRAINT instancia_id_exists REFERENCES instancia_de_entrega(id),
157     entregador_id INT CONSTRAINT entregador_id_exists REFERENCES entregador(id),
158     fecha TIMESTAMP NOT NULL,
159     correcta TINYINT NOT NULL,
160     observaciones TEXT
161 );
162 CREATE UNIQUE INDEX entrega_pk ON entrega (instancia_id, entregador_id, fecha);
163
164 CREATE TABLE correccion (
165     id INTEGER PRIMARY KEY,
166     instancia_id INT NOT NULL CONSTRAINT instancia_id_exists REFERENCES instancia_de_entrega(id),
167     entregador_id INT NOT NULL CONSTRAINT entregador_id_exists REFERENCES entregador(id),
168     entrega_id INT NOT NULL CONSTRAINT entrega_id_exists REFERENCES entrega(id),
169     corrector_id INT NOT NULL CONSTRAINT corrector_id_exists REFERENCES docente_inscripto(id),
170     asignado TIMESTAMP NOT NULL,
171     corregido TIMESTAMP,
172     nota DECIMAL(3, 1),
173     observaciones TEXT
174 );
175 CREATE UNIQUE INDEX correccion_pk ON correccion (instancia_id, entregador_id);
176
177 CREATE TABLE tarea_ejecutada (
178     id INTEGER PRIMARY KEY,
179     child_name VARCHAR(255),
180     tarea_id INT NOT NULL CONSTRAINT tarea_id_exists REFERENCES tarea(id),
181     entrega_id INT NOT NULL CONSTRAINT entrega_id_exists REFERENCES entrega(id),
182     inicio TIMESTAMP NOT NULL,
183     fin TIMESTAMP,
184     exito INT,
185     observaciones TEXT
186 );
187 CREATE UNIQUE INDEX tarea_ejecutada_pk ON tarea_ejecutada (tarea_id, entrega_id);
188
189 CREATE TABLE prueba (
190     id INTEGER PRIMARY KEY,
191     tarea_ejecutada_id INT NOT NULL CONSTRAINT tarea_ejecutada_id_exists REFERENCES tarea_ejecutada(id),
192     caso_de_prueba_id INT NOT NULL CONSTRAINT caso_de_prueba_id_exists REFERENCES caso_de_prueba(id),
193     inicio TIMESTAMP NOT NULL,
194     fin TIMESTAMP,
195     pasada INT,
196     observaciones TEXT
197 );
198 CREATE UNIQUE INDEX prueba_pk ON prueba (tarea_ejecutada_id, caso_de_prueba_id);
199
200 CREATE TABLE visita (
201     id INTEGER PRIMARY KEY,
202     visit_key VARCHAR(40) NOT NULL UNIQUE,
203     created TIMESTAMP NOT NULL,
204     expiry TIMESTAMP
205 );
206
207 CREATE TABLE visita_usuario (
208     id INTEGER PRIMARY KEY,
209     visit_key VARCHAR(40) NOT NULL UNIQUE,
210     user_id INT CONSTRAINT usuario_id_exists REFERENCES usuario(id) 
211 );
212
213 CREATE TABLE rol (
214     id INTEGER PRIMARY KEY,
215     nombre VARCHAR(255) NOT NULL UNIQUE,
216     descripcion VARCHAR(255),
217     creado TIMESTAMP NOT NULL,
218     permisos TEXT NOT NULL
219 );
220
221 CREATE TABLE rol_usuario (
222     rol_id INT NOT NULL,
223     usuario_id INT NOT NULL
224 );
225