forked from pasosdeJesus/SIVeL
-
Notifications
You must be signed in to change notification settings - Fork 1
/
estructura.sql
631 lines (514 loc) · 19.9 KB
/
estructura.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
-- Inicialmente basada en ingeniería inversa de datos a la base empleada en el
-- "Banco de Datos de derechos humanos y violencia política" de 2000 a 2004.
-- Dominio público. Sin garantias. [email protected]. 2004.
-- Nombres de tablas deberían ser sin _
-- llave foranea a la tabla t debería ser id_t
SET client_encoding = 'LATIN1';
CREATE TABLE actualizacion_base (
id VARCHAR(10) PRIMARY KEY,
fecha DATE NOT NULL,
descripcion VARCHAR(500) NOT NULL
);
CREATE SEQUENCE antecedente_seq;
CREATE TABLE antecedente (
id INTEGER PRIMARY KEY DEFAULT(nextval('antecedente_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
-- CREATE SEQUENCE intervalo_seq;
CREATE SEQUENCE intervalo_seq;
-- Mejor inicio, fin (?)
CREATE TABLE intervalo (
id INTEGER PRIMARY KEY DEFAULT (nextval('intervalo_seq')),
nombre VARCHAR(25) NOT NULL,
rango VARCHAR(25) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE caso_seq;
CREATE TABLE caso (
id INTEGER PRIMARY KEY DEFAULT(nextval('caso_seq')),
titulo VARCHAR(50),
fecha DATE NOT NULL,
hora VARCHAR(10),
duracion VARCHAR(10),
memo TEXT NOT NULL,
gr_confiabilidad VARCHAR(5),
gr_esclarecimiento VARCHAR(5),
gr_impunidad VARCHAR(5),
gr_informacion VARCHAR(5),
bienes TEXT,
id_intervalo INTEGER REFERENCES intervalo
);
CREATE SEQUENCE parametros_reporte_consolidado_seq;
CREATE TABLE parametros_reporte_consolidado (
no_columna INTEGER PRIMARY KEY DEFAULT (nextval('parametros_reporte_consolidado_seq')),
rotulo VARCHAR(25) NOT NULL,
tipo_violencia VARCHAR(25) NOT NULL,
clasificacion VARCHAR(25) NOT NULL,
peso INTEGER DEFAULT '0',
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE TABLE tipo_violencia (
id CHAR(1) PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
nomcorto VARCHAR(10) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE TABLE supracategoria (
id INTEGER NOT NULL,
nombre VARCHAR(50) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion),
id_tipo_violencia VARCHAR(1) REFERENCES tipo_violencia NOT NULL,
PRIMARY KEY (id, id_tipo_violencia)
);
CREATE TABLE categoria (
id INTEGER PRIMARY KEY,
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion),
id_supracategoria INTEGER NOT NULL,
id_tipo_violencia VARCHAR(1) NOT NULL REFERENCES tipo_violencia,
col_rep_consolidado INTEGER REFERENCES parametros_reporte_consolidado (no_columna),
contada_en INTEGER REFERENCES categoria,
tipocat CHAR DEFAULT 'I' CHECK (tipocat='I' OR tipocat='C' OR tipocat='O') ,
FOREIGN KEY (id_supracategoria, id_tipo_violencia)
REFERENCES supracategoria (id, id_tipo_violencia)
);
CREATE TABLE tipo_clase (
id VARCHAR(3) PRIMARY KEY,
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE departamento_seq;
CREATE TABLE departamento (
id INTEGER PRIMARY KEY DEFAULT(nextval('departamento_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE municipio_seq;
CREATE TABLE municipio (
id INTEGER NOT NULL DEFAULT(nextval('municipio_seq')),
nombre VARCHAR(500) NOT NULL,
id_departamento INTEGER NOT NULL REFERENCES departamento
ON DELETE CASCADE,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion),
PRIMARY KEY (id, id_departamento)
);
CREATE SEQUENCE clase_seq;
CREATE TABLE clase (
id INTEGER NOT NULL DEFAULT(nextval('clase_seq')),
nombre VARCHAR(500) NOT NULL,
id_municipio INTEGER,
id_tipo_clase VARCHAR(3) REFERENCES tipo_clase,
id_departamento INTEGER REFERENCES departamento ON DELETE CASCADE,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion),
FOREIGN KEY (id_municipio, id_departamento) REFERENCES
municipio (id, id_departamento) ON DELETE CASCADE,
PRIMARY KEY (id, id_municipio, id_departamento)
);
CREATE SEQUENCE contexto_seq;
CREATE TABLE contexto (
id INTEGER PRIMARY KEY DEFAULT(nextval('contexto_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE etnia_seq;
CREATE TABLE etnia (
id INTEGER PRIMARY KEY DEFAULT(nextval('etnia_seq')),
nombre VARCHAR(200) NOT NULL,
descripcion VARCHAR(1000),
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE iglesia_seq;
CREATE TABLE iglesia (
id INTEGER PRIMARY KEY DEFAULT(nextval('iglesia_seq')),
nombre VARCHAR(200) NOT NULL,
descripcion VARCHAR(1000),
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE filiacion_seq;
CREATE TABLE filiacion (
id INTEGER PRIMARY KEY DEFAULT(nextval('filiacion_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE frontera_seq;
CREATE TABLE frontera (
id INTEGER PRIMARY KEY DEFAULT(nextval('frontera_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE fuente_directa_seq;
CREATE TABLE fuente_directa (
id INTEGER PRIMARY KEY DEFAULT(nextval('fuente_directa_seq')),
nombre VARCHAR(500) NOT NULL
);
CREATE SEQUENCE funcionario_seq;
-- Podria dejarse solo usuario con un campo para indicar que usuarios
-- pueden entrar en el momento y cuales ya no (?).
CREATE TABLE funcionario (
id INTEGER PRIMARY KEY DEFAULT(nextval('funcionario_seq')),
anotacion VARCHAR(50),
nombre VARCHAR(15) NOT NULL UNIQUE
);
-- Por consistencia con demas deberia ser id no id_opcion
-- id_mama es id de opcion mama (menús son árbol)
CREATE TABLE opcion (
id_opcion INTEGER PRIMARY KEY,
descripcion VARCHAR(50) NOT NULL,
id_mama INTEGER,
nomid VARCHAR(150)
);
CREATE SEQUENCE organizacion_seq;
CREATE TABLE organizacion (
id INTEGER PRIMARY KEY DEFAULT(nextval('organizacion_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE prensa_seq;
CREATE TABLE prensa (
id INTEGER PRIMARY KEY DEFAULT(nextval('prensa_seq')),
nombre VARCHAR(500) NOT NULL,
tipo_fuente VARCHAR(25) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE presuntos_responsables_seq;
CREATE TABLE presuntos_responsables (
id INTEGER PRIMARY KEY DEFAULT(nextval('presuntos_responsables_seq')),
nombre VARCHAR(500) NOT NULL,
id_papa INTEGER REFERENCES presuntos_responsables,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE rango_edad_seq;
-- Debería tener edad inicia y edad final para poder chequear bien en
-- interfaz (ver PagVictimaIndividual). Sobre nombre.
CREATE TABLE rango_edad (
id INTEGER PRIMARY KEY DEFAULT(nextval('rango_edad_seq')),
nombre VARCHAR(20) NOT NULL,
rango VARCHAR(20) NOT NULL,
limiteinferior INTEGER NOT NULL DEFAULT '0',
limitesuperior INTEGER NOT NULL DEFAULT '0',
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE region_seq;
CREATE TABLE region (
id INTEGER PRIMARY KEY DEFAULT(nextval('region_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE resultado_agresion_seq;
CREATE TABLE resultado_agresion (
id INTEGER PRIMARY KEY DEFAULT(nextval('resultado_agresion_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE rol_seq;
-- Por consistencia con otras tablas debería ser id en lugar de id_rol
CREATE TABLE rol (
id_rol INTEGER PRIMARY KEY DEFAULT(nextval('rol_seq')),
nombre VARCHAR(20) NOT NULL
);
CREATE SEQUENCE sector_social_seq;
CREATE TABLE sector_social (
id INTEGER PRIMARY KEY DEFAULT(nextval('sector_social_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE tipo_sitio_seq;
CREATE TABLE tipo_sitio (
id INTEGER PRIMARY KEY DEFAULT(nextval('tipo_sitio_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE ubicacion_seq;
CREATE TABLE ubicacion (
id INTEGER PRIMARY KEY DEFAULT (nextval('ubicacion_seq')),
lugar VARCHAR(260),
sitio VARCHAR(260),
id_clase INTEGER,
id_municipio INTEGER,
id_departamento INTEGER REFERENCES departamento,
id_tipo_sitio INTEGER REFERENCES tipo_sitio NOT NULL,
id_caso INTEGER NOT NULL REFERENCES caso,
latitud FLOAT,
longitud FLOAT,
FOREIGN KEY (id_municipio, id_departamento) REFERENCES
municipio (id, id_departamento),
FOREIGN KEY (id_clase, id_municipio, id_departamento) REFERENCES
clase (id, id_municipio, id_departamento)
);
CREATE TABLE usuario (
id_usuario VARCHAR(15) PRIMARY KEY,
password VARCHAR(64) NOT NULL,
nombre VARCHAR(50),
descripcion VARCHAR(50),
id_rol INTEGER REFERENCES rol,
dias_edicion_caso INTEGER
);
CREATE SEQUENCE vinculo_estado_seq;
CREATE TABLE vinculo_estado (
id INTEGER PRIMARY KEY DEFAULT(nextval('vinculo_estado_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE profesion_seq;
CREATE TABLE profesion (
id INTEGER PRIMARY KEY DEFAULT(nextval('profesion_seq')),
nombre VARCHAR(500) NOT NULL,
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE SEQUENCE persona_seq;
CREATE TABLE persona (
id INTEGER PRIMARY KEY DEFAULT(nextval('persona_seq')),
nombres VARCHAR(100) NOT NULL,
apellidos VARCHAR(100) NOT NULL,
anionac INTEGER,
mesnac INTEGER CHECK (mesnac IS NULL OR (mesnac>='1' AND mesnac<='12')),
dianac INTEGER CHECK (dianac IS NULL OR (dianac>='1' AND (((mesnac='1' OR mesnac='3' OR mesnac='5' OR mesnac='7' OR mesnac='8' OR mesnac='10' OR mesnac='12') AND dianac<='31')) OR ((mesnac='4' OR mesnac='6' OR mesnac='9' OR mesnac='11') AND dianac<='30') OR (mesnac='2' AND dianac<='29'))),
sexo CHAR(1) NOT NULL CHECK (sexo='S' OR sexo='F' OR sexo='M'),
id_departamento INTEGER REFERENCES departamento ON DELETE CASCADE,
id_municipio INTEGER,
id_clase INTEGER,
-- Verificar en interfaz
tipodocumento VARCHAR(2),
numerodocumento VARCHAR(50)
);
CREATE TABLE tipo_relacion (
id CHAR(2) PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
dirigido BOOLEAN NOT NULL, ---false significa que persona2 también se re laciona con persona1 de la misma forma e.g papa serìa true mientras que hermanos serìa false.
observaciones VARCHAR(200),
fechacreacion DATE NOT NULL,
fechadeshabilitacion DATE CHECK (fechadeshabilitacion IS NULL OR fechadeshabilitacion>=fechacreacion)
);
CREATE TABLE relacion_personas (
id_persona1 INTEGER NOT NULL REFERENCES persona,
id_persona2 INTEGER NOT NULL REFERENCES persona,
id_tipo CHAR(2) NOT NULL REFERENCES tipo_relacion,
observaciones VARCHAR(200),
PRIMARY KEY(id_persona1, id_persona2, id_tipo)
);
-- Victima depende de caso. Podría hacerse una tabla persona relacionada
-- con esta.
CREATE TABLE victima (
id_persona INTEGER REFERENCES persona NOT NULL,
id_caso INTEGER REFERENCES caso NOT NULL,
hijos INTEGER CHECK (hijos IS NULL OR (hijos>='0' AND hijos<='100')),
id_profesion INTEGER REFERENCES profesion NOT NULL,
id_rango_edad INTEGER REFERENCES rango_edad NOT NULL,
id_filiacion INTEGER REFERENCES filiacion NOT NULL,
id_sector_social INTEGER REFERENCES sector_social NOT NULL,
id_organizacion INTEGER REFERENCES organizacion NOT NULL,
id_vinculo_estado INTEGER REFERENCES vinculo_estado NOT NULL,
id_organizacion_armada INTEGER REFERENCES presuntos_responsables NOT NULL,
anotaciones VARCHAR(1000),
id_etnia INTEGER REFERENCES etnia,
id_iglesia INTEGER REFERENCES iglesia,
orientacionsexual CHAR(1) NOT NULL DEFAULT 'H'
CHECK (orientacionsexual='L'
OR orientacionsexual='G'
OR orientacionsexual='B'
OR orientacionsexual='T'
OR orientacionsexual='I'
OR orientacionsexual='H'
),
PRIMARY KEY(id_persona, id_caso)
);
CREATE SEQUENCE grupoper_seq;
CREATE TABLE grupoper (
id INTEGER PRIMARY KEY DEFAULT(nextval('grupoper_seq')),
nombre VARCHAR(150) NOT NULL,
anotaciones VARCHAR(1000)
);
CREATE TABLE victima_colectiva (
id_grupoper INTEGER REFERENCES grupoper,
id_caso INTEGER REFERENCES caso,
personas_aprox INTEGER,
id_organizacion_armada INTEGER REFERENCES presuntos_responsables,
PRIMARY KEY(id_grupoper, id_caso)
);
CREATE TABLE vinculo_estado_comunidad (
id_vinculo_estado INTEGER REFERENCES vinculo_estado,
id_grupoper INTEGER REFERENCES grupoper,
id_caso INTEGER REFERENCES caso,
FOREIGN KEY (id_grupoper, id_caso) REFERENCES victima_colectiva(id_grupoper, id_caso),
PRIMARY KEY(id_vinculo_estado, id_grupoper, id_caso)
);
CREATE TABLE profesion_comunidad (
id_profesion INTEGER REFERENCES profesion,
id_grupoper INTEGER REFERENCES grupoper,
id_caso INTEGER REFERENCES caso,
FOREIGN KEY (id_grupoper, id_caso) REFERENCES victima_colectiva(id_grupoper, id_caso),
PRIMARY KEY(id_profesion, id_grupoper, id_caso)
);
CREATE TABLE antecedente_caso (
id_antecedente INTEGER REFERENCES antecedente,
id_caso INTEGER REFERENCES caso,
PRIMARY KEY(id_antecedente, id_caso)
);
-- Los antecedentes de la victima no deben ser subconjunto de los del caso
CREATE TABLE antecedente_victima (
id_antecedente INTEGER REFERENCES antecedente,
id_persona INTEGER NOT NULL REFERENCES persona,
id_caso INTEGER NOT NULL REFERENCES caso,
FOREIGN KEY(id_persona, id_caso) REFERENCES
victima (id_persona, id_caso),
PRIMARY KEY(id_antecedente, id_persona, id_caso)
);
-- Si se quisieran reusan victimas_colectivas tal vez esta tabla
-- debería tener id_caso
CREATE TABLE antecedente_comunidad (
id_antecedente INTEGER REFERENCES antecedente,
id_grupoper INTEGER REFERENCES grupoper,
id_caso INTEGER REFERENCES caso,
FOREIGN KEY (id_grupoper, id_caso) REFERENCES victima_colectiva(id_grupoper, id_caso),
PRIMARY KEY(id_antecedente, id_grupoper, id_caso)
);
-- Por uniformidad mejor llamarlo contexto_caso
CREATE TABLE caso_contexto (
id_caso INTEGER REFERENCES caso,
id_contexto INTEGER REFERENCES contexto,
PRIMARY KEY(id_caso, id_contexto)
);
CREATE TABLE presuntos_responsables_caso (
id_caso INTEGER REFERENCES caso,
id_p_responsable INTEGER REFERENCES presuntos_responsables,
tipo INTEGER NOT NULL,
bloque VARCHAR(50),
frente VARCHAR(50),
brigada VARCHAR(50),
batallon VARCHAR(50),
division VARCHAR(50),
otro VARCHAR(500),
id INTEGER NOT NULL,
PRIMARY KEY (id_caso, id_p_responsable, id)
);
CREATE TABLE categoria_p_responsable_caso (
id_tipo_violencia VARCHAR(1) REFERENCES tipo_violencia,
id_supracategoria INTEGER,
id_categoria INTEGER REFERENCES categoria,
--En interfaz verificar que categoria es de tipocat Otra ('O')
id INTEGER NOT NULL,
id_caso INTEGER REFERENCES caso,
id_p_responsable INTEGER REFERENCES presuntos_responsables,
PRIMARY KEY(id_tipo_violencia, id_supracategoria, id_categoria,
id, id_caso, id_p_responsable),
FOREIGN KEY (id_supracategoria, id_tipo_violencia)
REFERENCES supracategoria (id, id_tipo_violencia),
FOREIGN KEY (id, id_caso, id_p_responsable)
REFERENCES presuntos_responsables_caso (id, id_caso,
id_p_responsable)
);
-- Algunos campos ubicación, clasificacion y ubicacion_fisica son NULL (no pueden ser llave).
-- Puede mejorarse clasificacion, para que esté relacionada con clasificacion
-- del caso
CREATE TABLE escrito_caso (
fecha DATE,
ubicacion VARCHAR(100), -- En interfaz descripción página
clasificacion VARCHAR(100), -- Categoria que esta fuente clasifica
ubicacion_fisica VARCHAR(100),
id_prensa INTEGER REFERENCES prensa,
id_caso INTEGER REFERENCES caso,
PRIMARY KEY(fecha, id_prensa,id_caso)
);
CREATE TABLE filiacion_comunidad (
id_filiacion INTEGER REFERENCES filiacion,
id_grupoper INTEGER REFERENCES grupoper,
id_caso INTEGER REFERENCES caso,
FOREIGN KEY (id_grupoper, id_caso) REFERENCES victima_colectiva(id_grupoper, id_caso),
PRIMARY KEY(id_filiacion, id_grupoper, id_caso)
);
CREATE TABLE frontera_caso (
id_frontera INTEGER REFERENCES frontera,
id_caso INTEGER REFERENCES caso,
PRIMARY KEY(id_frontera, id_caso)
);
-- Tambien hay fuentes indirectas (pero no frecuentes).
CREATE TABLE fuente_directa_caso (
id_caso INTEGER REFERENCES caso,
id_fuente_directa INTEGER REFERENCES fuente_directa,
anotacion VARCHAR(200),
fecha DATE,
ubicacion_fisica VARCHAR(100),
tipo_fuente VARCHAR(25),
PRIMARY KEY(id_caso, id_fuente_directa, fecha)
);
CREATE TABLE funcionario_caso (
id_funcionario INTEGER REFERENCES funcionario,
id_caso INTEGER REFERENCES caso,
fecha_inicio DATE,
PRIMARY KEY(id_funcionario, id_caso)
);
CREATE TABLE opcion_rol (
id_opcion INTEGER REFERENCES opcion,
id_rol INTEGER REFERENCES rol,
PRIMARY KEY(id_opcion, id_rol)
);
CREATE TABLE organizacion_comunidad (
id_organizacion INTEGER REFERENCES organizacion,
id_grupoper INTEGER REFERENCES grupoper,
id_caso INTEGER REFERENCES caso,
FOREIGN KEY (id_grupoper, id_caso) REFERENCES victima_colectiva(id_grupoper, id_caso),
PRIMARY KEY(id_organizacion, id_grupoper, id_caso)
);
-- id_rango_edad en lugar de id_rango
CREATE TABLE rango_edad_comunidad (
id_rango INTEGER REFERENCES rango_edad,
id_grupoper INTEGER REFERENCES grupoper,
id_caso INTEGER REFERENCES caso,
FOREIGN KEY (id_grupoper, id_caso) REFERENCES victima_colectiva(id_grupoper, id_caso),
PRIMARY KEY(id_rango, id_grupoper, id_caso)
);
CREATE TABLE region_caso (
id_region INTEGER REFERENCES region,
id_caso INTEGER REFERENCES caso,
PRIMARY KEY(id_region, id_caso)
);
CREATE TABLE sector_social_comunidad (
id_sector INTEGER REFERENCES sector_social,
id_grupoper INTEGER REFERENCES grupoper,
id_caso INTEGER REFERENCES caso,
FOREIGN KEY (id_grupoper, id_caso) REFERENCES victima_colectiva(id_grupoper, id_caso),
PRIMARY KEY(id_sector, id_grupoper, id_caso)
);
CREATE TABLE acto (
id_p_responsable INTEGER REFERENCES presuntos_responsables,
id_categoria INTEGER REFERENCES categoria,
id_persona INTEGER REFERENCES persona,
id_caso INTEGER REFERENCES caso,
FOREIGN KEY (id_persona, id_caso) REFERENCES
victima(id_persona, id_caso),
PRIMARY KEY(id_p_responsable, id_categoria, id_persona, id_caso)
);
CREATE TABLE actocolectivo (
id_p_responsable INTEGER REFERENCES presuntos_responsables,
id_categoria INTEGER REFERENCES categoria,
id_grupoper INTEGER REFERENCES grupoper,
id_caso INTEGER REFERENCES caso,
FOREIGN KEY (id_grupoper, id_caso) REFERENCES victima_colectiva(id_grupoper, id_caso),
PRIMARY KEY(id_p_responsable, id_categoria, id_grupoper, id_caso)
);