я б сделал три таблицы:
1. Диалоги Conversations(id, name, type, status), где type - открытый чат, закрытый чат, общий чат, status - диалог открыт, диалог завершен, диалог помещен в архив.
2. Участники Conversation_Users(conversation_id, user_id) - (conversation_id, user_id) - уникальные.
3. Сообщения чата Conversation_Messages (id, conversation_id, user_id, send_date, message).
Если диалог закрыт и прошло больше определенного времени (месяц, год), то можно все связанные данные сериализовать и кинуть в файл или таблицу архивов, ненужные данные удалить.