O coração de uma rede social
Uma rede social parece complicada, mas se resume a três entidades:
- Usuários: cada pessoa com seu
ide seunome. - Seguidores: quem segue quem.
- Publicações: o que cada usuário escreve.
A peça interessante é a de seguidores. Repare: um usuário pode seguir muitos outros e, ao mesmo tempo, ser seguido por muitos. Isso é uma relação N:M (muitos-para-muitos). Mas há um detalhe especial: ambos os lados da relação são o mesmo tipo de entidade (um usuário segue outro usuário).
Uma tabela consigo mesma: o grafo
Quando uma entidade se relaciona consigo mesma com cardinalidade N:M, o que você obtém é um grafo dirigido: os nós são os usuários e as arestas são os "segue". A direção importa: o fato de Ana seguir Beto não implica que Beto siga Ana.
Modelamos essa relação com uma tabela ponte com duas colunas, ambas apontando para
usuarios:
CREATE TABLE seguidores (
seguidor_id INTEGER, -- quem segue
seguido_id INTEGER -- quem é seguido
);
Cada linha é uma aresta do grafo. Para saber quem Ana
(id = 1) segue, você filtra por seguidor_id = 1 e olha os seguido_id.
O que vem por aí
Nos próximos exercícios você vai construir, nesta ordem:
- a consulta do feed (as publicações de quem você segue),
- a lógica do feed em JavaScript e o toggle de curtidas,
- um componente de React para uma publicação com seu botão "Curtir",
- e vai resolver o problema N+1 ao carregar os autores.