Esta é a pergunta clássica do Padrão de Herança de Tabela e existem 3 soluções estabelecidas:
Cada um tem prós e contras. Você foi com a herança da tabela de classes, que é o que a maioria dos desenvolvedores tende a fazer naturalmente, pois segue o modelo de design do código e parece normalizado. Mas é o pior desempenho, pois requer junções frequentes, inserções e atualizações são caras e a aplicação da integridade dos dados é complexa. Eu sou muito a favor do modelo de herança de tabela única:uma e apenas uma tabela,
[Messages]
, por sua simplicidade e desempenho em tempo de execução no padrão de acesso mais frequente (ex. show my 'inbox' é uma consulta simples e rápida). Eu recomendo que você faça alguns testes com seu modelo proposto, sob carga e com conjuntos de dados razoavelmente grandes.