]> git.llucax.com Git - software/sercom.git/blob - doc/schema/schema.sql
related join
[software/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,
51     anio INTEGER NOT NULL,
52     cuatrimestre INTEGER NOT NULL,
53     autor_id INT CONSTRAINT autor_id_exists REFERENCES docente(id),
54     descripcion VARCHAR(255),
55     creado TIMESTAMP NOT NULL,
56     archivo BLOB DEFAULT NULL,
57     archivo_name VARCHAR(255) DEFAULT NULL,
58     archivo_type VARCHAR(255) DEFAULT NULL
59 );
60 CREATE UNIQUE INDEX enunciado_pk ON enunciado (nombre, anio, cuatrimestre);
61
62 CREATE TABLE enunciado_tarea (
63     enunciado_id INTEGER NOT NULL CONSTRAINT enunciado_id_exists REFERENCES enunciado(id),
64     tarea_id INTEGER NOT NULL CONSTRAINT tarea_id_exists REFERENCES tarea(id),
65     orden INT,
66     PRIMARY KEY (enunciado_id, tarea_id)
67 );
68
69 CREATE TABLE caso_de_prueba (
70     id INTEGER PRIMARY KEY,
71     enunciado_id INT CONSTRAINT enunciado_id_exists REFERENCES enunciado(id),
72     nombre VARCHAR(40) NOT NULL,
73     parametros VARCHAR(255) DEFAULT NULL,
74     retorno INT,
75     tiempo_cpu FLOAT,
76     descripcion VARCHAR(255)
77 );
78 CREATE UNIQUE INDEX caso_de_prueba_pk ON caso_de_prueba (enunciado_id, nombre);
79
80 CREATE TABLE ejercicio (
81     id INTEGER PRIMARY KEY,
82     curso_id INT NOT NULL CONSTRAINT curso_id_exists REFERENCES curso(id),
83     numero INT NOT NULL,
84     enunciado_id INT NOT NULL CONSTRAINT enunciado_id_exists REFERENCES enunciado(id),
85     grupal TINYINT NOT NULL
86 );
87 CREATE UNIQUE INDEX ejercicio_pk ON ejercicio (curso_id, numero);
88
89 CREATE TABLE instancia_de_entrega (
90     id INTEGER PRIMARY KEY,
91     ejercicio_id INT NOT NULL CONSTRAINT ejercicio_id_exists REFERENCES ejercicio(id),
92     numero INT NOT NULL,
93     inicio TIMESTAMP NOT NULL,
94     fin TIMESTAMP NOT NULL,
95     procesada TINYINT NOT NULL,
96     observaciones TEXT,
97     activo TINYINT NOT NULL
98 );
99
100 CREATE TABLE instancia_tarea (
101     instancia_id INTEGER NOT NULL CONSTRAINT instancia_id_exists REFERENCES instancia_de_entrega(id),
102     tarea_id INTEGER NOT NULL CONSTRAINT tarea_id_exists REFERENCES tarea(id),
103     orden INT,
104     PRIMARY KEY (instancia_id, tarea_id)
105 );
106
107 CREATE TABLE docente_inscripto (
108     id INTEGER PRIMARY KEY,
109     curso_id INT NOT NULL CONSTRAINT curso_id_exists REFERENCES curso(id),
110     docente_id INT NOT NULL CONSTRAINT docente_id_exists REFERENCES docente(id),
111     corrige TINYINT NOT NULL,
112     observaciones TEXT
113 );
114 CREATE UNIQUE INDEX docente_inscripto_pk ON docente_inscripto (curso_id, docente_id);
115
116 CREATE TABLE entregador (
117     id INTEGER PRIMARY KEY,
118     child_name VARCHAR(255),
119     nota DECIMAL(3, 1),
120     nota_cursada DECIMAL(3, 1),
121     observaciones TEXT,
122     activo TINYINT NOT NULL
123 );
124
125 CREATE TABLE grupo (
126     id INTEGER PRIMARY KEY,
127     curso_id INT NOT NULL CONSTRAINT curso_id_exists REFERENCES curso(id),
128     nombre VARCHAR(20) NOT NULL,
129     responsable_id INT CONSTRAINT responsable_id_exists REFERENCES alumno_inscripto(id) 
130 );
131
132 CREATE TABLE alumno_inscripto (
133     id INTEGER PRIMARY KEY,
134     curso_id INT NOT NULL CONSTRAINT curso_id_exists REFERENCES curso(id),
135     alumno_id INT NOT NULL CONSTRAINT alumno_id_exists REFERENCES alumno(id),
136     condicional TINYINT NOT NULL,
137     tutor_id INT CONSTRAINT tutor_id_exists REFERENCES docente_inscripto(id) 
138 );
139 CREATE UNIQUE INDEX alumno_inscripto_pk ON alumno_inscripto (curso_id, alumno_id);
140
141 CREATE TABLE tutor (
142     id INTEGER PRIMARY KEY,
143     grupo_id INT NOT NULL CONSTRAINT grupo_id_exists REFERENCES grupo(id),
144     docente_id INT NOT NULL CONSTRAINT docente_id_exists REFERENCES docente_inscripto(id),
145     alta TIMESTAMP NOT NULL,
146     baja TIMESTAMP
147 );
148 CREATE UNIQUE INDEX tutor_pk ON tutor (grupo_id, docente_id);
149
150 CREATE TABLE miembro (
151     id INTEGER PRIMARY KEY,
152     grupo_id INT NOT NULL CONSTRAINT grupo_id_exists REFERENCES grupo(id),
153     alumno_id INT NOT NULL CONSTRAINT alumno_id_exists REFERENCES alumno_inscripto(id),
154     nota DECIMAL(3, 1),
155     alta TIMESTAMP NOT NULL,
156     baja TIMESTAMP
157 );
158 CREATE UNIQUE INDEX miembro_pk ON miembro (grupo_id, alumno_id);
159
160 CREATE TABLE entrega (
161     id INTEGER PRIMARY KEY,
162     instancia_id INT NOT NULL CONSTRAINT instancia_id_exists REFERENCES instancia_de_entrega(id),
163     entregador_id INT CONSTRAINT entregador_id_exists REFERENCES entregador(id),
164     fecha TIMESTAMP NOT NULL,
165     correcta TINYINT NOT NULL,
166     observaciones TEXT
167 );
168 CREATE UNIQUE INDEX entrega_pk ON entrega (instancia_id, entregador_id, fecha);
169
170 CREATE TABLE correccion (
171     id INTEGER PRIMARY KEY,
172     instancia_id INT NOT NULL CONSTRAINT instancia_id_exists REFERENCES instancia_de_entrega(id),
173     entregador_id INT NOT NULL CONSTRAINT entregador_id_exists REFERENCES entregador(id),
174     entrega_id INT NOT NULL CONSTRAINT entrega_id_exists REFERENCES entrega(id),
175     corrector_id INT NOT NULL CONSTRAINT corrector_id_exists REFERENCES docente_inscripto(id),
176     asignado TIMESTAMP NOT NULL,
177     corregido TIMESTAMP,
178     nota DECIMAL(3, 1),
179     observaciones TEXT
180 );
181 CREATE UNIQUE INDEX correccion_pk ON correccion (instancia_id, entregador_id);
182
183 CREATE TABLE tarea_ejecutada (
184     id INTEGER PRIMARY KEY,
185     child_name VARCHAR(255),
186     tarea_id INT NOT NULL CONSTRAINT tarea_id_exists REFERENCES tarea(id),
187     entrega_id INT NOT NULL CONSTRAINT entrega_id_exists REFERENCES entrega(id),
188     inicio TIMESTAMP NOT NULL,
189     fin TIMESTAMP,
190     exito INT,
191     observaciones TEXT
192 );
193 CREATE UNIQUE INDEX tarea_ejecutada_pk ON tarea_ejecutada (tarea_id, entrega_id);
194
195 CREATE TABLE prueba (
196     id INTEGER PRIMARY KEY,
197     tarea_ejecutada_id INT NOT NULL CONSTRAINT tarea_ejecutada_id_exists REFERENCES tarea_ejecutada(id),
198     caso_de_prueba_id INT NOT NULL CONSTRAINT caso_de_prueba_id_exists REFERENCES caso_de_prueba(id),
199     inicio TIMESTAMP NOT NULL,
200     fin TIMESTAMP,
201     pasada INT,
202     observaciones TEXT
203 );
204 CREATE UNIQUE INDEX prueba_pk ON prueba (tarea_ejecutada_id, caso_de_prueba_id);
205
206 CREATE TABLE visita (
207     id INTEGER PRIMARY KEY,
208     visit_key VARCHAR(40) NOT NULL UNIQUE,
209     created TIMESTAMP NOT NULL,
210     expiry TIMESTAMP
211 );
212
213 CREATE TABLE visita_usuario (
214     id INTEGER PRIMARY KEY,
215     visit_key VARCHAR(40) NOT NULL UNIQUE,
216     user_id INT CONSTRAINT usuario_id_exists REFERENCES usuario(id) 
217 );
218
219 CREATE TABLE rol (
220     id INTEGER PRIMARY KEY,
221     nombre VARCHAR(255) NOT NULL UNIQUE,
222     descripcion VARCHAR(255),
223     creado TIMESTAMP NOT NULL,
224     permisos TEXT NOT NULL
225 );
226
227 CREATE TABLE rol_usuario (
228     rol_id INT NOT NULL,
229     usuario_id INT NOT NULL
230 );
231