Pergunta

Eu li através das soluções para problemas semelhantes, mas todos eles parecem envolver scripts e ferramentas extras. Eu estou esperando o meu problema simples o suficiente para evitar isso.

Assim, o usuário carrega um arquivo CSV de dados da próxima semana. Ele é inserido no DB, não há problema.

MAS

Uma hora depois ele recebe feedback de todos, e deve fazer alterações em conformidade. Ele atualiza o csv e vai enviá-lo para o DB.

Agora, o sistema que estou usando verifica se os dados para essa semana já está lá, e se for, puxa todos os dados do DB, um script encontra as diferenças e envia-los para fora, e depois de tudo isso, os dados os dados antigos são excluídos e substituídos pelos novos dados.

Obviamente, é muito mais fácil simplesmente limpá-la e reinserir os dados, mas não é o melhor método, especialmente se existem muitas alterações ou toneladas de dados. Mas eu tenho que saber que mudanças foram feitas para enviar alertas. Mas eu não quero um log de transações, como os alertas só precisa ser enviado a uma vez e depois disso, os dados antigos é inútil.

Assim!

Existe uma maneira inteligente para comparar os novos dados para os dados já existentes, se apenas as linhas que são alteradas / deletadas / adicionado, e fazer essas mudanças? Agora parece que eu poderia fazer uma atualização, mas então eu não vai obter qualquer resposta sobre o que mudou ...

Obrigado!

edição rápida:

chaves estrangeiras Não estão atualmente em uso. Isso vai mudar em breve, mas não deve fazer a diferença, porque as chaves estrangeiras único ponto a que os efeitos de dados e, portanto, não precisará ser alterado. Na medida em que as chaves primárias ir, que faz um pouco presentes de um dilema:

Os dados em questão é horário de trabalho de todos. Então seria bom (para aplicações específicas dessa agenda para além de saída simples) para cada turno de ter uma chave. Mas o problema é, digamos que user1 foi na noite de segunda-feira. O atraso é registado numa tabela separada e está ligada ao deslocamento usando a chave de mudança. Mas se na terça-feira há alguma necessidade de fazer algumas alterações para a semana já em andamento, meu medo é que ele vai se tornar muito difícil para garantir que todas as entradas no banco de dados que já aconteceram (e, portanto, pode ter associações que não deve ser quebrado) vai ficar re-introduzidos no processo. Infelizmente, não é tão simples como única atualização de todos os eventos ocorridos após o momento atual, pois isso adicionaria trabalho (e, assim, torná-lo menos comercializável) para as pessoas que fazem o upload. Basicamente, eles fazem a programação em um programa, exportá-lo para um arquivo CSV, e depois enviá-lo em uma página da web para todos os webapps essa necessidade que os dados. Por isso, é simplesmente muito mais fácil para eles (e menos estressante para todos os envolvidos) para fazer a mesma rotina cada vez de exportar toda a semana e enviá-lo.

Assim, a minha maior preocupação é fazer com que o script de upload tão inteligente quanto possível em ambas as extremidades. Ela não fica inchado tentando encontrar as mudanças, pode encontrar as alterações não importa a entrada e nenhum dos dados que é riscos inalteradas se re-introduzidos.

Aqui está uma questão 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?

E outro:

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?

Eu estou realmente interessado em saber como este tipo de dados é normalmente tratada / aproximava, mais do que respostas específicas ao acima.

Mais uma vez, obrigado.

Foi útil?

Solução

Agora, o sistema que estou usando verifica se os dados para essa semana já está lá, e se for, puxa todos os dados do DB, um script encontra as diferenças e envia-los para fora, e depois de tudo isso, os dados os dados antigos são excluídos e substituídos pelos novos dados.

Assim seu script sabe a diferença, certo? E você não quer usar algumas ferramentas extra extra, além de seu script e MySQL, certo?

Estou bastante convencido de que o MySQL não oferece qualquer ferramenta 'diff', por si só, por isso, o melhor que você pode conseguir é fazer novo arquivo CSV apenas para atualizações. Quero dizer - ele deve conter apenas linhas alteradas. Atualização seria mais rápido, e todos os dados alterados seria facilmente disponíveis.

Outras dicas

Se você tem uma chave única em um dos campos, você pode usar:

LOAD DATA LOCAL INFILE '/path/to/data.csv' REPLACE INTO TABLE table_name
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top