Seu esquema parece perfeitamente bem, você pode ver que os outros (inclusive eu hoje) vieram com mais ou menos a mesma estrutura antes (Armazenando mensagens de diferentes chats em uma única tabela de banco de dados , Esquema de banco de dados para bate-papo individual e em grupo , Criando um segmento privado sistema de mensagens como facebook e gmail ). Eu realmente gostaria de observar que sua representação visual é a melhor de todas, é tão fácil de entender e seguir :)
Em geral, acho que ter "sala" ("chat", "conversa") faz sentido mesmo se você não tiver propriedades específicas no momento (como pode ser
name
, posting_allowed
, type
(ou seja, se você reutilizar a estrutura semelhante não apenas para mensagens e bate-papos privados, mas também para postagens públicas com comentários) e assim por diante. A tabela única com o ID de índice único deve ser super rápida e ter uma sobrecarga próxima de zero, no entanto, permitirá a extensão com bastante facilidade sem a necessidade de modificar todo o código existente (ou seja, um dia você decide adicionar um name
para bate-papos). Manter a lógica do ID da sala "escondida" dentro de participants
table não será transparente e nem eficiente (ou seja, quando você precisar encontrar o próximo ID do bate-papo), eu não recomendaria isso.