NORMALIZAR TABLA-audiencia_intervinientes

 Para normalizar las columnas relacionadas con los intervinientes en la tabla audiencia, puedes seguir un proceso similar al que hicimos con los delitos. Vamos a crear una nueva tabla llamada audiencia_intervinientes, donde cada interviniente estará asociado a una audiencia con un tipo que indica qué rol (asistente, víctima, asesor, etc.) desempeña en esa audiencia.

1. Crear la nueva tabla audiencia_intervinientes

Esta tabla contendrá una columna nombre, una columna tipo que identificará el tipo de interviniente, y una clave foránea que haga referencia a la tabla audiencia.

CREATE TABLE audiencia_intervinientes (

    id_interviniente INT AUTO_INCREMENT PRIMARY KEY,

    id_audiencia INT NOT NULL,

    nombre VARCHAR(150) NOT NULL,

    tipo VARCHAR(50) NOT NULL,

    FOREIGN KEY (id_audiencia) REFERENCES audiencia(id_audiencia) ON DELETE CASCADE

);

2. Insertar los intervinientes antiguos en la nueva tabla

Ahora, vamos a mover los datos de las columnas asistente, victima, asesor, fiscalia, imputado, defensa, aut_penitenciaria, y encargado a la tabla audiencia_intervinientes. Para cada columna, insertaremos un registro en la tabla audiencia_intervinientes con su respectivo tipo.

a) Insertar los intervinientes en la nueva tabla

-- Insertar los asistentes
INSERT INTO audiencia_intervinientes (id_audiencia, nombre, tipo)
SELECT id_audiencia, asistente, 'asistente' FROM audiencia WHERE asistente IS NOT NULL;

-- Insertar las víctimas
INSERT INTO audiencia_intervinientes (id_audiencia, nombre, tipo)
SELECT id_audiencia, victima, 'victima' FROM audiencia WHERE victima IS NOT NULL;

-- Insertar los asesores
INSERT INTO audiencia_intervinientes (id_audiencia, nombre, tipo)
SELECT id_audiencia, asesor, 'asesor' FROM audiencia WHERE asesor IS NOT NULL;

-- Insertar las fiscalías
INSERT INTO audiencia_intervinientes (id_audiencia, nombre, tipo)
SELECT id_audiencia, fiscalia, 'fiscalia' FROM audiencia WHERE fiscalia IS NOT NULL;

-- Insertar los imputados
INSERT INTO audiencia_intervinientes (id_audiencia, nombre, tipo)
SELECT id_audiencia, imputado, 'imputado' FROM audiencia WHERE imputado IS NOT NULL;

-- Insertar las defensas
INSERT INTO audiencia_intervinientes (id_audiencia, nombre, tipo)
SELECT id_audiencia, defensa, 'defensa' FROM audiencia WHERE defensa IS NOT NULL;

-- Insertar las autoridades penitenciarias
INSERT INTO audiencia_intervinientes (id_audiencia, nombre, tipo)
SELECT id_audiencia, aut_penitenciaria, 'aut_penitenciaria' FROM audiencia WHERE aut_penitenciaria IS NOT NULL;

-- Insertar los encargados
INSERT INTO audiencia_intervinientes (id_audiencia, nombre, tipo)
SELECT id_audiencia, encargado, 'encargado' FROM audiencia WHERE encargado IS NOT NULL;

b) Verificar los datos

Después de ejecutar las consultas, puedes verificar que los datos fueron insertados correctamente en la nueva tabla audiencia_intervinientes:

SELECT * FROM audiencia_intervinientes;

3. Eliminar las columnas antiguas de la tabla audiencia

Una vez que hayas migrado los datos a la nueva tabla, puedes eliminar las columnas relacionadas con los intervinientes de la tabla audiencia.

-- Eliminar las columnas antiguas relacionadas con los intervinientes

ALTER TABLE audiencia

DROP COLUMN asistente,

DROP COLUMN victima,

DROP COLUMN asesor,

DROP COLUMN fiscalia,

DROP COLUMN imputado,

DROP COLUMN defensa,

DROP COLUMN aut_penitenciaria,

DROP COLUMN encargado;


4. Resumen

  1. Crear la tabla audiencia_intervinientes para almacenar los intervinientes de cada audiencia.
  2. Mover los datos antiguos de las columnas de intervinientes (asistente, victima, asesor, etc.) a la nueva tabla audiencia_intervinientes.
  3. Eliminar las columnas antiguas de la tabla audiencia una vez que la migración haya sido exitosa.

Ahora tendrás una tabla normalizada, donde cada audiencia puede tener múltiples intervinientes, con un tipo específico, lo que facilita las relaciones de uno a muchos y mantiene una estructura de datos más limpia y eficiente.


Si quieres consultar los intervinientes de la audiencia con id_audiencia = 5, la consulta sería:

SELECT 

    a.id_audiencia,

    a.nombre,

    a.distrito,

    a.sala,

    a.fecha_c,

    a.hora,

    a.juez,

    a.tipoaudiencia,

    a.confidencialidad,

    a.acto,

    a.acto_descripcion,

    a.acto_observacion,

    i.nombre AS interviniente,

    i.tipo AS tipo_interviniente

FROM 

    audiencia a

LEFT JOIN 

    audiencia_intervinientes i 

ON 

    a.id_audiencia = i.id_audiencia

WHERE 

    a.id_audiencia = 5;




Comentarios

Entradas populares de este blog

Normalizar valores

Listar audiencias