Frage

Was ist die beste Strategie für Anwendungen, die eine E-Mail automatisch speichern, bevor es gesendet wird, oder eine Blog-Post speichern, bevor es oder offiziell gespeichert fertig ist? Wäre es am besten, eine separate Tabelle in der Datenbank für temporäre Entwürfe zu verwenden oder eine Statusspalte zu haben, die einen Posten als Entwurf markiert oder veröffentlicht? Ich bin nicht auf der Suche nach Code, nur Methoden, aber auch jede andere damit verbundene Beratung würde auch, wie, wie oft willkommen zu sparen, etc.

War es hilfreich?

Lösung

In Anbetracht, dass getrennte Tabellen für Entwürfe und veröffentlichte Artikel wäre im Wesentlichen Duplikate voneinander, ich auf nur eine Tabelle mit einer Statusspalte anlehnen würde zwischen den beiden zu unterscheiden.

Andere Tipps

ich auf der Wikipedia Art und Weise tue Entwurf: Ich habe die erste Version zu speichern, und alle Änderung der gespeicherten (basierend auf Zeit oder expliziten Benutzerbefehl) als nächste Version. Nach dh. Veröffentlichung können Sie den Entwurf-Diagramm löschen -. oder nicht

Wenn Sie Daten in der Datenbank speichern ich denke, es ist gut, die gleiche Tabelle zu verwenden (Sie Schema Konflikte vermeiden können), und verwenden Sie Version / Status Entwürfe Lebenszyklus zu verfolgen.

Dies gilt für mehr als E-Mails ...

änderte ich meine Meinung in diesem Fall. Der beste Weg ist es, eine is_draft Spalte in der Tabelle zu verwenden und beiden Entwürfe und gültige Entitäten in derselben Tabelle zu speichern. dies hat den Vorteil des Unternehmens die gleiche ID zu halten, auch wenn es schaltet in und der Entwurf des Staats heraus (man könnte es bearbeiten möchten, nachdem Sie es speichern, aber vorübergehend einen gewünschten Wert entfernen). es wäre für die Benutzer verwirrend sein, wenn sie auf dem gleichen Dokument zusammengearbeitet und die ID gehalten ändern, amirite?

würden Sie is_draft = 1 auszuschalten ORM Validierungsregeln, Trigger-Validierungen oder überprüfen Einschränkungen verwenden ein ungültiges Objekt zu ermöglichen, zu speichern. ja, würden Sie wahrscheinlich auf NULL festlegbare Felder in der Tabelle ermöglichen müssen.

Prozess: versuchen Objekt zu speichern. Validierung fehlschlägt. set is_draft = 1 und versuchen Sie es erneut zu speichern. es spart. legt großen „ENTWURF“ auf dem Bildschirm irgendwo:)

Benutzer füllt erforderlichen Informationen. versuchen Objekt zu speichern. Validierung geht. set is_draft = 0. es spart.

jetzt, in Bezug auf E-Mails und Blog-Posts, den Server sollte nicht versuchen, sie zu senden oder es sofort zu veröffentlichen, wenn der Benutzer auf die Schaltfläche Speicher / Pfosten, aber das ist eine andere Frage wirklich.


ALTE ANTWORT

Das Problem ist, dass ein Entwurf nicht gültig sein könnte, und kann nicht in der eigentlichen Tabelle gespeichert werden. Zum Beispiel, sagen Sie Ihren Tisch verlangt, dass das Thema nicht null sein, aber der Benutzer es nocht nicht ausgefüllt hat.

Eine Möglichkeit wäre, einen Entwurf Tisch zu haben, und speichern Sie eine serialisierte Version des Unternehmens (und seine Kinder) zu. PHP serialize () wäre etwas zu verwenden, oder Sie könnten json verwenden. wenn es endlich gültig ist, würde das System stattdessen an der E-Mail speichern (oder was auch immer) Tabelle, und löschen Sie den Entwurf:

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'

Sie können auch eine draft_file Tabelle zum Speichern von Anhängen oder Fotos für den Entwurf, betrachten und in der Lage sein, sie einzeln zuzugreifen:

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' 

so beginnt ein Benutzer eine E-Mail verfassen, vielleicht auch nur Typen im Körper, und fügt einige Anhänge. Ihre gui speichert die E-Mail Entwürfe, und lädt die Anhänge, speichert sie in draft_file und gibt den Entwurf id, und die Download-URLs für die Dateien, die Sie in Ihrem gui angezeigt werden soll.

tippt er im Betreff (To ist noch leer). Ihre gui speichern die E-Mail Entwürfe von id den Entwurf Tabelle zu aktualisieren, da er seine ID aus dem vorherigen Schritt kennt.

Ihre Benutzer füllt das Feld, und Hits senden. Der Server speichert die E-Mail an die E-Mail-Tabelle, kopiert die Anhänge von draft_file zur email_attachment Tabelle und löscht den Entwurf, vorzugsweise innerhalb einer Transaktion.

Dies ermöglicht ein langfristigen Entwürfe, gmail-Stil des Hochladen von Anlagen, während Integrität Ihrer realen Objekt-Tabelle zu halten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top