简易版小红书系统数据库设计(优化版)
1. 用户表(users)
- id: BIGINT,主键,自增
- username: VARCHAR(50),用户名,唯一,非空
- password: VARCHAR(100),加密后的密码,非空
- avatar: VARCHAR(255),头像URL,可空
- email: VARCHAR(100),邮箱,唯一,可空
- bio: VARCHAR(255),个人简介,可空
- role: ENUM('USER', 'ADMIN', 'SUPERADMIN'),角色,非空,默认'USER'
- is_active: BOOLEAN,是否启用,非空,默认TRUE
- created_at: DATETIME,创建时间,非空,默认当前时间
- updated_at: DATETIME,更新时间,非空,默认当前时间且更新时自动更新
2. 用户画像表(user_profiles)
- id: BIGINT,主键,自增
- user_id: BIGINT,用户ID,外键→users.id,唯一,非空
- dim1: DECIMAL(5,2),具象vs抽象特征值,非空,默认0.00
- dim2: DECIMAL(5,2),理性vs情感特征值,非空,默认0.00
- dim3: DECIMAL(5,2),系统vs探索特征值,非空,默认0.00
- dim4: DECIMAL(5,2),个人vs社群特征值,非空,默认0.00
- dim5: DECIMAL(5,2),专业vs通俗特征值,非空,默认0.00
- dim6: DECIMAL(5,2),经典vs新潮特征值,非空,默认0.00
- dim7: DECIMAL(5,2),实用vs娱乐特征值,非空,默认0.00
- dim8: DECIMAL(5,2),极简vs丰富特征值,非空,默认0.00
- profile_type: VARCHAR(10),画像类型代码,可空
- last_update_time: DATETIME,画像最后更新时间,非空,默认当前时间
- created_at: DATETIME,创建时间,非空,默认当前时间
3. 验证码表(Verification_Codes)
- id: BIGINT,验证记录ID,主键,自增
- email: VARCHAR(100),邮箱,外键→users.email
- token: CHAR(6),6位数字验证码,非空
- purpose: ENUM('email_verification','password_reset'),验证码用途,非空
- created_at: TIMESTAMP,创建时间,非空,默认当前时间
- expires_at: TIMESTAMP,过期时间,非空
- is_used: BOOLEAN,是否已使用,非空,默认FALSE
- used_at: TIMESTAMP,使用时间,可空
4. 内容表(contents)
- id: BIGINT,主键,自增
- user_id: BIGINT,发布用户ID,外键→users.id,非空
- content\type: ENUM('IMAGE', 'VIDEO'),内容类型,非空
- text_content: TEXT,文本内容,非空
- title: VARCHAR(100),标题,非空
- cover_url: VARCHAR(255),封面图片URL,非空
- like_count: INT,点赞数,非空,默认0
- comment_count: INT,评论数,非空,默认0
- view_count: INT,浏览数,非空,默认0
- is_published: BOOLEAN,是否发布,非空,默认TRUE
- is_es_indexed: BOOLEAN,是否已索引到ES,非空,默认FALSE
- upload_status: ENUM('PENDING', 'UPLOADING', 'UPDATING', 'COMPLETED', 'FAILED'),是否完成媒体文件上传,非空,默认PENDING
- created_at: DATETIME,创建时间,非空,默认当前时间
- updated_at: DATETIME,更新时间,非空,默认当前时间且更新时自动更新
5. 内容特征表(content_features)
- id: BIGINT,主键,自增
- content_id: BIGINT,内容ID,外键→contents.id,唯一,非空
- task_status: ENUM('PENDING', 'PROCESSING', 'COMPLETED', 'FAILED'),任务状态,非空,默认'PENDING'
- task_started_at: DATETIME,任务开始时间,可空
- task_completed_at: DATETIME,任务完成时间,可空
- retry_count: INT,重试次数,非空,默认0
- error_message: VARCHAR(255),错误信息,可空
- dim1: DECIMAL(4,2),具象vs抽象特征值,可空
- dim2: DECIMAL(4,2),理性vs情感特征值,可空
- dim3: DECIMAL(4,2),系统vs探索特征值,可空
- dim4: DECIMAL(4,2),个人vs社群特征值,可空
- dim5: DECIMAL(4,2),专业vs通俗特征值,可空
- dim6: DECIMAL(4,2),经典vs新潮特征值,可空
- dim7: DECIMAL(4,2),实用vs娱乐特征值,可空
- dim8: DECIMAL(4,2),极简vs丰富特征值,可空
- created_at: DATETIME,创建时间,非空,默认当前时间
- updated_at: DATETIME,更新时间,非空,默认当前时间且更新时自动更新
6. 图片表(images)
- id: BIGINT,主键,自增
- content_id: BIGINT,内容ID,外键→contents.id,非空
- image_url: VARCHAR(255),图片URL,非空
- created_at: DATETIME,创建时间,非空,默认当前时间
7. 视频表(videos)
- id: BIGINT,主键,自增
- content_id: BIGINT,内容ID,外键→contents.id,非空
- video_url: VARCHAR(255),视频URL,非空
- created_at: DATETIME,创建时间,非空,默认当前时间
- id: BIGINT,主键,自增
- content_id: BIGINT,内容ID,外键→contents.id,非空
- user_id: BIGINT,评论用户ID,外键→users.id,非空
- comment_text: VARCHAR(500),评论内容,非空
- like_count: INT,点赞数,非空,默认0
- is_deleted: BOOLEAN,是否删除,非空,默认FALSE
- created_at: DATETIME,创建时间,非空,默认当前时间
- updated_at: DATETIME,更新时间,非空,默认当前时间且更新时自动更新
9. 点赞表(likes)
- id: BIGINT,主键,自增
- user_id: BIGINT,用户ID,外键→users.id,非空
- target_id: BIGINT,点赞目标ID,非空
- target_type: ENUM('CONTENT', 'COMMENT'),点赞类型,非空
- created_at: DATETIME,创建时间,非空,默认当前时间
10. 用户行为记录表(user_behaviors)
- id: BIGINT,主键,自增
- user_id: BIGINT,用户ID,外键→users.id,非空
- content_id: BIGINT,内容ID,外键→contents.id,非空
- behavior_type: ENUM('VIEW', 'LIKE', 'COMMENT', 'SHARE'),行为类型,非空
- created_at: DATETIME,行为发生时间,非空,默认当前时间
11. 系统日志表(sys_logs)
- id: BIGINT,主键,自增
- user_id: BIGINT,用户ID,可空(未登录访问)
- username: VARCHAR(50),用户名,可空
- operation: VARCHAR(50),操作类型,可空
- method: VARCHAR(200),请求方法,可空
- request_url: VARCHAR(255),请求URL,可空
- request_method: VARCHAR(10),请求方式(GET、POST等),可空
- request_params: TEXT,请求参数,可空
- request_ip: VARCHAR(64),请求IP,可空
- response_code: INT,响应状态码,可空
- response_data: TEXT,响应数据,可空
- cost_time: BIGINT,耗时(毫秒),可空
- created_at: DATETIME,创建时间,非空,默认当前时间
12. 内容操作日志表(content_operation_logs)
- id: BIGINT,主键,自增
- content_id: BIGINT,内容ID,外键→contents.id,非空
- operation_type: ENUM('UPLOAD_IMAGES', 'UPLOAD_VIDEO', 'UPLOAD_COVER', 'UPDATE_IMAGES', 'UPDATE_VIDEO', 'UPDATE_COVER'),操作类型,非空
- operation_status: ENUM('PROCESSING', 'COMPLETED', 'FAILED'),操作状态,非空
- total_operations: INT,总操作数,非空
- completed_operations: INT,已完成操作数,默认0
- failed_operations: JSON,失败的操作详情,可空
- error_message: TEXT,错误信息,可空
- started_at: TIMESTAMP,操作开始时间,非空,默认当前时间
- completed_at: TIMESTAMP,操作完成时间,可空
- created_by: BIGINT,操作创建者ID,外键→users.id,非空
索引设计
用户表(users)索引
-- 主键索引
PRIMARY KEY (id)
-- 唯一索引(必需)
CREATE UNIQUE INDEX idx_users_username ON users(username);
CREATE UNIQUE INDEX idx_users_email ON users(email);
用户画像表(user_profiles)索引
-- 主键索引
PRIMARY KEY (id)
-- 唯一外键索引(必需)
CREATE UNIQUE INDEX idx_user_profiles_user_id ON user_profiles(user_id);
验证码表索引
-- 验证码验证专用索引
CREATE INDEX idx_verification_core ON verification_codes(email, token, purpose, is_used, expires_at);
-- 防重复发送索引
CREATE INDEX idx_verification_recent ON verification_codes(email, purpose, created_at);
内容表(contents)索引
-- 主键索引
PRIMARY KEY (id)
-- 基础查询索引
CREATE INDEX idx_contents_user_id ON contents(user_id);
CREATE INDEX idx_contents_created_at ON contents(created_at DESC);
CREATE INDEX idx_contents_like_count ON contents(like_count DESC);
-- 推荐系统核心索引
CREATE INDEX idx_contents_published_created ON contents(is_published, created_at DESC);
内容特征表(content_features)索引
-- 主键索引
PRIMARY KEY (id)
-- 唯一外键索引(必需)
CREATE UNIQUE INDEX idx_content_features_content_id ON content_features(content_id);
-- 任务处理索引(核心功能)
CREATE INDEX idx_content_features_task_status ON content_features(task_status, created_at);
图片表(images)索引
-- 主键索引
PRIMARY KEY (id)
-- 内容关联索引(必需)
CREATE INDEX idx_images_content_id ON images(content_id);
视频表(videos)索引
-- 主键索引
PRIMARY KEY (id)
-- 内容关联索引(必需)
CREATE INDEX idx_videos_content_id ON videos(content_id);
-- 主键索引
PRIMARY KEY (id)
-- 内容评论索引(核心功能)
CREATE INDEX idx_comments_content_id ON comments(content_id);
CREATE INDEX idx_comments_user_id ON comments(user_id);
点赞表(likes)索引
-- 主键索引
PRIMARY KEY (id)
-- 防重复点赞索引(必需)
CREATE UNIQUE INDEX idx_likes_user_target_type ON likes(user_id, target_id, target_type);
-- 目标点赞统计索引(核心功能)
CREATE INDEX idx_likes_target_type ON likes(target_id, target_type);
用户行为记录表(user_behaviors)索引
-- 主键索引
PRIMARY KEY (id)
-- 推荐系统核心索引
CREATE INDEX idx_user_behaviors_user_type ON user_behaviors(user_id, behavior_type);
CREATE INDEX idx_user_behaviors_content_type ON user_behaviors(content_id, behavior_type);
系统日志表(sys_logs)索引
-- 主键索引
PRIMARY KEY (id)
-- 基础查询索引
CREATE INDEX idx_sys_logs_created_at ON sys_logs(created_at DESC);
内容操作日志表(content_operation_logs)索引
-- 主键索引
PRIMARY KEY (id)
-- 内容操作索引(核心功能)
CREATE INDEX idx_content_operation ON content_operation_logs(content_id, operation_type);
-- 状态时间索引(监控查询)
CREATE INDEX idx_status_time ON content_operation_logs(operation_status, started_at);
-- 用户操作索引(用户历史查询)
CREATE INDEX idx_user_operations ON content_operation_logs(created_by, started_at);
Elasticsearch索引结构
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"properties": {
"content_id": { "type": "long" },
"text_content": {
"type": "text",
"analyzer": "ik_smart"
},
"title": {
"type": "text",
"analyzer": "ik_smart",
"fields": {
"keyword": { "type": "keyword" }
}
},
"created_at": { "type": "date" }
}
}
}
评论区