0Pricing
SQL Academy · Aula

Modelando um blog: usuários, publicações e comentários

Desenhe um diagrama ER, identifique entidades e relacionamentos e traduza-os para um esquema SQL normalizado.

Modelando um blog: usuários, publicações e comentários é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

O domínio

Um blog simples: usuários escrevem publicações e outros usuários comentam essas publicações. Vamos transformar isso em um esquema.

Entidades

Três substantivos centrais:

  • Usuário — identificador, e-mail, nome
  • Publicação — identificador, autor, título, corpo, data e hora de publicação
  • Comentário — identificador, autor, publicação à qual pertence, corpo

Relacionamentos

Cardinalidades:

  • Usuário 1 ── ∞ Publicação (um usuário escreve muitas publicações)
  • Usuário 1 ── ∞ Comentário
  • Publicação 1 ── ∞ Comentário

Tabela de usuários

Comece pelos usuários — as outras tabelas farão referência a ela:

CREATE TABLE users (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  full_name VARCHAR(100) NOT NULL,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

Tabela de publicações

FK para usuários:

CREATE TABLE posts (
  id BIGSERIAL PRIMARY KEY,
  author_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
  title VARCHAR(200) NOT NULL,
  body  TEXT NOT NULL,
  published_at TIMESTAMPTZ,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

Tabela de comentários

Duas chaves estrangeiras:

CREATE TABLE comments (
  id BIGSERIAL PRIMARY KEY,
  post_id BIGINT NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
  author_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
  body TEXT NOT NULL,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

Por que usar ON DELETE CASCADE nos comentários?

Se uma publicação for excluída, seus comentários deixam de fazer sentido — deixe o banco de dados limpá-los automaticamente.

Por que usar ON DELETE RESTRICT no autor?

Não exclua conteúdo silenciosamente quando um usuário desaparecer. Force a aplicação a excluir logicamente o usuário ou reatribuir o conteúdo antes.

Expandindo para etiquetas (muitos para muitos)

Adicione etiquetas por meio de uma tabela de junção:

CREATE TABLE tags (
  id BIGSERIAL PRIMARY KEY,
  name TEXT NOT NULL UNIQUE
);

CREATE TABLE post_tags (
  post_id BIGINT REFERENCES posts(id) ON DELETE CASCADE,
  tag_id  BIGINT REFERENCES tags(id)  ON DELETE CASCADE,
  PRIMARY KEY (post_id, tag_id)
);

Comentários encadeados

Comentários com autorreferência para respostas:

ALTER TABLE comments
  ADD COLUMN parent_id BIGINT REFERENCES comments(id) ON DELETE CASCADE;

Exclusão lógica versus exclusão física

Para um blog, excluir publicações logicamente costuma ser mais adequado — links quebrados não deixam de funcionar no histórico do usuário. Adicione deleted_at TIMESTAMPTZ e filtre por WHERE deleted_at IS NULL em todas as consultas.

Diagrama ER em palavras

users (1) -< (∞) posts (1) -< (∞) comments

Além disso: users (1) -< (∞) comments, posts (∞) >-< (∞) tags.

Resumo

Projetar um esquema começa pelas entidades, pelos relacionamentos e pelas cardinalidades.

  • PK substituta em todas as tabelas
  • Chaves estrangeiras declaram os relacionamentos
  • CASCADE versus RESTRICT corresponde à intenção do negócio
  • Muitos para muitos = tabela de junção

Verificação rápida

Onde fica a chave estrangeira em um relacionamento de um para muitos entre publicações e comentários?

Perguntas Frequentes

A aula “Modelando um blog: usuários, publicações e comentários” é grátis?

Sim — o texto completo de “Modelando um blog: usuários, publicações e comentários” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Modelando um blog: usuários, publicações e comentários”?

Desenhe um diagrama ER, identifique entidades e relacionamentos e traduza-os para um esquema SQL normalizado. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Modelando um blog: usuários, publicações e comentários”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Modelando um blog: usuários, publicações e comentários
  2. Escolhendo chaves e tipos
  3. Índices para consultas comuns
  4. Populando o banco de dados com dados de teste
← Voltar para SQL Academy