Pregunta

He leído las soluciones a problemas similares, pero todos parecen involucrar scripts y herramientas adicionales. Espero que mi problema sea lo suficientemente simple para evitar eso.

Por lo tanto, el usuario carga un CSV de los datos de la próxima semana. Se inserta en la base de datos, no hay problema.

PERO

una hora más tarde, recibe comentarios de todos y debe hacer las actualizaciones correspondientes. Él actualiza el csv y lo carga a la base de datos.

En este momento, el sistema que estoy usando verifica si los datos de esa semana ya están allí, y si lo están, extrae todos los datos de la base de datos, un script encuentra las diferencias y las envía, y Después de todo esto, los datos, los datos antiguos se eliminan y se reemplazan con los nuevos datos.

Obviamente, es mucho más fácil simplemente borrarlo y volver a ingresar los datos, pero no es el mejor método, especialmente si hay muchos cambios o toneladas de datos. Pero tengo que saber QUÉ cambios se han hecho para enviar alertas. Pero no quiero un registro de transacciones, ya que las alertas solo deben enviarse una vez, y después de eso, los datos antiguos son inútiles.

Entonces!

¿Existe una manera inteligente de comparar los nuevos datos con los datos existentes, obtener solo las filas que se modifican / eliminan / agregan y realiza esos cambios? En este momento parece que podría hacer una actualización, pero luego no obtendré ninguna respuesta sobre lo que ha cambiado ...

¡Gracias!

Edición rápida:

No hay claves foráneas actualmente en uso. Esto cambiará pronto, pero no debería hacer una diferencia, porque las claves externas solo señalarán a quién afectan los datos y, por lo tanto, no será necesario cambiarlas. En lo que respecta a las claves primarias, esto presenta un poco de dilema:

Los datos en cuestión son el horario de trabajo de todos. Por lo tanto, sería bueno (para las aplicaciones específicas de este programa más allá de la salida simple) que cada turno tenga una clave. Pero el problema es, digamos que user1 llegó tarde el lunes. La tardanza se registra en una tabla separada y se vincula al turno mediante la tecla Mayús. Pero si el martes es necesario hacer algunos cambios en la semana que ya está en curso, me temo que será demasiado difícil asegurar que todas las entradas en el DB ya hayan ocurrido (y por lo tanto tengan asociaciones que no deberían). estar roto) se volverá a escribir en el proceso. Desafortunadamente, no es tan simple como actualizar solo todos los eventos DESPUÉS de la hora actual, ya que esto agregaría trabajo (y, por lo tanto, lo haría menos comercializable) a las personas que realizan la carga. Básicamente, hacen el programa en un programa, lo exportan a un CSV y luego lo cargan en una página web para todas las aplicaciones web que necesitan esos datos. Así que es mucho más fácil para ellos (y menos estresante para todos los involucrados) hacer la misma rutina cada vez que se exporta toda la semana y se carga.

Por lo tanto, mi mayor preocupación es hacer que el script de carga sea lo más inteligente posible en ambos extremos. No se hincha al tratar de encontrar los cambios, puede encontrar los cambios sin importar la entrada Y ninguno de los datos que no cambian corre el riesgo de volver a escribirlos.

Aquí hay una pregunta relacionada:

Suppose Joe User was schedule to wash dishes from 7:00 PM to 8:00 PM, but the new
data has him working 6:45 PM to 8:30 PM.  Has the shift been changed? Or has the old
one been deleted and a new one added?

Y otro:

Say Jane was schedule to work 1:00 PM to 3:00 PM, but now everyone has a mandatory
staff meeting at 2:00 to 3:00. Has she lost one shift and gained two? Or has one
shift changed and she gained one?

Estoy realmente interesado en saber cómo se maneja / aborda este tipo de datos, más que las respuestas específicas a las anteriores.

Nuevamente, gracias.

¿Fue útil?

Solución

  

En este momento, el sistema que estoy usando verifica si los datos de esa semana ya están allí, y si lo están, extrae todos los datos de la base de datos, un script encuentra las diferencias y las envía, y Después de todo esto, los datos, los datos antiguos se eliminan y se reemplazan con los nuevos datos.

Entonces tu guión sabe las diferencias, ¿verdad? Y no desea utilizar algunas herramientas adicionales, aparte de su script y MySQL, ¿verdad?

Estoy bastante convencido de que MySQL no ofrece ninguna herramienta 'diff' por sí misma, por lo que lo mejor que puedes lograr es crear un nuevo archivo CSV solo para actualizaciones. Quiero decir - debería contener solo filas cambiadas. La actualización sería más rápida y todos los datos modificados estarían fácilmente disponibles.

Otros consejos

Si tiene una clave única en uno de los campos, puede usar:

LOAD DATA LOCAL INFILE '/path/to/data.csv' REPLACE INTO TABLE table_name
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top