Я настоятельно рекомендую не хранить сообщения в поле в вашей пользовательской таблице. Это может привести к проблемам с производительностью по мере роста вашего приложения. Как предложил другой ответ, я бы добавил таблицу специально для хранения данных сообщений. Ниже приведен пример псевдокода того, как могут выглядеть ваши таблицы.
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
}
Пожалуйста, имейте в виду, что это всего лишь пример, и он может не учитывать конкретные проблемы вашего приложения.
Одна заключительная мысль: вы действительно планируете хранить XML в поле напрямую или использовать какой-то инструмент XML <-> отображения SQL? Если вы храните XML напрямую, вы можете не использовать возможности вашей базы данных. Ваши опасения по поводу производительности обоснованы, но хорошо спроектированная и настроенная база данных должна легко обрабатывать миллионы записей в одной таблице.
Надеюсь, это поможет.