Anonymous
Tue 13/05/25 12:46:41 UTC
№84515
Для создания схемы базы данных для имиджборды (сайта типа 4chan) нужно учесть несколько ключевых сущностей, таких как пользователи, посты, потоки сообщений (темы), изображения, а также механизм репортирования и управления контентом. Предлагаю следующий базовый план:
1. Таблицы базы данных
1.1 Пользователи (Users)
user_id (PK): Идентификатор пользователя (можно использовать автоинкремент).
username: Имя пользователя.
email: Электронная почта пользователя (можно быть необязательной).
password_hash: Хеш пароля.
ip_address: IP-адрес пользователя (для ограничения доступа).
date_joined: Дата регистрации.
is_banned: Флаг, показывающий, забанен ли пользователь.
1.2 Потоки сообщений (Boards)
board_id (PK): Идентификатор доски.
name: Название доски (например, "Фото", "Техника").
description: Описание доски.
is_active: Флаг, показывающий, активна ли доска.
1.3 Темы (Threads)
thread_id (PK): Идентификатор темы.
board_id (FK): Идентификатор доски, к которой относится тема.
title: Заголовок темы.
op_user_id (FK): Идентификатор пользователя, создавшего тему (это может быть анонимный пользователь).
date_created: Дата создания темы.
date_last_posted: Дата последнего сообщения в теме.
is_locked: Флаг, блокирует ли тему от новых постов.
1.4 Посты (Posts)
post_id (PK): Идентификатор поста.
thread_id (FK): Идентификатор темы, к которой относится пост.
user_id (FK): Идентификатор пользователя, создавшего пост (если анонимно — можно оставить NULL).
content: Текст поста.
image_url: Ссылка на изображение (если оно прикреплено к посту).
timestamp: Время создания поста.
parent_post_id (FK): Для ответа на другие посты (если это ответ на чей-то пост).
is_deleted: Флаг, показывает, был ли пост удален.
is_reported: Флаг, показывающий, был ли пост помечен как нарушающий правила.
1.5 Изображения (Images)
image_id (PK): Идентификатор изображения.
post_id (FK): Идентификатор поста, к которому прикреплено изображение.
image_url: Путь к изображению.
image_size: Размер изображения.
image_type: Тип изображения (например, jpg, png).
upload_date: Дата загрузки изображения.
1.6 Репорты (Reports)
report_id (PK): Идентификатор репорта.
post_id (FK): Идентификатор поста, на который был подан репорт.
user_id (FK): Идентификатор пользователя, подавшего репорт.
reason: Причина репорта (например, оскорбления, спам, нарушении правил).
date_reported: Дата подачи репорта.
status: Статус репорта (например, "не обработан", "рассмотрен", "удален").
1.7 Логи действий (Action Logs)
log_id (PK): Идентификатор лога.
user_id (FK): Идентификатор пользователя, совершившего действие (можно быть NULL для анонимных пользователей).
action: Описание действия (например, "создан пост", "удален пост", "создана тема").
timestamp: Время действия.
additional_info: Дополнительная информация о действии (например, причины блокировки).
2. Связи между таблицами
Один пользователь может создавать множество постов.
Один пользователь может создать одну или несколько тем.
Каждая тема относится к одной доске.
Каждый пост относится к одной теме.
Каждый пост может быть ответом на другой пост.
Репорты привязаны к постам и пользователям.
Изображения привязаны к постам.
3. Пример схемы ER (Entity-Relationship)
4. Дополнительные аспекты
Кэширование: Для ускорения работы можно добавить механизмы кэширования для популярных тем и постов.
Модерация: Возможно, понадобится отдельная таблица для работы модераторов, их действий (например, блокировка пользователей, удаление постов).
Обработка изображений: Можно добавить дополнительные поля для обработки изображений, таких как миниатюры, статус загрузки и т. д.