2010-12-08 8 views
0

Ich habe eine einfache Tabelle im Sinn, um eine Datenbank E-Mail-System zu erstellen, ist dies der beste Ansatz?Was wäre ein gutes DB-Design für Datenbank-Basis-E-Mail-System?

TABLE `message` 
     - id 
     - parent_id 
     - message 
     - subject 
     - created_on 
     - is_draft 
     - sender_profile_id  


TABLE `email_message` 
     - id 
     - is_read 
     - is_deleted 
     - message_id 
     - profile_id 

Fall 1: Profil ein sendendes E-Mail-B zu profilieren, und B Antworten zurück (12.59 Kommunikation)

INSERT INTO `message` (`id`, `parent_id`, `message`, `subject`, `created_on`, `is_draft`, `sender_profile_id`) VALUES 
(1, 0, 'Hi what''s up how are u', 'Hi', '2010-12-08 11:27:54', 0, 1), 
(2, 1, 'yeah i am gud', 0, '2010-12-08 11:28:19', 0, 2); 

INSERT INTO `email_message` (`id`, `is_read`, `is_deleted`, `message_id`, `profile_id`) VALUES 
(1, 1, 0, 1, 2), 
(2, 1, 0, 2, 1); 

Fall 2:

-Profil A sendet E-Mail Profil B, C, D.

-Profile B, die alle zur ganzen Gruppe zurücksenden.

-A erneut auf die gesamte Gruppe antworten.

-C zu antwortet A nur

INSERT INTO `message` (`id`, `parent_id`, `message`, `subject`, `created_on`, `is_draft`, `receiver_profile_id`) VALUES 
(3, 0, 'Hi what''s up how are u', 'Hi', '2010-12-08 11:27:54', 0, 1), 
(4, 3, 'yeah i am gud.', 0, '2010-12-08 11:28:19', 0, 2), 
(5, 3, 'why are u gud?', 0, '2010-12-08 11:28:19', 0, 1), 
(6, 3, 'what?', 0, '2010-12-08 11:28:19', 0, 3); 

INSERT INTO `email_message` (`id`, `is_read`, `is_deleted`, `message_id`, `profile_id`) VALUES 
(3, 1, 0, 3, 2), 
(4, 0, 0, 3, 3), 
(5, 0, 0, 3, 4),   

(6, 0, 0, 4, 1), 
(7, 0, 0, 4, 3), 
(8, 0, 0, 4, 4), 

(3, 0, 0, 5, 2), 
(4, 0, 0, 5, 3), 
(5, 0, 0, 5, 4), 

(6, 0, 0, 6, 1); 

Antwort

1

ich wie eine einzige Tabelle fühlen würde viel einfacher impliment:

TABLE Nachricht - Meldungs ​​(GUID) - ParentId (GUID) - Thema - Nachricht - To - Sender - CreatedOn - isDraft - isDeleted - isRead

Wenn Sie eine E-Mail an eine Gruppe senden, erstellen Sie einfach mehrere Datensätze mit unterschiedlichen „To“ Einträge

+0

auch, ich nehme an, Sie einige Elemente Ordner gelöscht werden? (daher der Grund für das IsDeleted-Flag, ansonsten einfach den Datensatz löschen und fertig sein). Wenn Sie das tun, sollten Sie die Richtlinie für den Zeitpunkt berücksichtigen, zu dem der Ordner gelöscht wird. Wenn etwas wie "Nachricht gelöscht vor mehr als 5 Tagen" lautet, müssen Sie das gelöschte Datum im Auge behalten. Aber ich denke, Sie könnten wahrscheinlich mit etwas wie "Nachrichten älter als 30 Tage" gehen in diesem Fall das createdOn Datum wird ausreichen. – Prescott

+0

humm erstellen Sie mehrere Datensätze mit unterschiedlichen To, aber werden dies nicht redundante Nachrichtendaten erstellen? – Aman

+0

Ja, aber es würde Ihre Implementierung viel sauberer machen, ein Datensatz = eine Nachricht. Sie könnten es auf Ihre Art und Weise tun, in diesem Fall scheint Ihr vorgeschlagenes Schema die Rechnung zu passen. – Prescott

Verwandte Themen