2012-10-31 17 views
5

Ich erstelle ein kleines Mail-/Nachrichten-Datenbankschema. Es wird keine E-Mail-System actuall, aber irgendwie ein Nachrichtenportal, eine Organisation, mit den folgenden Anwendungsfälle withing:Erstellen eines einfachen E-Mail-/Messaging-Datenbankschemas

  1. Mitarbeiter können Nachrichten an alle Mitarbeiter brodcast
  2. Mitarbeiter können Nachrichten an einander
  3. Mitarbeiter schicken Antworten auf die empfangenen Nachrichten
  4. Mitarbeiter können die E-Mails anzeigen, auf die sie geantwortet haben, indem sie im Posteingang eine geantwortete "Zeitstempel" -Spalte sehen (dh es muss eine Spalte "geantwortet" im Posteingang geben, die den Link anzeigen soll Zeitstempel, wenn diese Mail beantwortet wurde, sollte es leer sein, wenn es nicht)
  5. Wenn er eine bestimmte Nachricht öffnet, sieht er eine Verschachtelung der Nachrichten, zuletzt oben.

Meine Frage Wie kann ich verfolgen, wenn eine bestimmte Nachricht eine Antwort auf jede Nachricht ist, in E-Mail, ich glaube, es ist im Header eingebettet ist. Behalte ich ein Antwortfeld, das auf eine andere Nachricht zeigt, von der es die Antwort ist?

Wie erstelle ich Threads oder Ketten?

+0

ich auf die Antwort auf arbeitete [dieser] [1] Frage und es ist das beste [1]: http://stackoverflow.com/questions/6541302/thread-messaging-system-database- Schema-Design – shabby

Antwort

6

Behalten Sie ein Feld in der Datenbanktabelle, das auf die ursprüngliche E-Mail verweist. Jede E-Mail kann nur einen Vorgänger (oder "Vater") haben, während jede E-Mail keine oder mehrere Nachfolger (oder "Söhne") haben kann. Daher ist es am besten, zu dokumentieren, was der Vorgänger war.

So erstellen Sie auch Threads oder Ketten: Die erste Nachricht im Thread hat das Feld 'Vater' gleich 0, aber spätere Nachrichten enthalten andere Werte in diesem Feld. Es würde auch hilfreich sein, wenn Sie ein Feld namens "thread" oder "conversation" pflegen, um zu wissen, welche Nachrichten mit welchen Threads verbunden sind.

Der interessante Teil ist nicht unbedingt, wie Sie die Links in der Kette speichern, sondern wie Sie die Kette durchlaufen.

Es folgt ein einfaches Datenschema

USERS 
id - autoinc 
name - varchar 

THREADS 
id - autoinc 
name - varchar 

STATUSES 
id - autoinc 
name - varchar 

MESSAGES 
msg_id - autoinc 
from_id (fk to users table) - int 
datesent - date 
thread (fk to threads table) - int 
father (pointer to previous message in this thread) - int 
text - varchar 

RECIPIENTS 
id - autoinc 
msg_id (fk to messages table) - int 
to_id (fk to users table) - int 
status (fk to statuses table) - int 
dateread - date 

Als eine Nachricht an viele Personen gesendet werden können, gibt es eine Eins-zu-viele-Beziehung zwischen der Botschaft und den EMPFÄNGER. Jeder Empfänger würde die Nachricht zu einem anderen Zeitpunkt lesen und hätte einen anderen Status (ungelesen, gelesen, gelöscht, ungelesen, usw.).

+0

aber wie viele Tabellen? Welche Tabellenstruktur? – shabby

+0

Wie weit haben Sie alleine? –

+0

Ich hatte Probleme, Empfänger zu jeder E-Mail/Nachricht hinzuzufügen, dann fand ich heraus, dass der Empfänger nicht von jeder E-Mail wäre, würde es mit Thread verknüpft sein, danke für die Hilfe – shabby

Verwandte Themen