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