Stiamo costruendo un webservice multi-tenant con PHP e MongoDB. C'è bisogno di comunicazione tra i dipendenti dei servizi e i clienti, la comunicazione può essere stabilita in molti modi diversi. Alcuni di questi sono: SMS, MMS, Email e, possibilmente, un sistema di chat interno.
La domanda è, come implementare correttamente la struttura del database per questo?
Il mio capo insiste che ci dovrebbe essere una collezione - messages
, dove dovremmo memorizzare il mittente, il tipo, il destinatario, il corpo del messaggio, il timestamp e gli argomenti in quel modo, che avremmo un percorso che punta a users/1235/messages
, in cui è possibile recuperare la cronologia della chat.
Tuttavia, non sono d'accordo su di esso e lo discuto in questo modo, che ogni tipo di messaggio ha le sue proprietà e impostazioni. Ad esempio, non sarebbe giusto archiviare l'intero corpo del messaggio SMS all'interno di una sola istanza: un SMS può comprendere fino a 6 parti, che vengono consegnate in modo indipendente (hanno il proprio ID di tracciamento). In questo modo, è facile tenere traccia di quali parti sono state consegnate, consentendo così di inviare parti mancanti al posto dell'intero messaggio. Le e-mail hanno anche le loro proprietà come indirizzo, reply-to e altre cose.
Probabilmente penso troppo alla costanza, visto che uso MySQL da molto tempo. Ma, a mio parere, la memorizzazione di tutti i messaggi solo in una collezione darebbe una grande diversità di proprietà nell'oggetto. Tuttavia, la memorizzazione separata di ciascun sistema di messaggi offre opzioni flessibili che consentono di tenere traccia dello stato di ogni messaggio e di altri dettagli. Tutti i messaggi sono stati normalizzati e uniti in un'unica raccolta di dati in seguito. (Concat SMS per costruire tutto il corpo, ecc.)
Quindi, che tipo di soluzione vedresti qui?