2012-10-31 14 views
5

Tworzę mały schemat wysyłania wiadomości/wiadomości. To nie jest Actuall system poczty, ale swego rodzaju portalem wiadomości withing organizacji, z uwzględnieniem następujących przypadkach zastosowanie:Tworzenie prostego schematu bazy danych wiadomości e-mail/wiadomości

  1. pracownicy mogą transmitowane wiadomości do wszystkich pracowników
  2. pracownicy mogą wysyłać wiadomości do siebie
  3. pracownicy mogą odpowiadać na otrzymane wiadomości
  4. pracownicy mogą przeglądać wiadomości e-mail, na które odpowiedział, widząc odpowiedź w kolumnie "znacznik czasu" w skrzynce odbiorczej (tj. w skrzynce odbiorczej musi znajdować się kolumna "repliedat", która powinna pokazywać znacznik czasu, kiedy ta wiadomość została odebrana, powinna być pusta, jeśli nie została podana)
  5. Kiedy otwiera konkretną wiadomość, widzi w wątku widok wiadomości, ostatni będąc na górze.

Moje pytanie Jak mogę śledzić, czy dana wiadomość jest odpowiedzią na jakiekolwiek wiadomości, e-maile, uważam, że jest on osadzony w nagłówku. Czy zachowuję pole "repliedto", które wskazuje na inną wiadomość, której jest odpowiedzią?

Jak utworzyć wątki lub łańcuchy?

+0

Pracowałem na odpowiedź do [tej] [1] pytanie i jego najlepszy [1]: http://stackoverflow.com/questions/6541302/thread-messaging-system-database- Schemat-projekt – shabby

Odpowiedz

6

Zachowaj pole w tabeli bazy danych, które wskazuje oryginalny e-mail. Każda wiadomość e-mail może mieć tylko jednego poprzednika (lub "ojca"), podczas gdy każdy e-mail może mieć żadnego następcę (lub "syna"). Dlatego najlepiej jest zachować zapis tego, czym był poprzednik.

W ten sposób tworzysz wątki lub łańcuchy: pierwsza wiadomość w wątku będzie miała pole "ojciec" równe 0, ale późniejsze wiadomości będą zawierały inne wartości w tym polu. Pomogłoby to również w utrzymywaniu pola o nazwie "wątek" lub "konwersacja", dzięki czemu można łatwo zorientować się, które wiadomości są połączone z wybranymi wątkami.

Interesująca część niekoniecznie polega na przechowywaniu ogniw w łańcuchu, ale na sposobie przechodzenia przez łańcuch.

Poniżej znajduje się prosty schemat danych

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 

Jako jedna wiadomość może zostać wysłana do wielu ludzi, istnieje relacji jeden-do-wielu między wiadomości i odbiorców. Każdy odbiorca odczytałby wiadomość w innym czasie i miałby inny status (nieprzeczytany, przeczytany, usunięty, usunięty, nieprzeczytany itd.).

+0

, ale ile tabel? jaka struktura tabeli? – shabby

+0

Jak daleko masz się na własną rękę? –

+0

Miałem problem z dodawaniem odbiorców do każdej poczty/wiadomości, a potem okazało się, że odbiorca nie byłby z każdej poczty, byłby powiązany z wątkiem, dzięki za pomoc – shabby