Pergunta

O que é a melhor estratégia para aplicações que AUTOSAVE um e-mail antes de ser enviado ou salvar um post antes que seja terminado ou oficialmente salvo? Seria melhor usar uma tabela separada no banco de dados para rascunhos temporários ou de ter uma coluna de status que marca um post como rascunho ou publicados? Eu não estou olhando para o código, métodos apenas, mas qualquer outro conselho relacionado seria bem-vinda também, como quantas vezes para salvar, etc.

Foi útil?

Solução

Considerando que as mesas separadas para rascunhos e artigos publicados seria essencialmente duplica uns dos outros, eu inclinar-se para apenas uma tabela com uma coluna de status para diferenciar entre os dois.

Outras dicas

Eu elaboração no caminho Wikipedia: Eu salvar a primeira versão, e todos de modificação salvo (com base no tempo ou comando explícita do usuário) como uma próxima versão. Após isto. publicação você pode excluir o projecto-graph -. ou não

Se você gravar os dados no banco de dados que eu acho que é bom para usar a mesma tabela (você pode evitar conflitos de esquema) e uso versão / status para acompanhar rascunhos ciclo de vida.

isso se aplica a mais do que e-mails ...

Eu mudei minha mente sobre este. A melhor maneira é usar uma coluna is_draft em sua mesa e armazenar ambos os rascunhos e entidades válidas na mesma tabela. isto tem a vantagem da entidade manter o mesmo id mesmo se ele muda dentro e fora do estado de rascunho (você pode querer editar-lo depois de salvá-lo, mas remover temporariamente um valor necessário). seria confuso para os usuários se eles estavam colaborando no mesmo documento eo id ficava mudando, amirite?

você usaria is_draft = 1 para desligar as regras de validação ORM, validações de gatilho ou restrições de verificação para permitir que um objeto inválido para salvar. sim, você provavelmente tem que permitir campos anuláveis ??na sua tabela.

processo: tentar salvar objeto. validação falhar. conjunto is_draft = 1 e tentar salvar novamente. ele salva. colocar grande "rascunho" à algum lugar da tela:)

usuário preenche informações necessárias. tentar salvar objeto. validação passa. is_draft conjunto = 0. ele salva.

Agora, a respeito de e-mail e as mensagens de blog, o servidor não deve tentar enviá-lo ou publicá-lo imediatamente, a menos que o usuário pressiona o botão Salvar / post, mas isso é uma questão diferente realmente.


RESPOSTA OLD

O problema é que um projecto pode não ser válido, e não podem ser salvos na tabela real. Por exemplo, digamos que suas demandas de mesa que o assunto não seja nulo, mas o usuário não preencheu-a ainda.

Uma forma seria a de ter um projecto de mesa, e armazenar uma versão serializada da entidade (e seus filhos) a ele. serialize () do PHP seria algo para usar, ou você poderia usar JSON. quando finalmente é válida, o sistema permitiria poupar em vez de e-mail (ou qualquer outro) de mesa, e excluir o projecto:

pseudo sql:

create table draft  
id int primary key auto increment,  
entity varchar(64) not null comment 'this way you can find all drafts of say type Email',  
contents longblob not null,  
modified timestamp comment 'this way you can sort by newer drafts'  
modified_by int not null foreign key to user.id comment 'this way you can filter by the user\'s drafts'

Você também pode considerar uma mesa draft_file para armazenar anexos ou fotos para o projecto, e ser capaz de acessá-los individualmente:

create table draft_file  
id int primary key auto increment,   
draft_id int not null foreign key to draft.id on delete cascade,  
size int not null comment 'bytes',  
mime_type varchar(64) not null,  
file_name varchar(255) not null,  
contents longblob,  
thumbnail blob comment 'this could be an icon for files/documents' 

assim, um usuário começa a compor um e-mail, talvez apenas tipos no corpo, e acrescenta alguns anexos. seu gui salva o e-mail a correntes de ar, e carrega os anexos, os salva em draft_file, e retorna o projecto id, e as URLs de download para os arquivos que você mostrar em sua gui.

ele digita no sujeito (ainda está em branco). Seu gui salva o e-mail a correntes de ar, a actualização do projecto de tabela id, pois conhece a sua ID da etapa anterior.

seus usuários preenche o campo Para, e hits Enviar. Seu servidor salva o e-mail para a mesa de email, copia os anexos de draft_file à mesa de email_attachment, e exclui o projecto, de preferência dentro de uma transação.

isso permite rascunhos de longo prazo, carregamentos de fixação de estilo gmail, mantendo a integridade de sua tabela entidade real.

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