在上一篇中,我们探讨了教育培训机构在学员管理中面临的痛点,并展望了一个全面、高效的学员管理系统应具备的核心功能模块。我们提到,要实现这些复杂而精细的功能,一个健壮的后端数据结构是整个系统的基石。
今天,我们将深入系统的“地基”——数据库表结构设计。一个清晰、合理的数据模型能确保信息的完整性、一致性,并为上层应用的灵活扩展打下坚实基础。
我们根据学员从潜在客户到最终毕业的全生命周期,设计了一系列相互关联的数据表。
核心业务实体与数据模型
为了更好地管理学员的全生命周期,我们将系统拆分为以下几个核心业务实体,并为每个实体设计了对应的数据表:
1. 学员信息:Students
表
这是系统的核心,记录学员的基本档案。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
student_id | INT | 学员ID (主键) | 唯一标识 |
name | VARCHAR(100) | 姓名 | |
gender | ENUM | 性别 (男/女/未知) | |
date_of_birth | DATE | 出生日期 | 用于计算年龄 |
contact_phone | VARCHAR(20) | 联系电话 | 学员本人电话 |
contact_email | VARCHAR(100) | 联系邮箱 | |
id_card_number | VARCHAR(30) | 身份证号码 | 可选,用于身份验证 |
address | VARCHAR(255) | 家庭住址 | |
source_channel | VARCHAR(100) | 来源渠道 (如:线上广告,地推,转介绍) | 用于统计分析 |
current_status | ENUM | 当前状态 (潜在, 在读, 休学, 退费, 毕业) | 核心状态,通过状态管理流程更新 |
created_at | DATETIME | 创建时间 | |
updated_at | DATETIME | 最后更新时间 | |
notes | TEXT | 备注信息 |
2. 家长信息:Parents
表
考虑到学员的年龄和联系方式多样性,单独的家长表能更好地管理家庭联系人。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
parent_id | INT | 家长ID (主键) | 唯一标识 |
student_id | INT | 学员ID (外键) | 关联到 Students 表 |
parent_name | VARCHAR(100) | 姓名 | |
relationship | VARCHAR(50) | 与学员关系 (如:父亲,母亲,祖父) | |
phone_number | VARCHAR(20) | 联系电话 | |
wechat_id | VARCHAR(100) | 微信ID | |
email | VARCHAR(100) | 邮箱 | |
is_primary | BOOLEAN | 是否主要联系人 | 默认为 False,一个学员可设一个主要联系人 |
created_at | DATETIME | 创建时间 | |
updated_at | DATETIME | 最后更新时间 |
3. 销售人员管理:SalesPersonnel
表
为了更灵活地管理销售团队,我们将其从通用用户角色中分离,并加入了职位和离职日期等字段,为后续的客户继承打下基础。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
sales_id | INT | 销售人员ID (主键) | 唯一标识 |
user_id | INT | 用户ID (外键) | 关联到 Users 表,实现登录和系统操作权限 |
name | VARCHAR(100) | 姓名 | 销售人员姓名 |
phone_number | VARCHAR(20) | 联系电话 | |
email | VARCHAR(100) | 邮箱 | |
position | VARCHAR(50) | 职位 (如:销售顾问, 销售经理) | 用于权限和管理层级 |
hire_date | DATE | 入职日期 | |
leave_date | DATE | 离职日期 | 如果离职,记录离职日期 |
is_active | BOOLEAN | 是否在职 | 离职后设为 False |
created_at | DATETIME | 创建时间 | |
updated_at | DATETIME | 最后更新时间 | |
notes | TEXT | 备注 |
4. 潜在客户管理:Leads
表
这是CRM的核心,用于追踪和转化潜在客户。现在,assigned_sales_id
将直接指向我们的 SalesPersonnel
表。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
lead_id | INT | 潜在学员ID (主键) | 唯一标识 |
name | VARCHAR(100) | 姓名 | |
contact_phone | VARCHAR(20) | 联系电话 | |
contact_email | VARCHAR(100) | 联系邮箱 | |
source_channel | VARCHAR(100) | 来源渠道 | 同 Students 表的 source_channel |
consult_date | DATE | 咨询日期 | 首次咨询日期 |
follow_up_status | ENUM | 跟进状态 (新咨询, 首次沟通, 意向明确, 待报名, 已流失, 已转化) | 核心跟进状态 |
intended_courses | VARCHAR(255) | 意向课程 | 逗号分隔的课程名称 |
assigned_sales_id | INT | 分配销售人员ID (外键) | 关联到 SalesPersonnel 表 |
latest_follow_up_at | DATETIME | 最近跟进时间 | |
created_at | DATETIME | 创建时间 | |
updated_at | DATETIME | 最后更新时间 | |
notes | TEXT | 备注 | |
converted_to_student_id | INT | 转化后学员ID (外键) | 如果转化成功,关联到 Students 表 |
5. 跟进记录:FollowUpRecords
表
记录每次与潜在客户或学员的沟通,确保跟进历史完整。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
record_id | INT | 记录ID (主键) | 唯一标识 |
lead_id | INT | 潜在学员ID (外键) | 可为空,如果是非潜在学员的跟进 |
student_id | INT | 学员ID (外键) | 可为空,如果是潜在学员的跟进 |
follow_up_date | DATETIME | 跟进日期 | |
follow_up_method | VARCHAR(50) | 跟进方式 (电话, 微信, 面谈, 短信) | |
follow_up_content | TEXT | 跟进内容 | 详细沟通记录 |
next_follow_up_plan | TEXT | 下次跟进计划 | |
follow_up_by_user_id | INT | 跟进人ID (外键) | 关联到 Users 表 (记录操作该记录的系统用户) |
created_at | DATETIME | 创建时间 |
6. 报名信息:Enrollments
表
记录学员报名课程的详细情况,包括费用和合同状态。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
enrollment_id | INT | 报名ID (主键) | 唯一标识 |
student_id | INT | 学员ID (外键) | 关联到 Students 表 |
course_id | INT | 课程ID (外键) | 关联到 Courses 表 |
class_id | INT | 班级ID (外键) | 关联到 Classes 表 |
enrollment_date | DATE | 报名日期 | |
total_fee | DECIMAL(10,2) | 总费用 | |
paid_amount | DECIMAL(10,2) | 已付金额 | |
payment_method | VARCHAR(50) | 支付方式 (微信支付, 支付宝, 银行卡, 现金) | |
contract_number | VARCHAR(100) | 合同编号 | |
contract_status | ENUM | 合同状态 (未签订, 已签订, 作废) | |
remaining_lessons | INT | 剩余课时 | 报名时初始值,每次考勤扣减 |
enrollment_status | ENUM | 报名状态 (生效中, 已结束, 已退费, 已转班) | |
created_by_user_id | INT | 操作人ID (外键) | 关联到 Users 表 |
created_at | DATETIME | 创建时间 | |
updated_at | DATETIME | 最后更新时间 |
7. 学员状态变更:StudentStatusChanges
表
追踪学员状态的历史变化,并支持审批流程。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
change_id | INT | 变更ID (主键) | 唯一标识 |
student_id | INT | 学员ID (外键) | 关联到 Students 表 |
enrollment_id | INT | 报名ID (外键) | 如涉及到具体报名课程的变更 |
old_status | ENUM | 原状态 | |
new_status | ENUM | 新状态 | |
change_reason | TEXT | 变更原因 | |
request_date | DATETIME | 申请日期 | |
requested_by_user_id | INT | 申请人ID (外键) | 关联到 Users 表 |
approval_status | ENUM | 审批状态 (待审批, 已批准, 已拒绝) | |
approved_by_user_id | INT | 审批人ID (外键) | 关联到 Users 表 |
approval_date | DATETIME | 审批日期 | |
approval_notes | TEXT | 审批意见 | |
created_at | DATETIME | 创建时间 |
8. 考勤记录:AttendanceRecords
表
记录学员每次上课的出勤情况,确保课时消耗的准确性。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
attendance_id | INT | 考勤ID (主键) | 唯一标识 |
student_id | INT | 学员ID (外键) | 关联到 Students 表 |
class_schedule_id | INT | 课程安排ID (外键) | 关联到 ClassSchedules 表(假设有此表) |
attendance_date | DATE | 考勤日期 | |
lesson_number | INT | 课时序号 | 如第1节课,第2节课 |
attendance_status | ENUM | 考勤状态 (出勤, 缺勤, 迟到, 请假) | |
notes | TEXT | 备注 | 如迟到原因,请假类型 |
recorded_by_user_id | INT | 记录人ID (外键) | 关联到 Users 表 |
created_at | DATETIME | 创建时间 | |
updated_at | DATETIME | 最后更新时间 | 对于补录操作 |
9. 学员评价:StudentReviews
表
收集和管理学员对课程和教师的反馈,助力教学质量提升。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
review_id | INT | 评价ID (主键) | 唯一标识 |
student_id | INT | 学员ID (外键) | 关联到 Students 表 |
course_id | INT | 课程ID (外键) | 关联到 Courses 表 |
teacher_id | INT | 教师ID (外键) | 关联到 Users 表(角色为教师) |
rating_overall | INT | 整体评分 (1-5) | |
rating_course | INT | 课程评分 (1-5) | |
rating_teacher | INT | 教师评分 (1-5) | |
comment_text | TEXT | 评价内容 | |
review_date | DATETIME | 评价日期 | |
replied_by_user_id | INT | 回复人ID (外键) | 关联到 Users 表 |
reply_content | TEXT | 回复内容 | |
reply_date | DATETIME | 回复日期 |
10. 续费提醒:RenewalReminders
表
自动化生成续费提醒,确保关键客户的及时跟进。现在,负责人明确指向 SalesPersonnel
。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
reminder_id | INT | 提醒ID (主键) | 唯一标识 |
student_id | INT | 学员ID (外键) | 关联到 Students 表 |
enrollment_id | INT | 报名ID (外键) | 关联到 Enrollments 表,针对特定报名 |
reminder_type | ENUM | 提醒类型 (课时不足, 合同到期) | |
trigger_value | INT | 触发值 | 如剩余课时数,或到期前天数 |
due_date | DATE | 预计到期/续费日期 | |
assigned_to_sales_id | INT | 负责人销售人员ID (外键) | 关联到 SalesPersonnel 表 |
reminder_status | ENUM | 提醒状态 (待处理, 已处理, 已忽略) | |
reminded_at | DATETIME | 提醒生成时间 | |
processed_at | DATETIME | 处理时间 | |
notes | TEXT | 备注 |
11. 潜在客户继承记录:LeadInheritanceRecords
表
这是一个非常重要的管理表,它解决了销售人员离职后潜在客户资产的平稳移交问题,保证业务连续性。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
inheritance_id | INT | 继承记录ID (主键) | 唯一标识 |
original_sales_id | INT | 原销售人员ID (外键) | 关联到 SalesPersonnel 表 |
new_sales_id | INT | 新销售人员ID (外键) | 关联到 SalesPersonnel 表 |
inheritance_date | DATETIME | 继承日期 | 执行继承操作的时间 |
inherited_leads_count | INT | 继承的潜在客户数量 | |
operation_by_user_id | INT | 操作人ID (外键) | 关联到 Users 表,记录谁执行的继承操作 |
notes | TEXT | 备注 | 继承原因或特殊说明 |
辅助表(系统层面)
这些表是整个系统运行的基础,为核心业务表提供支撑数据。
12. 用户表:Users
表
管理所有能登录系统的人员。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
user_id | INT | 用户ID (主键) | 唯一标识 |
username | VARCHAR(50) | 用户名 | 登录账号 |
password_hash | VARCHAR(255) | 密码哈希 | |
role | ENUM | 角色 (管理员, 教务, 教师) | 销售人员的销售属性由 SalesPersonnel 表定义,但他们也需在此表有登录权限 |
name | VARCHAR(100) | 姓名 | 与 SalesPersonnel.name 或其他具体人员表保持一致 |
email | VARCHAR(100) | 邮箱 | |
phone | VARCHAR(20) | 电话 | |
is_active | BOOLEAN | 是否活跃 | |
created_at | DATETIME | 创建时间 | |
updated_at | DATETIME | 最后更新时间 |
13. 课程表:Courses
表
定义机构提供的所有课程。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
course_id | INT | 课程ID (主键) | 唯一标识 |
course_name | VARCHAR(100) | 课程名称 | |
description | TEXT | 课程描述 | |
total_lessons | INT | 总课时数 | |
price | DECIMAL(10,2) | 课程价格 | |
is_active | BOOLEAN | 是否活跃 |
14. 班级表:Classes
表
组织学员上课的具体班级。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
class_id | INT | 班级ID (主键) | 唯一标识 |
class_name | VARCHAR(100) | 班级名称 | |
course_id | INT | 课程ID (外键) | 关联到 Courses 表 |
teacher_id | INT | 班主任ID (外键) | 关联到 Users 表(角色为教师) |
start_date | DATE | 开班日期 | |
end_date | DATE | 结课日期 | |
capacity | INT | 班级容量 | |
current_students | INT | 当前学员数 |
15. 课程安排表:ClassSchedules
表
班级的具体上课时间和地点。
字段名 | 类型 | 描述 | 备注 |
---|---|---|---|
schedule_id | INT | 安排ID (主键) | 唯一标识 |
class_id | INT | 班级ID (外键) | 关联到 Classes 表 |
lesson_date | DATE | 上课日期 | |
start_time | TIME | 开始时间 | |
end_time | TIME | 结束时间 | |
teacher_id | INT | 授课教师ID (外键) | 关联到 Users 表(角色为教师) |
classroom | VARCHAR(50) | 教室 |
总结
通过上述详细的表结构设计,我们为学员管理系统的构建奠定了坚实的基础。每一个表都承载着特定的业务信息,并通过外键关联,使得不同模块之间的数据能够流畅地交互和查询。这种精细化的设计不仅能解决当前面临的“痛点”,也为未来系统的扩展和功能迭代预留了空间。
在下一篇博客中,我们将结合低代码平台的特点,探讨如何将这些数据模型映射到具体的页面和操作中,实现我们在第一篇中构想的各项功能,敬请期待!