Pour répondre au fonctionnement de la table associative :
En fait les tables associatives répondent à un besoin relationnel de type N::N, c'est à dire que pour chacun des enregistrements d'une table (chacun de tes utilisateurs) on peut retrouver de 0 à N correspondance dans une autre table (un utilisateur peut avoir lu ou non, tout ou partie ou même aucun des messages de ton forum).
Pour des relations 1::N (ou 0::N), on ajoute simplement un champ dans la seconde table, faisant référence à la clé primaire de la première :
Un utilisateur appartient à une et une seule société (1), mais une société peut employer de 1 à N collaborateurs. On ajoute donc un id_société dans la table des utilisateurs pour savoir dans quelle société il travail.
Pour les relations N::N, on utilise une table intermédiaire de relation dans laquelle on va retrouver uniquement deux informations : la clé primaire de la première table et la clé primaire de la seconde table (id_utilisateur, id_message). On ajoutera ensuite un enregistrement dans cette table pour chaque relation entre un utilisateur et un message.
En gros, si l'utilisateur n°5 lit le message 42, tu ajoutes un enregistrement (5, 42), s'il lit ensuite le 65, tu ajoutes de même (5, 65). Tu peux ainsi connaitre les messages lus par cet utilisateurs (tous les messages dont l'id est associé à l'utilisateur 5 dans cette table). Et de même, tu peux retrouver les messages non lus en cherchant tous les messages qui n'ont aucune référence dans cette table pour l'utilisateur d'id 5.
Tu pourrais même ainsi gérer la notion de "marquer le message comme non lu" en retirant l'enregistrement correspondant de cette table.
J'espère que c'est plus clair comme ça
Après le nombre élevé d'enregistrement dans cette table n'est pas un soucis (enfin ça dépendra du nombre d'utilisateurs et de messages). Les BDD sont conçues pour gérer des millions d'enregistrements. C'est beaucoup d'insertions à chaque fois que quelqu'un consulte un topic puisque tous les messages qu'il découvre doivent être ajoutés, mais l'avantage, c'est que s'il ne lit que les messages de la première page, les autres ne seront pas marqués comme lus.
