PICFLOW 数据库设计

所有表使用 InnoDB 引擎,utf8mb4 字符集。连接数据库为 img

数据库 ER 图


表结构

1. users — 用户表

字段 类型 说明
id INT AUTO_INCREMENT PK 用户 ID
username VARCHAR(50) UNIQUE 用户名
nickname VARCHAR(100) 昵称
email VARCHAR(100) 邮箱
password_hash VARCHAR(255) bcrypt 密码哈希
role ENUM(‘user’,’moderator’,’admin’) 角色,默认 ‘user’
avatar VARCHAR(500) 头像 URL
bio TEXT 个人简介
storage_driver ENUM(‘local’,’aliyun’,’tencent’) 存储后端偏好
api_token VARCHAR(64) API Token (SHA-256)
is_banned TINYINT(1) 是否被封禁
ban_reason TEXT 封禁原因
banned_until DATETIME 封禁截止时间
is_muted TINYINT(1) 是否被禁言
muted_until DATETIME 禁言截止时间
liked_tags TEXT 用户喜欢的标签 (逗号分隔)
created_at DATETIME 注册时间
updated_at DATETIME 更新时间

首个注册用户自动获得 admin 角色。

2. categories — 分类表

字段 类型 说明
id INT AUTO_INCREMENT PK 分类 ID
name VARCHAR(50) 分类名称
slug VARCHAR(50) UNIQUE URL 友好标识
description TEXT 分类描述
sort_order INT 排序序号

默认分类:scenery(风景)、portrait(人像)、design(设计)、animal(动物)、food(食物)、other(其他)。

3. images — 图片表

字段 类型 说明
id INT AUTO_INCREMENT PK 图片 ID
user_id INT FK → users.id 上传者
title VARCHAR(200) 标题
description TEXT 描述
category_id INT FK → categories.id 分类
file_path VARCHAR(500) 存储路径
storage_driver ENUM(‘local’,’aliyun’,’tencent’) 存储后端
file_size BIGINT 文件大小 (bytes)
width INT 图片宽度 (px)
height INT 图片高度 (px)
mime_type VARCHAR(50) MIME 类型
views_count INT DEFAULT 0 浏览次数
likes_count INT DEFAULT 0 点赞数
deleted_at DATETIME 软删除时间
created_at DATETIME 上传时间

软删除机制:deleted_at IS NOT NULL 表示已删除,30 天后硬删除。

4. image_tags — 图片标签表

字段 类型 说明
id INT AUTO_INCREMENT PK  
image_id INT FK → images.id 图片 ID
tag VARCHAR(50) 标签名

每张图片可关联多个标签。标签在图片上传时根据标题、分类、文件名自动生成。

5. likes — 点赞表

字段 类型 说明
user_id INT FK → users.id 用户 ID
image_id INT FK → images.id 图片 ID
created_at DATETIME 点赞时间

联合唯一索引 (user_id, image_id),保证同一用户对同一图片只能点赞一次。

6. browse_history — 浏览历史表

字段 类型 说明
id INT AUTO_INCREMENT PK  
user_id INT (可为 NULL) 用户 ID
image_id INT FK → images.id 图片 ID
dwell_time INT 停留时长 (秒)
from_page VARCHAR(200) 来源页面
created_at DATETIME 浏览时间

支持匿名用户的浏览记录(user_id 可为 NULL)。

7. user_tag_prefs — 用户标签偏好表

字段 类型 说明
user_id INT FK → users.id 用户 ID
tag VARCHAR(50) 标签名
weight FLOAT DEFAULT 0 偏好权重

每次点赞/浏览时更新权重。点赞 +1,浏览 >=3s 根据停留时长 +1~3。约每 50 次浏览事件衰减 ~5%。

8. user_uploader_prefs — 用户上传者偏好表

字段 类型 说明
user_id INT FK → users.id 用户 ID
uploader_id INT FK → users.id 上传者 ID
weight FLOAT DEFAULT 0 偏好权重

9. email_verifications — 邮件验证表

字段 类型 说明
id INT AUTO_INCREMENT PK  
user_id INT FK → users.id 用户 ID
email VARCHAR(100) 目标邮箱
code VARCHAR(6) 6 位验证码
type ENUM(‘password_reset’,’email_change’,’profile_change’) 验证类型
expires_at DATETIME 过期时间 (15 分钟)
used_at DATETIME 使用时间
created_at DATETIME 发送时间

10. change_logs — 操作日志表

字段 类型 说明
id INT AUTO_INCREMENT PK  
admin_id INT 操作者 ID
admin_name VARCHAR(50) 操作者用户名
action_type VARCHAR(50) 操作类型 (28 种)
title VARCHAR(200) 操作标题
detail TEXT 详细描述
target_info TEXT 目标信息
created_at DATETIME 操作时间

操作类型枚举:login_success, login_failed, register, upload, delete_image, ban_user, unban_user, mute_user, unmute_user, role_change, tag_update, setting_update, announcement_create, announcement_update, version_create, version_update, api_key_reset, email_send, storage_config, moderation_action, trash_restore, trash_delete, export, batch_delete, bot_upload, bot_moderation, profile_update, password_change。

11. announcements — 系统公告表

字段 类型 说明
id INT AUTO_INCREMENT PK  
title VARCHAR(200) 公告标题
content TEXT 公告内容
is_active TINYINT(1) 是否显示
is_pinned TINYINT(1) 是否置顶
sort_order INT 排序
created_at DATETIME 发布时间

12. site_settings — 站点设置表

字段 类型 说明
id INT AUTO_INCREMENT PK  
key VARCHAR(50) UNIQUE 设置键名
value TEXT 设置值
type ENUM(‘text’,’bool’,’number’,’select’) 值类型
label VARCHAR(100) 显示名称
options TEXT select 类型的选项
updated_at DATETIME 更新时间

Key-Value 形式的灵活配置系统,管理员可通过后台直接编辑。

13. app_versions — 应用版本表

字段 类型 说明
id INT AUTO_INCREMENT PK  
platform VARCHAR(20) 平台 (web/h5/ios/android/desktop/uniapp)
version VARCHAR(20) 版本号
build INT 构建号
title VARCHAR(200) 版本标题
description TEXT 更新说明
update_url VARCHAR(500) 下载地址
is_force TINYINT(1) 是否强制更新
is_active TINYINT(1) 是否启用
created_at DATETIME 发布时间

索引策略

  • users.username — UNIQUE 索引(登录查询)
  • users.email — INDEX(密码重置查询)
  • users.api_token — UNIQUE 索引(API 鉴权)
  • images.user_id — INDEX(用户图片查询)
  • images.category_id — INDEX(分类筛选)
  • images.deleted_at — INDEX(软删除过滤)
  • images.created_at — INDEX(时间排序)
  • likes(user_id, image_id) — UNIQUE 联合索引
  • likes.image_id — INDEX(点赞数聚合)
  • image_tags.tag — INDEX(标签搜索)
  • browse_history.image_id — INDEX(浏览统计)
  • browse_history.user_id — INDEX(用户历史)
  • user_tag_prefs(user_id, tag) — UNIQUE 联合索引
  • user_uploader_prefs(user_id, uploader_id) — UNIQUE 联合索引
📝 本文由AI生成