2012-10-31 7 views
5

Sto creando un piccolo messaggio di posta elettronica/messaggio che invia lo schema del database. Non è Actuall sistema di posta elettronica, ma una sorta di un portale di messaggistica withing un'organizzazione, con i seguenti casi di utilizzo:Creazione di un semplice schema di database di posta elettronica/messaggistica

  1. dipendenti possono Brodcast messaggi a tutti i dipendenti
  2. dipendenti possono inviare messaggi a vicenda
  3. dipendenti possono risposta ai messaggi ricevuti
  4. i dipendenti possono visualizzare le email a cui ha risposto vedendo una risposta nella colonna "timestamp" nella posta in arrivo (cioè deve esserci una colonna "repliedat" nella casella di posta che dovrebbe mostrare la data e ora in cui questa mail è stata risposta, dovrebbe essere vuoto se non lo è)
  5. Quando apre un messaggio particolare, vede una vista filettata dei messaggi, l'ultima è in cima.

mia domanda Come faccio a monitorare se un particolare messaggio è una risposta a qualsiasi messaggio, nelle e-mail, credo che sia integrato nella testata. Mantengo un campo ID "replicato" che indica un altro messaggio di cui è la risposta?

Come si creano discussioni o catene?

+0

ho lavorato sulla risposta a [questo] [1] domanda e questo è il miglior [1]: http://stackoverflow.com/questions/6541302/thread-messaging-system-database- schema-design – shabby

risposta

6

Mantieni un campo nella tabella del database che punta all'email originale. Ogni e-mail può avere solo un predecessore (o "padre") mentre qualsiasi e-mail non può avere nessuno o più successori (o "figli"). Quindi è meglio mantenere un registro di ciò che era il predecessore.

Questo è anche il modo in cui si creano discussioni o catene: il primo messaggio nella discussione avrà il suo campo "padre" uguale a 0, ma i messaggi successivi conterranno altri valori in questo campo. Sarebbe anche d'aiuto se mantieni un campo chiamato "thread" o "conversazione", rendendo più facile sapere quali messaggi sono collegati a quali thread.

La parte interessante non è necessariamente come si memorizzano i collegamenti nella catena ma come si attraversa la catena.

seguito è un semplice schema di dati

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 

Come un messaggio può essere inviato a molte persone, esiste una relazione uno-a-molti tra messaggio e dei destinatari. Ogni destinatario avrebbe letto il messaggio in un momento diverso e avrebbe uno stato diverso (non letto, letto, cancellato, cancellato non letto, ecc.).

+0

ma quanti tavoli? quale struttura della tabella? – shabby

+0

Quanto lontano hai da solo? –

+0

Stavo avendo problemi a come aggiungere destinatari a ogni messaggio/posta, poi ho scoperto che il destinatario non sarebbe di ogni mail, sarebbe associato al thread, grazie per l'aiuto – shabby

Problemi correlati