Design Frage: Wie würden Sie ein Messaging / Posteingang System entwerfen?
-
02-07-2019 - |
Frage
Viele Websites haben das Konzept der Nachrichten von Benutzer zu Benutzer zu senden. Wenn Sie eine Nachricht an einen anderen Benutzer senden, würde zeigen, die Nachricht in ihrem Posteingang. Sie könnten auf die Nachricht reagieren, und es würde als neuer Eintrag in dem Nachrichtenthread angezeigt.
Es soll möglich sein, zu sehen, wenn Sie eine bestimmte Nachricht bereits gelesen haben, und Nachrichten, die eine neue Antwort bekommen haben sollte oben sein können.
Wie würden Sie die Klassen entwerfen (oder Tabellen oder was auch immer), ein solches System zu unterstützen?
Lösung
user
id
name
messages
id
to_user_id
from_user_id
title
date
message_post
id
message_id
user_id
message
date
Klassen würden diese Art von Schema reflektieren
Andere Tipps
Sie möchten Owen Schema erweitern Massen-Nachrichten zu unterstützen, wo die Nachricht nur einmal gespeichert wird. verändert sich auch so nur ein Sender ist, und viele Empfänger (es gibt nie mehr als ein Sender in diesem Schema)
user id name message id recipient_id content_id date_time_sent date_time_read response_to_message_id (refers to the email this one is in response to - threading) expires importance flags (read, read reply, etc) content id message_id sender_id title message
Es gibt viele, viele andere Funktionen, die hinzugefügt werden könnten, natürlich, aber die meisten Leute denken, der die oben genannten Funktionen, wenn sie denken, „E-Mail“.
-Adam
Es ist eine ziemlich einfache Tabellenstruktur. Ein zu / von, Betreff und dann die Nachricht. Nun das Wichtigste ist, die Datumsfelder. Die DateSent sagt, wann sie gesendet wurde, die DateRead sagt, dass die Nachricht gelesen wurde, und die DateDeletedTo erzählt, dass der TO Benutzer gelöscht es, und die DateDeletedFROM sagt, dass der FROM-Benutzer gelöscht (diese sind logische Löschungen für dieses Beispiel).
tblMessage
ID BIGINT
ToUserID GUID/BIGINT
FromUserID GUID/BIGINT
Subject NVARCHAR(150)
Message NVARCHAR(Max)
DateDeletedFrom DATETIME
DateDeletedTo DATETIME
DateSent DATETIME
DateRead DATETIME
Ich mache eigentlich diese als Teil einer internen Entwicklung bei der Arbeit. Erstellen Sie eine Tabelle mit dem Namen [Messages] und geben Sie die folgenden Spalten.
- mID (Message-ID)
- Von_Nutzer
- to_user
- Nachricht
- Zeit
- tID (Thread-ID)
- lesen (a boolean)
So etwas sollte für den Tabellenentwurf arbeiten. Die Klassen davon abhängen, welches System, das Sie es sind die Gestaltung auf.
Table Message:
id INTEGER
recipient_id INTEGER -- FK to users table
sender_id INTEGER -- ditto
subject VARCHAR
body TEXT
Table Thread
parent_id -- FK to message table
child_id -- FK to message table
Dann könnte man einfach die Garnfarbentabelle geht durch einen Thread von Nachrichten zu erhalten.