Question

Quelle est la meilleure stratégie pour les applications qui AutoSave un e-mail avant qu'il ne soit envoyé ou enregistrer un billet de blog avant qu'il ne soit terminé ou officiellement sauvé? Serait-il préférable d'utiliser une table séparée dans la base de données pour les projets temporaires ou d'avoir une colonne d'état qui marque un poste de projet ou publié? Je ne cherche pas pour le code, à des méthodes, mais tout autre conseil connexes seraient aussi les bienvenus, comme la fréquence de sauvegarde, etc.

Était-ce utile?

La solution

Considérant que des tableaux séparés pour les courants d'air et des articles publiés seraient essentiellement doubles de l'autre, je pencheraient vers une seule table avec une colonne d'état de faire la différence entre les deux.

Autres conseils

Je rédaction sur la façon dont Wikipedia: je sauve la première version, et de toute modification enregistrée (en fonction du temps ou une commande explicite de l'utilisateur) en tant que prochaine version. Après-à-dire. publication que vous pouvez supprimer le projet de graphe -. ou non

Si vous enregistrez des données dans la base de données, je pense qu'il est bon d'utiliser la même table (vous pouvez éviter les conflits de schéma), et utiliser la version / état pour suivre le cycle de vie des projets.

applique à plus de courriels ...

J'ai changé d'avis sur celui-ci. La meilleure façon est d'utiliser une colonne is_draft dans votre table et stocker les deux projets et entités valides dans la même table. ce qui a l'avantage de l'entité en gardant le même identifiant, même si elle passe dans et hors de l'état de brouillon (vous voudrez peut-être le modifier après l'avoir enregistré, mais supprimer temporairement une valeur requise). il serait source de confusion pour les utilisateurs si elles collaboraient sur le même document et l'identifiant ne cessait de changer, amirite?

vous pouvez utiliser is_draft = 1 pour désactiver les règles de validation ORM, validation de déclenchement ou les contraintes de vérification pour permettre un objet non valide pour enregistrer. oui, vous auriez probablement permettre à des champs nullables dans votre table.

Procédé

: essayer de sauver l'objet. validation échoue. 1 = mettre is_draft et essayer de sauver à nouveau. il sauve. mettre grand « PROJET » à l'écran quelque part:)

utilisateur remplit les informations nécessaires. essayer de sauver l'objet. passe la validation. définir is_draft = 0. il sauve.

maintenant, en ce qui concerne les messages e-mail et blog, votre serveur ne devrait pas essayer de l'envoyer ou poster tout de suite à moins que l'utilisateur touche la sauvegarde / bouton de poste, mais qui est une autre question vraiment.


RÉPONSE VIEUX

Le problème est qu'un projet pourrait ne pas être valide et ne peut pas être enregistré dans la table réelle. Par exemple, supposons que votre table exige que le sujet ne soit pas nulle, mais l'utilisateur n'a pas rempli dans encore.

Une façon serait d'avoir un projet de table, et de stocker une version sérialisée de l'entité (et ses enfants) à elle. serialize () de php serait quelque chose à utiliser, ou vous pouvez utiliser JSON. quand il est enfin valide, le système épargnerait à la place à l'e-mail (ou autre) table, et supprimer le projet:

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'

Vous pouvez également envisager une table draft_file pour stocker des pièces jointes ou des photos pour le projet, et être en mesure d'y accéder individuellement:

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' 

, un utilisateur commence à composer un e-mail, peut-être juste types dans le corps, et ajoute quelques pièces jointes. votre IUG enregistre le courrier électronique aux courants d'air, et télécharge les pièces jointes, les enregistre draft_file, et renvoie le projet de id, et le téléchargement urls pour les fichiers que vous affichez dans votre IUG.

il tape dans le sujet (To est toujours vide). Votre e-mail IUG enregistre le aux courants d'air, mise à jour du tableau de projet par identifiant, car il connaît son identifiant de l'étape précédente.

vos utilisateurs remplissages dans le champ, et frappe Envoyer. Votre serveur enregistre l'e-mail à la table de courrier électronique, copie les pièces jointes de draft_file à la table de email_attachment, et supprime le projet, de préférence dans une transaction.

cela permet des projets à long terme, chargement de pièces jointes de type gmail, tout en maintenant l'intégrité de votre table d'entité réelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top