Je vous recommande vivement de ne pas stocker les messages dans un champ de votre table utilisateur. Cela risque fort de générer des problèmes de performances au fur et à mesure que votre application se développe. Comme une autre réponse suggérée, j'ajouterais une table spécifiquement pour stocker des données de message. Voici un exemple de pseudocode de ce à quoi pourraient ressembler vos tables.
UserTable
{
ID INT, -- a unique system generated ID
USER_ID CHAR(20), -- also unique, this is a user provided ID
FIRST_NAME CHAR(40),
LAST_NAME CHAR(40),
BIRTH_DATE DATE
}
UserEmailTable
{
ID INT, -- a unique system generated ID
USER_ID CHAR(20), -- this ties the entry to the record on UserTable
EMAIL_ADDR CHAR(128), -- user provided email
PRIORITY INT, -- Specifies the users 0..N-th address
}
MailTable
{
ID INT, -- a unique system generated ID
SENDER_ID INT, -- this ties the entry to the record on UserTable
RECIPIENT_ID INT, -- this ties the entry to the record on UserTable
CREATE_DATE DATE, -- record when the message was created by sender
READ_DATE DATE, -- record when the message was read by recipient
PRIVATE BOOL, -- indicates if this is a private message
MESSAGE BLOB -- the message body
}
S'il vous plaît gardez à l'esprit, ceci est juste un exemple et il peut ne pas répondre aux préoccupations spécifiques de votre application. Un dernier réflexe: pensez-vous réellement à stocker XML dans un champ directement ou à l'aide d'un outil de mappage XML < -> SQL? Si vous stockez le XML directement, vous ne pouvez pas profiter des capacités de votre base de données. Vos préoccupations au sujet des performances sont valides, mais une base de données bien conçue & devrait facilement être capable de gérer des millions d'enregistrements dans une seule table.
Espérons que ça aide.
Pourquoi serait-ce différent de stocker des commentaires réguliers? Parce qu'ils ont besoin d'un état "lu"/"non lu"? – Tormod
Ce n'est pas le cas, la seule différence est un message privé. Je stocke des commentaires en tant que XML dans le champ dans SQL Server, de sorte que vous estimez simplement faire un courrier privé un champ tout en protégeant comment ils sont vus? J'étais juste confus quant à la façon dont le courrier privé a été implémenté, c'est-à-dire s'il s'agissait d'un courrier réel tel qu'un échange ou quelque chose du genre. – James
Désolé j'ai mal lu votre commentaire! Ouais à peu près la seule différence que les commentaires normaux est qu'ils ne sont pas publics et auront des états lus/non lus. – James