DOO 数据库设计

所有表使用 InnoDB 引擎,utf8mb4 字符集。数据库名为 doo-app

DOO 数据库 ER 图

表概览 (~20 张)

users ──1:N──> content
  │
  ├──1:N──> images
  ├──1:N──> follows (follower_id + following_id)
  ├──1:N──> messages (sender_id + receiver_id)
  ├──1:N──> collections (user_id + image_id)
  ├──1:N──> user_behaviors (行为追踪)
  ├──1:N──> logs (系统日志)
  ├──1:N──> files (文件管理)
  └──1:N──> articles

独立表:
  carousels (轮播图)
  announcements (公告)
  app_versions (版本管理)
  recommendations (推荐算法配置)
  recommendation_logs (推荐日志)
  recommendation_metrics (推荐指标)
  recommendation_versions (推荐配置版本)
  manual_recommendations (手动推荐)
  ab_tests (A/B 测试)
  ab_test_results (A/B 测试结果)

核心表结构

1. users — 用户表

字段 类型 说明
id INT AUTO_INCREMENT PK 用户 ID
username VARCHAR(50) UNIQUE 用户名
password VARCHAR(255) bcrypt 哈希
role ENUM(‘user’,’admin’) DEFAULT ‘user’ 角色
nickname VARCHAR(50) 昵称
avatar VARCHAR(255) 头像 URL
background_image VARCHAR(255) 背景图 URL
followers INT DEFAULT 9999 粉丝数
following INT DEFAULT 0 关注数
likes INT DEFAULT 0 获赞数
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 注册时间
updated_at TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间

索引:username (登录查询)

2. content — 内容表(统一管理图片/视频/文章)

字段 类型 说明
id INT AUTO_INCREMENT PK 内容 ID
user_id INT NOT NULL 发布者 FK
title VARCHAR(255) NOT NULL 标题
content TEXT 正文/描述
image_url VARCHAR(255) 图片 URL
video_url VARCHAR(255) 视频 URL
likes INT DEFAULT 0 点赞数
comments INT DEFAULT 0 评论数
status ENUM(‘draft’,’published’,’deleted’) DEFAULT ‘published’ 状态
tags VARCHAR(255) 标签(逗号分隔)
category VARCHAR(100) DEFAULT ‘photography’ 分类
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间

索引:user_id

动态建表:content.php 首次运行时自动检查并创建此表。

3. images — 图片表

字段 类型 说明
id INT AUTO_INCREMENT PK 图片 ID
title VARCHAR(255) NOT NULL 标题
author VARCHAR(100) NOT NULL 作者
url VARCHAR(255) NOT NULL 图片 URL
tags TEXT 标签(逗号分隔)
category VARCHAR(50) DEFAULT ‘photography’ 分类
user_id INT DEFAULT 1 上传者 ID
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 创建时间
updated_at TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 更新时间

4. follows — 关注表

字段 类型 说明
id INT AUTO_INCREMENT PK  
follower_id INT NOT NULL 关注者 ID
following_id INT NOT NULL 被关注者 ID
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 关注时间

约束:(follower_id, following_id) UNIQUE 联合唯一索引

5. messages — 私信表

字段 类型 说明
id INT AUTO_INCREMENT PK  
sender_id INT NOT NULL 发送者 ID
receiver_id INT NOT NULL 接收者 ID
content TEXT NOT NULL 消息内容
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 发送时间

索引:sender_id, receiver_id

6. carousels — 轮播图表

字段 类型 说明
id INT AUTO_INCREMENT PK  
title VARCHAR(255) NOT NULL 标题
author VARCHAR(100) 来源/作者
image_url VARCHAR(500) NOT NULL 图片 URL
sort_order INT DEFAULT 0 排序(升序)
is_active TINYINT(1) DEFAULT 1 1=启用 0=禁用
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  
updated_at TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  

索引:sort_order


推荐系统表

7. recommendations — 推荐算法配置

字段 类型 说明
id INT AUTO_INCREMENT PK  
algorithm VARCHAR(100) NOT NULL 算法名称
enabled TINYINT(1) DEFAULT 1 是否启用
weight FLOAT DEFAULT 0.5 权重(用于流量分配)
description TEXT 算法描述
shows INT DEFAULT 0 总展示次数
clicks INT DEFAULT 0 总点击次数
created_at TIMESTAMP  
updated_at TIMESTAMP ON UPDATE  

默认数据:collaborative_filtering (0.3), content_based (0.2), popularity (0.25), hybrid (0.1)

8. recommendation_versions — 推荐配置版本历史

记录每次算法权重调整的快照(recommendation_id, algorithm, enabled, weight, description, created_by, created_at),支持版本回滚。

9. recommendation_logs — 推荐请求日志

字段 类型 说明
id INT AUTO_INCREMENT PK  
user_id INT 请求用户
algorithm VARCHAR(100) 使用的算法
action VARCHAR(50) 操作类型
item_id INT 内容 ID
processing_time FLOAT 处理耗时
cache_hit TINYINT(1) 是否命中缓存
metadata JSON 附加元数据

10. recommendation_metrics — 推荐指标

记录每次推荐展示和点击的量化指标(metric_type, metric_name, value, timestamp, metadata JSON)。

11. manual_recommendations — 手动推荐

字段 类型 说明
id INT AUTO_INCREMENT PK  
recommend_type VARCHAR(50) 推荐类型 (all/特定用户)
user_id INT 目标用户 (NULL=全量)
content_id INT NOT NULL 推荐内容 ID
priority VARCHAR(20) 优先级 (high/medium/low)
expire_time DATETIME NOT NULL 过期时间
reason TEXT 推荐理由

A/B 测试表

12. ab_tests — A/B 测试配置

字段 类型 说明
id INT AUTO_INCREMENT PK  
test_name VARCHAR(255) NOT NULL 测试名称
algorithm_a VARCHAR(100) NOT NULL 算法 A
algorithm_b VARCHAR(100) NOT NULL 算法 B
start_time TIMESTAMP 开始时间
end_time TIMESTAMP 结束时间
status VARCHAR(20) DEFAULT ‘running’ running/stopped
traffic_split INT DEFAULT 50 流量分配比例 (%)
description TEXT 测试描述

13. ab_test_results — A/B 测试结果

字段 类型 说明
id INT AUTO_INCREMENT PK  
test_id INT NOT NULL FK 关联测试
algorithm VARCHAR(100) NOT NULL 算法名称
variant VARCHAR(1) NOT NULL A/B 变体
shows INT DEFAULT 0 展示次数
clicks INT DEFAULT 0 点击次数
ctr FLOAT DEFAULT 0 点击率
conversion_rate FLOAT DEFAULT 0 转化率

辅助表

14. user_behaviors — 用户行为表

字段 类型 说明
id INT AUTO_INCREMENT PK  
user_id INT NOT NULL  
type VARCHAR(50) 行为类型 (page_view, content_click, recommend_show, recommend_click, page_stay)
content_id VARCHAR(255) 内容 ID
content_type VARCHAR(50) 内容类型 (image/video)
position VARCHAR(50) 展示位置
algorithm VARCHAR(100) 推荐算法
recommend_id VARCHAR(255) 推荐 ID
duration INT 停留时长 (ms)
timestamp BIGINT NOT NULL 客户端时间戳 (ms)
created_at TIMESTAMP 服务端记录时间

用于推荐算法训练和用户画像构建。

15. logs — 系统日志表

字段 类型 说明
id INT AUTO_INCREMENT PK  
user_id INT NOT NULL 关联用户 (0=未登录)
type VARCHAR(50) 日志类型
action VARCHAR(100) 操作描述
message TEXT 详细消息
ip_address VARCHAR(45) 客户端 IP
created_at TIMESTAMP 记录时间

通过 log_helper.phplogAction() 函数写入。

16. collections — 收藏表

字段 类型 说明
id INT AUTO_INCREMENT PK  
user_id INT NOT NULL 用户 ID
image_id INT NOT NULL 图片 ID
created_at TIMESTAMP 收藏时间

17. announcements — 公告表

字段 类型 说明
id INT AUTO_INCREMENT PK  
title VARCHAR(255) NOT NULL 标题
content TEXT NOT NULL 内容 (Markdown)
is_active TINYINT(1) DEFAULT 1 是否启用
created_at DATETIME  
updated_at DATETIME ON UPDATE  

18. app_versions — 版本管理表

字段 类型 说明
id INT AUTO_INCREMENT PK  
version VARCHAR(20) NOT NULL 版本号 (X.X.X)
description TEXT 更新说明
download_url VARCHAR(255) NOT NULL APK 文件名
created_at TIMESTAMP 发布时间

19. files — 文件管理表

字段 类型 说明
id INT AUTO_INCREMENT PK  
user_id INT NOT NULL 上传者
name VARCHAR(255) NOT NULL 存储名
original_name VARCHAR(255) NOT NULL 原始文件名
size BIGINT NOT NULL 文件大小 (bytes)
type VARCHAR(100) NOT NULL MIME 类型
url VARCHAR(500) NOT NULL 访问 URL
oss_key VARCHAR(500) NOT NULL OSS Key (预留)
folder VARCHAR(255) 目录
status ENUM(‘uploading’,’success’,’failed’) 上传状态

20. articles — 文章表

字段 类型 说明
id INT AUTO_INCREMENT PK  
title VARCHAR(255) NOT NULL 标题
content TEXT NOT NULL 正文
author VARCHAR(100) NOT NULL 作者
tags VARCHAR(255) 标签
category VARCHAR(50) DEFAULT ‘article’ 分类
user_id INT DEFAULT 1 发布者
created_at DATETIME NOT NULL  
updated_at DATETIME  

数据库初始化顺序

1. server/sql/doo-app.sql        # 完整转储(含所有表和示例数据)
2. server/database/               # 独立建表文件
   ├── create_articles_table.sql
   └── create_files_table.sql
3. server/api/create_content_table.php  # 运行时自动建表
📝 本文由AI生成