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

表概览 (~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.php 的 logAction() 函数写入。
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 # 运行时自动建表