Como armazenar edições perfil de usuário que devem ser aprovados antes de ir ao vivo?

StackOverflow https://stackoverflow.com/questions/1402277

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu estou tentando descobrir como eu deve salvar uma edição um usuário faz ao seu perfil de uma forma que não ir ao vivo ou afetar os dados ao vivo existentes até que seja aprovado por um administrador. Tem uma segunda tabela para perfis editados em seguida, copiar os dados sobre aprovação? Manter tudo isso em uma mesa e ter uma cópia _tmp de todos os campos que são editáveis? Existe uma prática recomendada para isso?

Obrigado por seus pensamentos.

Foi útil?

Solução

Tendo uma tabela separada soa bem para mim. Dessa forma, você só pode armazenar o que mudou, nem tudo o mais.

Outras dicas

Para simplificar, eu vou muitas vezes usam alguma coluna 'status' no banco de dados para determinar se uma determinada linha é visível publicamente. Em seu SQL, você iria em seguida, adicione

 WHERE status = 'published'

Isso funciona bem para sites simples.

Para sites mais ocupados, eu suspeito que haja algum ganho de desempenho por não ter que cláusula WHERE. Tendo edições pendentes em uma tabela separada seria uma boa opção, e então você INSERT INTO ... SELECT FROM para movê-lo para a mesa ao vivo.

Você pode construir um pouco de fluxo de trabalho para a sua aplicação. Então, para esse efeito, você terá uma tabela de fluxo de trabalho que terá definido vários estados (por exemplo, entrou, proposto, aprovado, etc ...).

Em seguida, você pode também ter uma tabela PendingChanges que armazena essas alterações propostas. Quando a mudança proposta foi aprovada, você mesclar a mudança para a principal mudança de perfil de usuário.

Se você tem muitos casos como este (em muitas mesas diferentes) você poderia ter uma tabela TempObject onde você serializar mudanças para XML ou algum outro estado até que sejam aprovados.

Ou se é apenas a tabela de perfil de usuário, você poderia ter uma chave única em UserID + Aprovado (boolean). Quando o usuário edita seus dados, ele vai para a mesa como UserID, Aprovado = false, em seguida, para aprová-lo, você simplesmente apagar o aprovado e atualizar o não aprovado para aprovado (em uma transação é claro).

Afinal, você já tem a estrutura para armazenar todos esses dados - por que não reutilizá-lo

Isto parece mais simples: Você pode adicionar uma versão e um campo de status para a mesa de USUÁRIOS. Em seguida, use o campo de status para mostrar a maior linha de versão, conforme o caso. Obviamente, isso dá-lhe o controle de versão dos registros também.

Enquanto a versão eo estado são indexados, eles não vão realmente retardar qualquer operação de exibição. Adicionar linhas será slighly mais lento, como os índices devem ser mantidos.

A segunda mesa no mesmo formato que o primeiro não facilmente permitir a várias alterações para ser enfileiradas.

Eu recomendaria projetar um strutura específica para registrar cada solicitação de mudança como uma solicitação de mudança. Campos para quem está mudando, o que está mudando, o que, que fez a solicitação, quando, etc.

Então, o código para aplicar a alteração se / quando validado.

Este pode também, em seguida, agir como um fácil de rastrear trilha de auditoria.

Eu não iria fazer as mudanças na mesma tabela, é tighly liga as implementações junto e torna a manutenção mais tarde uma dor de cabeça. A independência reduz quão intimamente associada tudo é, por mais flexibilidade no futuro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top