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