0Pricing
SQL Academy · Lección

Modelado de un blog: usuarios, publicaciones y comentarios

Dibuje un diagrama ER, identifique las entidades y relaciones y tradúzcalas a un esquema SQL normalizado.

Modelado de un blog: usuarios, publicaciones y comentarios es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

El dominio

Un blog sencillo: los usuarios escriben publicaciones y otros usuarios comentan en ellas. Convirtamos esto en un esquema.

Entidades

Tres sustantivos principales:

  • Usuario — id, correo electrónico, nombre
  • Publicación — id, autor, título, cuerpo, marca de tiempo de publicación
  • Comentario — id, autor, publicación a la que pertenece, cuerpo

Relaciones

Cardinalidades:

  • User 1 ── ∞ Post (un usuario escribe muchas publicaciones)
  • User 1 ── ∞ Comment
  • Post 1 ── ∞ Comment

Tabla de usuarios

Comience por los usuarios: las demás tablas los referencian:

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()
);

Tabla de publicaciones

FK hacia users:

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()
);

Tabla de comentarios

Dos FK:

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 qué usar ON DELETE CASCADE en los comentarios?

Si se elimina una publicación, sus comentarios dejan de tener sentido; deje que la base de datos los elimine automáticamente.

¿Por qué usar ON DELETE RESTRICT en el autor?

No elimine contenido silenciosamente cuando desaparezca un usuario. Obligue a la aplicación a eliminar lógicamente al usuario o reasignar primero su contenido.

Extensión a etiquetas (muchos a muchos)

Añada etiquetas mediante una tabla intermedia:

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)
);

Comentarios anidados

Comentarios con autorreferencia para las respuestas:

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

Eliminación lógica frente a eliminación física

En un blog, eliminar lógicamente las publicaciones suele ser más conveniente: los enlaces rotos no fallan en el historial del usuario. Añada deleted_at TIMESTAMPTZ y filtre con WHERE deleted_at IS NULL en cada consulta.

Diagrama ER en palabras

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

Además: users (1) -< (∞) comments, posts (∞) >-< (∞) tags.

Resumen

Diseñar un esquema comienza por las entidades, las relaciones y las cardinalidades.

  • PK sustituta en cada tabla
  • Las FK declaran las relaciones
  • CASCADE frente a RESTRICT refleja la intención de negocio
  • Muchos a muchos = tabla intermedia

Comprobación rápida

¿Dónde se encuentra la clave foránea en una relación de uno a muchos entre publicaciones y comentarios?

Preguntas frecuentes

¿La lección «Modelado de un blog: usuarios, publicaciones y comentarios» es gratis?

Sí — el texto completo de «Modelado de un blog: usuarios, publicaciones y comentarios» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Modelado de un blog: usuarios, publicaciones y comentarios»?

Dibuje un diagrama ER, identifique las entidades y relaciones y tradúzcalas a un esquema SQL normalizado. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Modelado de un blog: usuarios, publicaciones y comentarios»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Modelado de un blog: usuarios, publicaciones y comentarios
  2. Elección de claves y tipos
  3. Índices para consultas habituales
  4. Carga de datos de prueba en la base de datos
← Volver a SQL Academy