Le schéma devrait fonctionner correctement tant qu'il n'y a pas trop de destinataires du même message. Je ne vois pas comment vous pourriez le rendre beaucoup plus petit ou plus efficace.
Le seul problème de performances que je peux voir est que si vous voulez faire de la diffusion, c'est-à-dire envoyer le même message à un grand groupe ou, disons, à tous les utilisateurs du système. L'envoi d'un tel message sera très lent (été là, fait cela). Dans ce cas, je suivrais paresseusement l'état de tels messages globaux, c'est-à-dire que je créerais la ligne d'état pour un utilisateur individuel uniquement après qu'il a ouvert le message. Mais si vous n'avez pas prévu une telle fonctionnalité, je vous conseillerais d'ignorer ce problème pour le moment.