0Pricing
SQL Academy · Урок

Моделирование блога: пользователи, публикации, комментарии

Нарисуйте ER-диаграмму, определите сущности и связи и преобразуйте их в нормализованную схему SQL

«Моделирование блога: пользователи, публикации, комментарии» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Предметная область

Простой блог: пользователи пишут публикации, а другие пользователи комментируют их. Превратим это в схему.

Сущности

Три основные сущности:

  • Пользователь — идентификатор, электронная почта, имя
  • Публикация — идентификатор, автор, заголовок, текст, время публикации
  • Комментарий — идентификатор, автор, публикация, к которой он относится, текст

Связи

Кардинальности:

  • Пользователь 1 ── ∞ Публикация (пользователь пишет много публикаций)
  • Пользователь 1 ── ∞ Комментарий
  • Публикация 1 ── ∞ Комментарий

Таблица пользователей

Начните с пользователей — на них ссылаются другие таблицы:

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

Таблица публикаций

Внешний ключ к таблице пользователей:

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

Таблица комментариев

Два внешних ключа:

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

Зачем ON DELETE CASCADE у комментариев?

Если публикацию удалить, её комментарии теряют смысл — пусть база данных автоматически удалит их.

Зачем ON DELETE RESTRICT у автора?

Не удаляйте содержимое молча, когда пользователь исчезает. Сначала заставьте приложение выполнить мягкое удаление пользователя или переназначить это содержимое.

Добавление тегов: многие ко многим

Добавьте теги с помощью таблицы связей:

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

Вложенные комментарии

Самоссылочные комментарии для ответов:

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

Мягкое и физическое удаление

Для блога мягкое удаление публикаций часто предпочтительнее — неработающие ссылки не исчезают из истории пользователя. Добавьте deleted_at TIMESTAMPTZ и фильтруйте по WHERE deleted_at IS NULL в каждом запросе.

Диаграмма ER словами

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

Также: users (1) -< (∞) comments, posts (∞) >-< (∞) tags.

Итоги

Проектирование схемы начинается с сущностей, связей и кардинальностей.

  • Суррогатный PK в каждой таблице
  • Внешние ключи объявляют связи
  • CASCADE и RESTRICT должны соответствовать бизнес-логике
  • Связь многие ко многим = таблица связей

Проверка знаний

Где находится внешний ключ при связи «один ко многим» между публикациями и комментариями?

Часто задаваемые вопросы

Урок «Моделирование блога: пользователи, публикации, комментарии» бесплатный?

Да — полный текст урока «Моделирование блога: пользователи, публикации, комментарии» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Моделирование блога: пользователи, публикации, комментарии»?

Нарисуйте ER-диаграмму, определите сущности и связи и преобразуйте их в нормализованную схему SQL Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Моделирование блога: пользователи, публикации, комментарии»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Моделирование блога: пользователи, публикации, комментарии
  2. Выбор ключей и типов
  3. Индексы для распространённых запросов
  4. Заполнение базы данных тестовыми данными
← Назад к SQL Academy