Database
 sql >> Base de Dados >  >> RDS >> Database

Adicionando recursos mais avançados, como gerenciar categorias e votar em tópicos e postagens




No meu segundo artigo sobre um fórum online, mencionei que pode haver vários recursos mais avançados a serem adicionados:
  • Fórum categorias e subcategorias onde cada categoria tem um assunto, vários moderadores e informações adicionais como data de criação da categoria.
  • Uma postagem pode ter um assunto além do conteúdo.
  • Podemos permitir que os usuários votem e vote contra em tópicos e postagens.

Para poder entender o modelo com mais facilidade, preparamos um exemplo de fórum com categorias, tópicos, postagens etc. Esperamos que isso facilite a compreensão das coisas:

As entidades da Parte 1 são coloridas em amarelo e as entidades da Parte 2 são coloridas em laranja. Aqui está o modelo de banco de dados atual após os dois primeiros artigos:



Mais detalhes sobre postagens


No segundo artigo, apenas adicionei relacionamentos ao “status” para tópicos e postagens, mas agora gostaria de aprimorar as postagens com um detalhe adicional além do conteúdo simples. Por enquanto, vou adicionar um “assunto” para cada post que pode ser diferente do “assunto” do tópico. Com o “assunto” (pense na linha de assunto de um e-mail ou no assunto de uma mensagem MMS), podemos exibir uma versão condensada do conteúdo – como as primeiras linhas de um e-mail exibido no Outlook ou na tela do seu telefone. correspondência. Além disso, os usuários podem usar o “assunto” de uma postagem para registrar um comentário de alto nível como “discordo” e depois colocar seus argumentos na seção de comentários da postagem. Esta é uma mudança simples e agradável para o modelo.

Categorias


Agora que nos aquecemos, vamos adicionar um novo conceito (entidade) para a categorização de tópicos e postagens. Cada categoria será definida com um nome; cada categoria é criada por um usuário e terá pelo menos um moderador entre os usuários, além de alguns outros atributos como os posts e tópicos que já temos. Gostaríamos de categorias e subcategorias, então permitiremos que categorias se refiram a outras (sub) categorias.

Como gostaria de ter vários moderadores em cada categoria, farei uma tabela para vincular categorias a grupos de usuários e vincular usuários a esses grupos. Esta tabela definirá “grupos” de usuários, um dos quais será “moderadores”, mas futuramente poderá ser expandido para outros tipos de grupos.

Votação ou "Curtidas"


Pessoalmente, prefiro “votar a favor” ou “votar contra” em algo em vez de simplesmente “gostar” (mas acho que Mark Zuckerberg discorda de mim nisso). Eu escolherei criar um mecanismo de votação que permita aos usuários lançar um “voto positivo” ou um “voto negativo”. Podemos optar por não permitir votos negativos quando não houver votos favoráveis, ou limitar o número de votos negativos, mas isso cabe ao aplicativo decidir, o banco de dados simplesmente acompanhará a contagem de votos positivos e negativos.

Podemos criar tabelas separadas para votos em threads e votos em posts, mas vou mantê-los na mesma tabela com chaves estrangeiras opcionais da tabela de threads e posts. Além disso, escolho não ter votação em categorias.


Design formal


Por enquanto, isso encerra as mudanças no modelo, para que possamos olhar para o design formal. Novamente, estendemos o ERD que foi criado nas Partes 1 e 2. As alterações descritas neste artigo e introduzidas no modelo são coloridas em azul.



Conclusão


Ainda há melhorias adicionais que podem ser feitas, mas aqui fizemos nosso banco de dados para um fórum on-line em um design bastante completo – isso suportaria os fóruns de discussão on-line mais comuns.

Quais outros recursos seu fórum online requer?
« Parte anterior