mi-assessment/docs/数据库设计文档.md
2026-03-18 11:53:46 +08:00

26 KiB
Raw Blame History

学业邑规划 - 数据库设计文档

一、设计说明

1.1 数据库信息

  • 数据库类型SQL Server 2022
  • 字符集UTF-8
  • 排序规则Chinese_PRC_CI_AS

1.2 命名规范

  • 表名snake_case 命名,如 usersassessment_records
  • 字段名PascalCase 命名,如 UserIdCreateTime
  • 主键:Idbigint 自增)
  • 外键:表名Id,如 UserIdOrderId
  • 时间字段:CreateTimeUpdateTime
  • 状态字段:Status
  • 软删除:IsDeletedbit

1.3 SQL 脚本位置

  • 业务数据库:server/MiAssessment/scripts/init_business_db.sql
  • 管理后台数据库:server/MiAssessment/scripts/init_admin_db.sql

1.3 通用字段

每张业务表包含以下通用字段:

字段 类型 说明
Id bigint 主键,自增
CreateTime datetime2 创建时间
UpdateTime datetime2 更新时间
IsDeleted bit 软删除标记默认0

二、表结构设计

2.1 用户模块

2.1.1 users用户表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
Uid nvarchar(6) - 用户UID6位数字
OpenId nvarchar(64) - 微信OpenId
UnionId nvarchar(64) - 微信UnionId
GzhOpenId nvarchar(64) - 公众号OpenId
Phone nvarchar(20) - 手机号
Nickname nvarchar(50) - 昵称
Avatar nvarchar(500) - 头像URL
UserLevel int 1 用户等级1普通用户 2合伙人 3渠道合伙人
ParentUserId bigint - 上级用户ID
InviteCode nvarchar(10) - 用户专属邀请码
Balance decimal(10,2) 0 可提现余额
TotalIncome decimal(10,2) 0 累计收益
WithdrawnAmount decimal(10,2) 0 已提现金额
Status int 1 状态0禁用 1正常
IsTest int 0 是否测试用户
LastLoginTime datetime2 - 最后登录时间
LastLoginIp nvarchar(50) - 最后登录IP
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • UK_users_uid (Uid) UNIQUE
  • UK_users_open_id (OpenId) UNIQUE
  • IX_users_phone (Phone)
  • IX_users_parent_user_id (ParentUserId)
  • IX_users_user_level (UserLevel)

2.1.2 user_refresh_tokens刷新令牌表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
UserId bigint - 用户ID
TokenHash nvarchar(256) - Token哈希值
ExpiresAt datetime2 - 过期时间
CreatedAt datetime2 GETDATE() 创建时间
CreatedByIp nvarchar(50) - 创建IP
RevokedAt datetime2 - 撤销时间
RevokedByIp nvarchar(50) - 撤销IP
ReplacedByToken nvarchar(256) - 替换Token

2.1.3 user_login_logs登录日志表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
UserId bigint - 用户ID
LoginType nvarchar(20) - 登录类型
LoginIp nvarchar(50) - 登录IP
UserAgent nvarchar(500) - 用户代理
Platform nvarchar(20) - 平台
Status int 1 状态0失败 1成功
FailReason nvarchar(200) - 失败原因
CreateTime datetime2 GETDATE() 创建时间

2.2 内容管理模块

2.2.1 banners轮播图表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
Title nvarchar(100) - 标题
ImageUrl nvarchar(500) - 图片URL
LinkType int 0 跳转类型0无 1内部页面 2外部链接 3小程序
LinkUrl nvarchar(500) - 跳转地址
AppId nvarchar(50) - 小程序AppId
Sort int 0 排序,越大越靠前
Status int 1 状态0禁用 1启用
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

2.2.2 promotions宣传图表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
Title nvarchar(100) - 标题
ImageUrl nvarchar(500) - 图片URL
Position int 1 位置1首页底部 2团队页
Sort int 0 排序
Status int 1 状态0禁用 1启用
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

2.3 测评模块

2.3.1 AssessmentType测评类型表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
Name nvarchar(50) - 测评名称
Code nvarchar(50) - 测评编码,如 MI多元智能
ImageUrl nvarchar(500) - 入口图片
IntroContent nvarchar(max) - 介绍内容(富文本/图片)
Price decimal(10,2) 0 价格
QuestionCount int 80 题目数量
Sort int 0 排序
Status int 1 状态0已下线 1已上线 2即将上线
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

2.3.2 Question题目表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
AssessmentTypeId bigint - 测评类型ID
QuestionNo int - 题号
Content nvarchar(1000) - 题目内容
Sort int 0 排序
Status int 1 状态0禁用 1启用
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • IX_Question_AssessmentTypeId (AssessmentTypeId)
  • UK_Question_TypeNo (AssessmentTypeId, QuestionNo) UNIQUE

2.3.3 ReportCategory报告分类表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
AssessmentTypeId bigint - 测评类型ID
ParentId bigint 0 父分类ID0为顶级
Name nvarchar(50) - 分类名称
Code nvarchar(50) - 分类编码
CategoryType int - 分类类型1八大智能 2个人特质 3细分能力 4先天学习 5学习能力 6大脑类型 7性格类型 8未来能力
ScoreRule int 1 计分规则1累加(1-10分) 2二值(0/1分)
Sort int 0 排序
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • IX_ReportCategory_AssessmentTypeId (AssessmentTypeId)
  • IX_ReportCategory_ParentId (ParentId)

2.3.4 QuestionCategoryMapping题目分类映射表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
QuestionId bigint - 题目ID
CategoryId bigint - 分类ID
CreateTime datetime2 GETDATE() 创建时间

索引

  • IX_QuestionCategoryMapping_QuestionId (QuestionId)
  • IX_QuestionCategoryMapping_CategoryId (CategoryId)
  • UK_QuestionCategoryMapping (QuestionId, CategoryId) UNIQUE

2.3.5 ReportConclusion报告结论表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
CategoryId bigint - 分类ID
ConclusionType int - 结论类型1最强 2较强 3较弱 4最弱
Title nvarchar(100) - 结论标题
Content nvarchar(max) - 结论内容(富文本)
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • IX_ReportConclusion_CategoryId (CategoryId)

2.4 测评记录模块

2.4.1 AssessmentRecord测评记录表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
UserId bigint - 用户ID
OrderId bigint - 订单ID
AssessmentTypeId bigint - 测评类型ID
Name nvarchar(50) - 测评人姓名
Phone nvarchar(20) - 手机号
Gender int - 性别1男 2女
Age int - 年龄
EducationStage int - 学业阶段1小学及以下 2初中 3高中 4大专 5本科 6研究生及以上
Province nvarchar(50) - 省份
City nvarchar(50) - 城市
District nvarchar(50) - 区县
Status int 1 状态1待测评 2测评中 3生成中 4已完成
StartTime datetime2 - 开始答题时间
SubmitTime datetime2 - 提交答题时间
CompleteTime datetime2 - 报告生成完成时间
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • IX_AssessmentRecord_UserId (UserId)
  • IX_AssessmentRecord_OrderId (OrderId)
  • IX_AssessmentRecord_Status (Status)

2.4.2 AssessmentAnswer测评答案表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
RecordId bigint - 测评记录ID
QuestionId bigint - 题目ID
QuestionNo int - 题号
AnswerValue int - 答案值1-10
CreateTime datetime2 GETDATE() 创建时间

索引

  • IX_AssessmentAnswer_RecordId (RecordId)
  • UK_AssessmentAnswer (RecordId, QuestionId) UNIQUE

2.4.3 AssessmentResult测评结果表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
RecordId bigint - 测评记录ID
CategoryId bigint - 分类ID
Score decimal(10,2) - 得分
MaxScore decimal(10,2) - 满分
Percentage decimal(5,2) - 百分比
Rank int - 排名(同类型内)
StarLevel int - 星级1-5
CreateTime datetime2 GETDATE() 创建时间

索引

  • IX_AssessmentResult_RecordId (RecordId)
  • IX_AssessmentResult_CategoryId (CategoryId)

2.5 订单模块

2.5.1 orders订单表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
OrderNo nvarchar(32) - 订单编号
UserId bigint - 用户ID
OrderType int - 订单类型1测评订单 2学业规划订单
ProductId bigint - 商品ID测评类型ID/规划师ID
ProductName nvarchar(100) - 商品名称
Amount decimal(10,2) - 订单金额
PayAmount decimal(10,2) - 实付金额
PayType int - 支付方式1微信支付 2邀请码
InviteCodeId bigint - 使用的邀请码ID
Status int 1 状态1待支付 2已支付 3已完成 4退款中 5已退款 6已取消
PayTime datetime2 - 支付时间
TransactionId nvarchar(64) - 微信支付交易号
RefundTime datetime2 - 退款时间
RefundAmount decimal(10,2) - 退款金额
RefundReason nvarchar(500) - 退款原因
Remark nvarchar(500) - 备注
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • UK_orders_order_no (OrderNo) UNIQUE
  • IX_orders_user_id (UserId)
  • IX_orders_status (Status)
  • IX_orders_create_time (CreateTime)
  • IX_orders_order_type (OrderType)

2.5.2 order_notifies订单通知表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
OrderNo nvarchar(64) - 订单编号
TransactionId nvarchar(64) - 微信交易号
NotifyUrl nvarchar(500) - 通知URL
NonceStr nvarchar(64) - 随机字符串
PayTime datetime2 - 支付时间
PayAmount decimal(10,2) 0 支付金额
Status int 0 状态0待处理 1已处理
RetryCount int 0 重试次数
Attach nvarchar(100) - 附加数据
OpenId nvarchar(100) - 支付者OpenId
RawData nvarchar(max) - 原始数据
ErrorMessage nvarchar(500) - 错误信息
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间

2.6 学业规划模块

2.6.1 Planner规划师表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
Name nvarchar(50) - 姓名
Avatar nvarchar(500) - 头像
Introduction nvarchar(1000) - 简介
Price decimal(10,2) - 咨询价格
Sort int 0 排序
Status int 1 状态0禁用 1启用
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

2.6.2 PlannerBooking规划预约表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
UserId bigint - 用户ID
OrderId bigint - 订单ID
PlannerId bigint - 规划师ID
BookingDate date - 预约日期
BookingTime nvarchar(20) - 预约时间,如"15:00"
Name nvarchar(50) - 姓名
Phone nvarchar(20) - 手机号
Gender int - 性别1男 2女
Grade int - 年级1小学 2初中 3高中 4大专 5本科 6研究生及以上
MajorName nvarchar(100) - 专业名称(大专及以上)
ScoreChinese int - 语文成绩
ScoreMath int - 数学成绩
ScoreEnglish int - 英语成绩
ScorePhysics int - 物理成绩
ScoreChemistry int - 化学成绩
ScoreBiology int - 生物成绩
ScoreGeography int - 地理成绩
ScorePolitics int - 政治成绩
Status int 1 状态1待联系 2已联系 3已完成 4已取消
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • IX_PlannerBooking_UserId (UserId)
  • IX_PlannerBooking_PlannerId (PlannerId)
  • IX_PlannerBooking_BookingDate (BookingDate)

2.7 分销模块

2.7.1 InviteCode邀请码表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
Code nvarchar(10) - 邀请码5位大写字母
BatchNo nvarchar(32) - 批次号
AssignUserId bigint - 分配给的用户ID合伙人
AssignTime datetime2 - 分配时间
UseUserId bigint - 使用者用户ID
UseOrderId bigint - 使用的订单ID
UseTime datetime2 - 使用时间
Status int 1 状态1未分配 2已分配 3已使用
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • UK_InviteCode_Code (Code) UNIQUE
  • IX_InviteCode_AssignUserId (AssignUserId)
  • IX_InviteCode_Status (Status)

2.7.2 Commission佣金记录表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
UserId bigint - 获得佣金的用户ID
FromUserId bigint - 来源用户ID下级
OrderId bigint - 关联订单ID
OrderAmount decimal(10,2) - 订单金额
CommissionRate decimal(5,2) - 佣金比例如30.00表示30%
CommissionAmount decimal(10,2) - 佣金金额
Level int - 层级1直接下级 2间接下级
Status int 1 状态1待结算 2已结算
SettleTime datetime2 - 结算时间
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • IX_Commission_UserId (UserId)
  • IX_Commission_FromUserId (FromUserId)
  • IX_Commission_OrderId (OrderId)

2.7.3 Withdrawal提现记录表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
WithdrawalNo nvarchar(32) - 提现单号
UserId bigint - 用户ID
Amount decimal(10,2) - 提现金额
BeforeBalance decimal(10,2) - 提现前余额
AfterBalance decimal(10,2) - 提现后余额
Status int 1 状态1申请中 2提现中 3已提现 4已取消
AuditUserId bigint - 审核人ID
AuditTime datetime2 - 审核时间
AuditRemark nvarchar(500) - 审核备注
PayTime datetime2 - 打款时间
PayTransactionId nvarchar(64) - 打款交易号
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • UK_Withdrawal_WithdrawalNo (WithdrawalNo) UNIQUE
  • IX_Withdrawal_UserId (UserId)
  • IX_Withdrawal_Status (Status)

2.8 系统配置模块

2.8.1 configs系统配置表

字段 类型 必填 默认值 说明
Id bigint 自增 主键
ConfigKey nvarchar(100) - 配置键
ConfigValue nvarchar(max) - 配置值
ConfigType nvarchar(50) - 配置类型
Description nvarchar(500) - 描述
Sort int 0 排序
CreateTime datetime2 GETDATE() 创建时间
UpdateTime datetime2 GETDATE() 更新时间
IsDeleted bit 0 软删除

索引

  • UK_configs_key (ConfigKey) UNIQUE

预置配置项

ConfigKey ConfigType 说明
assessment_price price 测评价格
commission_rate_level1 commission 一级佣金比例
commission_rate_level2 commission 二级佣金比例
commission_rate_direct commission 无上级时直接佣金比例
withdraw_min_amount withdraw 最低提现金额
service_phone contact 客服电话
service_wechat contact 客服微信
user_agreement agreement 用户协议内容
privacy_policy agreement 隐私政策内容
about_us_content content 关于我们内容

三、ER关系图

┌─────────────┐     ┌─────────────────┐     ┌─────────────┐
│    User     │────<│      Order      │>────│ InviteCode  │
└─────────────┘     └─────────────────┘     └─────────────┘
      │                     │
      │                     │
      ▼                     ▼
┌─────────────┐     ┌─────────────────┐
│ Commission  │     │AssessmentRecord │
└─────────────┘     └─────────────────┘
      │                     │
      │                     │
      ▼                     ▼
┌─────────────┐     ┌─────────────────┐     ┌─────────────┐
│ Withdrawal  │     │AssessmentAnswer │     │AssessmentResult│
└─────────────┘     └─────────────────┘     └─────────────┘
                           │                       │
                           │                       │
                           ▼                       ▼
                    ┌─────────────┐         ┌─────────────┐
                    │  Question   │────────>│ReportCategory│
                    └─────────────┘         └─────────────┘
                           │                       │
                           │                       │
                           ▼                       ▼
                    ┌─────────────────────┐ ┌─────────────┐
                    │QuestionCategoryMapping│ │ReportConclusion│
                    └─────────────────────┘ └─────────────┘

四、核心业务关系说明

4.1 用户与分销关系

User.ParentUserId -> User.Id  (自关联,上下级关系)
Commission.UserId -> User.Id  (佣金归属)
Commission.FromUserId -> User.Id  (佣金来源)

4.2 测评流程关系

Order -> AssessmentRecord -> AssessmentAnswer -> Question
                         -> AssessmentResult -> ReportCategory -> ReportConclusion

4.3 题目与分类映射

Question <-> QuestionCategoryMapping <-> ReportCategory
(多对多关系:一道题可属于多个分类,一个分类包含多道题)

五、数据字典

5.1 用户等级 (UserLevel)

说明
1 普通用户
2 合伙人
3 渠道合伙人

5.2 订单类型 (OrderType)

说明
1 测评订单
2 学业规划订单

5.3 订单状态 (Order.Status)

说明
1 待支付
2 已支付
3 已完成
4 退款中
5 已退款
6 已取消

5.4 测评记录状态 (AssessmentRecord.Status)

说明
1 待测评
2 测评中
3 生成中
4 已完成

5.5 报告分类类型 (ReportCategory.CategoryType)

说明
1 八大智能
2 个人特质
3 细分能力
4 先天学习类型
5 学习关键能力
6 科学大脑类型
7 性格类型
8 未来发展能力

5.6 计分规则 (ReportCategory.ScoreRule)

说明
1 累加计分选项1-10对应1-10分
2 二值计分选项1-5得0分6-10得1分

5.7 结论类型 (ReportConclusion.ConclusionType)

说明
1 最强
2 较强
3 较弱
4 最弱

5.8 邀请码状态 (InviteCode.Status)

说明
1 未分配
2 已分配
3 已使用

5.9 提现状态 (Withdrawal.Status)

说明
1 申请中
2 提现中
3 已提现
4 已取消

5.10 学业阶段 (EducationStage)

说明
1 小学及以下
2 初中
3 高中
4 大专
5 本科
6 研究生及以上

六、表汇总

序号 表名 说明 模块
1 users 用户表 用户模块
2 user_refresh_tokens 刷新令牌表 用户模块
3 user_login_logs 登录日志表 用户模块
4 banners 轮播图表 内容管理
5 promotions 宣传图表 内容管理
6 assessment_types 测评类型表 测评模块
7 questions 题目表 测评模块
8 report_categories 报告分类表 测评模块
9 question_category_mappings 题目分类映射表 测评模块
10 report_conclusions 报告结论表 测评模块
11 orders 订单表 订单模块
12 order_notifies 订单通知表 订单模块
13 assessment_records 测评记录表 测评记录
14 assessment_answers 测评答案表 测评记录
15 assessment_results 测评结果表 测评记录
16 planners 规划师表 学业规划
17 planner_bookings 规划预约表 学业规划
18 invite_codes 邀请码表 分销模块
19 commissions 佣金记录表 分销模块
20 withdrawals 提现记录表 分销模块
21 configs 系统配置表 系统配置

共计 21 张业务表


七、初始化数据

7.1 系统配置初始数据

INSERT INTO configs (ConfigKey, ConfigValue, ConfigType, Description)
VALUES 
('assessment_price', '99.00', 'price', N'测评价格'),
('commission_rate_level1', '0.30', 'commission', N'一级分销佣金比例'),
('commission_rate_level2', '0.10', 'commission', N'二级分销佣金比例'),
('commission_rate_direct', '0.40', 'commission', N'无上级时直接佣金比例'),
('withdraw_min_amount', '10.00', 'withdraw', N'最低提现金额'),
('service_phone', '400-000-0000', 'contact', N'客服电话'),
('service_wechat', '', 'contact', N'客服微信'),
('user_agreement', '', 'agreement', N'用户协议内容'),
('privacy_policy', '', 'agreement', N'隐私政策内容'),
('about_us_content', '', 'content', N'关于我们内容');

7.2 测评类型初始数据

INSERT INTO assessment_types (Name, Code, Price, QuestionCount, Sort, Status)
VALUES (N'多元智能测评', 'MI_ASSESSMENT', 99.00, 80, 1, 1);

八、备注

8.1 性能优化建议

  1. 对高频查询字段建立索引
  2. 大文本字段(如报告结论)考虑分表存储
  3. 历史数据定期归档

8.2 扩展预留

  1. User 表预留 UnionId 字段,支持多端打通
  2. Order 表预留 Remark 字段,支持业务扩展
  3. SystemConfig 表支持动态配置扩展

8.3 安全考虑

  1. 手机号等敏感信息加密存储
  2. 支付相关字段记录完整交易信息
  3. 软删除保留数据可追溯