A solução mais extensível é ter apenas uma tabela "base" (conectada a "curtidas", tags e comentários) e "herdar" todas as outras tabelas dela. Adicionar um novo tipo de entidade envolve apenas adicionar uma nova tabela "herdada" - ela se conecta automaticamente a todo o mecanismo de curtidas/tags/comentários.
O termo entidade-relacionamento para isso é "categoria" (consulte o Guia de métodos ERwin , seção:"Relacionamentos de subtipo"). O símbolo da categoria é:
Supondo que um usuário possa gostar de várias entidades, uma mesma tag pode ser usada para mais de uma entidade, mas um comentário é específico da entidade, seu modelo pode ficar assim:
BTW, existem aproximadamente 3 maneiras de implementar a "categoria ER":
- Todos os tipos em uma tabela.
- Todos os tipos concretos em tabelas separadas.
- Todos os tipos concretos e abstratos em tabelas separadas.
A menos que você tenha requisitos de desempenho muito rigorosos, a terceira abordagem é provavelmente a melhor (o que significa que as tabelas físicas correspondem 1:1 às entidades no diagrama acima).