Migración Externos - Duplicidad de CODIGO Actividad

Buen día,
Estoy teniendo un problema con migración de datos de sistemas externos a una instalación de G3 que ya viene funcionando.

Estamos migrando años anteriores.
Al momento de migrar mig_comisiones, se nos presenta un caso de una comisión de una actividad y en sga_elementos tenemos 2 actividades con el mismo código.
Y se nos presenta un error en la migración, ya que al querer insertar comisiones da duplicidad porque el join trae 2 registros.

  • script 03_migrar_comisiones.sql
    ERROR: llave duplicada viola restricción de unicidad «pk_sga_comisiones»
    Detail: Ya existe la llave (comision)=(5171).

  • Revisando el query que falla, efectivamente devuelve 2 registros con comisión 5171 por el motivo que indico previamente:


 INSERT INTO sga_comisiones(comision, nombre, periodo_lectivo, elemento, turno, cupo, ubicacion, observaciones)
   SELECT com.comision, com.nombre, per.periodo_lectivo, elem.elemento, com.turno, com.cupo, com.ubicacion, com.observaciones
     FROM ext.mig_comisiones as com,
   		 ext.mig_periodos_lectivos as per,
   		 sga_elementos as elem	
     WHERE com.anio_academico = per.anio_academico
     AND   com.periodo_lectivo_nombre = per.nombre
     AND   com.actividad_codigo = elem.codigo;

Entiendo que segun lo que indican en otros hilos del foro, es posible tener duplicidad de código de actividad.
http://foro.comunidad.siu.edu.ar/index.php?topic=16232.0
http://foro.comunidad.siu.edu.ar/index.php?topic=15855.0

Cual seria la forma correcta para resolver mi problema?

Gracias

Buenos días Cristian, lo que veo es que tienen un error de pk en la tabla sga_comisiones.
El id de comisión no debería ser el mismo para los distintos elementos.
Fijate que la pk de la tabla negocio.sga_comisiones es el id este que te comento arriba, no se esta teniendo en cuenta los códigos de los elementos

Podrías por favor postear cual es el resultado de hacer


 INSERT INTO sga_comisiones(comision, nombre, periodo_lectivo, elemento, turno, cupo, ubicacion, observaciones)
   SELECT com.comision, com.nombre, per.periodo_lectivo, elem.elemento, com.turno, com.cupo, com.ubicacion, com.observaciones
     FROM ext.mig_comisiones as com,
          ext.mig_periodos_lectivos as per,
          sga_elementos as elem   
     WHERE com.anio_academico = per.anio_academico
     AND   com.periodo_lectivo_nombre = per.nombre
     AND   com.actividad_codigo = elem.codigo;

Saludos.

El problema que tengo es que en sga_elementos hay 2 registros con el mismo código (‘EF’)
La comisión es 1 sola, para uno de los elementos (ya tengo identificado el que debería ir)

[tr]
[td]nombre[/td][td]codigo[/td]
[/tr]
[tr]
[td]“Entrenamiento Físico”[/td][td]“EF”[/td]
[/tr]
[tr]
[td]“Economía y Finanzas”[/td][td]“EF”[/td]
[/tr]

Y por lo tanto el join ebtre mig_comisiones y sga_elementos (como lo hace por codigo del elemento), devuelve 2 registros.
(le agrego la condicion al select de comision = 5171, que es el caso que falla) y el resultado del select es:

[tr][td]comision[/td][td]nombre[/td][td]periodo_lectivo[/td][td]elemento[/td][td]turno[/td][td]cupo[/td][td]ubicacion[/td][td]observaciones[/td][/tr]
[tr][td]5171[/td][td]“8”[/td][td]51[/td][td]452[/td][td][/td][td]35[/td][td]2[/td][td]“”[/td][/tr]
[tr][td]5171[/td][td]“8”[/td][td]51[/td][td]484[/td][td][/td][td]35[/td][td]2[/td][td]“”[/td][/tr]

En mi caso podría resolverlo temporalmente cambiando el código de la actividad que no estoy migrando, ejecutar los scripts de migración, y luego volver a restablecer el código de la actividad.

Pero entiendo que se podría presentar a alguien mas este problema y el script debería contemplarlo.

Saludos

Cristian entiendo el problema y a donde apuntas, quizás el script no tuvo encuenta eso que mencionas.
Mi duda puntual es si está bien que ambas actividades y/o elementos tengan el mismo código de comisión??

La situación es que tengo 1 sola comisión, para 1 sola actividad “Entrenamiento Físico”, y debería hacer 1 solo insert.
Sobre la otra actividad no estoy creando comisión.

Cristian, pudiste resolver esta situación cambiando el código de la actividad?
Entiendo que no sería la solución optima, pero para poder migrar en este momento te podría server.

Saludos.

si, con eso puedo migrar (por suerte debo migrar solo una de las actividades, porque si debiera migrar datos de ambas actividades se hubiese complicado un poco mas)

Saludos

José:

En este caso Cristián pudo seguir con ese artilugio, pero se debiera considerar el caso que a otra institución tenga un problema similar y deba migrar las 2 actividades.

Creo que esto se origina en que se pueden tener 2 actividades con el mismo código. Habría que pensar como resolverlo y modificar los scripts, para que los que tengan un caso similar lo puedan resolver antes de que se les presente el mismo inconveniente que a Cristian.

Saludos

Gustavo

Gustavo buenos días, vamos a tratar de encontrar una solución para que no suceda esto en futuras versiones.
Si poseen alguna solución o idea pueden postearla para que podamos ver si es la que también hemos pensado.

Saludos.

Los scripts de migración se basan en la unicidad del código de actividad. Cambiar esto implicaría modificar todos los scripts y validaciones.

Recomendamos hacer lo siguiente:

  1. Cambiar temporalmente para la migracion los códigos duplicados. Por ejemplo:

Datos originales:
nombre codigo
“Entrenamiento Físico” “EF”
“Economía y Finanzas” “EF”

Migrarlo como:

nombre codigo
“Entrenamiento Físico” “EF”
“Economía y Finanzas” “EF-1”
“Matemática aplicada” “EF-2”

  1. Hacer el cambio de código pos-migracion en la tabla sga_elementos para las actividades EF-1 y EF-2

Ale:

Quizás lo mio sea medio arcaico, pero la solución sería que el Guaraní 3 no admita 2 actividades con el mismo código.

La explicación de que se hizo así para que las UUNN que tenían 2 facultades con los mismos códigos de materias pudieran migrar sin problemas no me convence, no es motivo suficiente, ya que en el mismo proceso de migración se permite cambiar el código a las materias y bastaría con colocar algo que identifique a cada unidad académica delante de iguales códigos para romper la repetición de códigos.

Y es mucho más sano si se centralizan distintas bases de datos que todas las actividades que son distintas tengan códigos distintos.

Pero acepto que son criterios subjetivos.

Saludos

Gustavo