简易版小红书系统数据库设计(优化版)

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,创建时间,非空,默认当前时间

8. 评论表(comments)

  • 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);

评论表(comments)索引

-- 主键索引
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" }
    }
  }
}