14 KiB
school_campus(校区表)
CREATE TABLE school_campus (
id int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
campus_name varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '校区名称',
campus_address varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '校区地址',
campus_preview_image varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '校区预览图,存储图片路径',
campus_coordinates varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '校区坐标,格式为经度,纬度',
campus_introduction text COLLATE utf8mb4_general_ci COMMENT '校区介绍',
campus_status tinyint DEFAULT '1' COMMENT '校区状态:0-禁用,1-启用',
create_time timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '校区创建时间',
update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '校区更新时间',
delete_time int NOT NULL DEFAULT '0' COMMENT '逻辑删除字段,0表示未删除,非空表示已删除',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='校区表';
做为基础数据,下面一级就是场地。
school_venue(场地表)
CREATE TABLE school_venue (
id int NOT NULL AUTO_INCREMENT COMMENT '场地编号',
campus_id int NOT NULL COMMENT '校区ID',
venue_name varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '场地名称',
capacity int NOT NULL COMMENT '场地可容纳人数上限',
availability_status tinyint(1) NOT NULL COMMENT '场地可用状态: 1-可用, 0-不可用',
time_range_type enum('range','fixed','all') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '场地可用时间范围类型: range-范围类型, fixed-固定时间范围类型',
time_range_start varchar(8) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '范围类型的开始时间',
time_range_end varchar(8) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '范围类型的结束时间',
fixed_time_ranges json DEFAULT NULL COMMENT '固定时间范围类型的可用时间, 存储为JSON数组',
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
deleted_at int DEFAULT '0' COMMENT '逻辑删除时间',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='场地表';
场地表做为课程的容器,主要是用来限制人数,时间,和可用状态。如果场地被设置为不可用,那么该场地下的所有课程都会被取消。其中time_range_type字段决定这个时间范围是范围类型还是固定时间类型。
这个字段配合time_range_start,time_range_end,fixed_time_ranges这三个字段,可以确定这个场地可用的时间范围。
school_course(课程表)
CREATE TABLE school_course (
id int NOT NULL AUTO_INCREMENT COMMENT '课程编号',
course_name varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '课程名称',
course_type varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '课程类型',
duration int NOT NULL COMMENT '课程时长',
session_count int NOT NULL COMMENT '课时数量',
single_session_count int NOT NULL DEFAULT '0' COMMENT '单次消课数量',
gift_session_count int NOT NULL DEFAULT '0' COMMENT '赠送课时数量',
price decimal(10,2) NOT NULL COMMENT '课程价格',
internal_reminder int NOT NULL COMMENT '内部提醒课时',
customer_reminder int NOT NULL COMMENT '客户提醒课时',
remarks text COLLATE utf8mb4_general_ci COMMENT '课程备注',
created_at int DEFAULT '0' COMMENT '创建时间',
updated_at int DEFAULT '0' COMMENT '更新时间',
deleted_at int DEFAULT '0' COMMENT '逻辑删除时间',
contract_id int DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='课程表';
课程表主要是用户上课的内容,在排课阶段主要是看用户排的是什么课在哪个课程安排里展示。课程表和课程安排表是一对多的关系,一个课程可以有多个课程安排。但是在一个周期范围内,这个安排的数量始终是不会超过课程表的课时数量的。
举例来说single_session_count字段表示一次课程安排要消耗多少课时,如果值为 2,session_count课时数量是 10,那么这次课程周期一个用户只能排 5 次课程安排。
school_course_schedule(课程安排表)
CREATE TABLE school_course_schedule (
id int NOT NULL AUTO_INCREMENT COMMENT '课程安排编号',
campus_id int NOT NULL COMMENT '校区ID',
venue_id int NOT NULL COMMENT '场地ID',
course_date date NOT NULL COMMENT '上课日期',
time_slot varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '上课时段',
course_id int NOT NULL COMMENT '课程ID',
coach_id int NOT NULL COMMENT '上课教练ID',
participants json DEFAULT NULL COMMENT '参与人员列表,存储为JSON数组,包含学员ID和来源信息',
student_ids json DEFAULT NULL COMMENT '上课学生ID列表,存储为JSON数组',
available_capacity int DEFAULT NULL COMMENT '根据场地容量判断的可安排学员位置数量',
status enum('pending','upcoming','ongoing','completed') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'pending' COMMENT '课程状态: pending-待开始, upcoming-即将开始, ongoing-进行中, completed-已结束',
auto_schedule tinyint(1) DEFAULT NULL COMMENT '是否自动排课1是0否',
created_by enum('manual','system') COLLATE utf8mb4_general_ci NOT NULL COMMENT '课程安排创建方式: manual-人员安排, system-系统创建',
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
deleted_at int DEFAULT '0' COMMENT '逻辑删除时间',
assistant_ids varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '助教ID列表(逗号分隔)',
education_id int DEFAULT NULL COMMENT '教务ID',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=120 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='课程安排表';
这个表是在学校层面针对教室的情况做的课程安排情况表。这个表和课程表是一对多的关系,一个课程可以有多个课程安排。而且支持一次配置后自动排课的功能。这个表的主要作用是记录课程安排的情况,包括上课日期,时间段,教练,参与人员等信息。
school_person_course_schedule(人员与课程安排关系表)
CREATE TABLE school_person_course_schedule (
id int NOT NULL AUTO_INCREMENT COMMENT '关系编号',
resources_id int DEFAULT NULL COMMENT '资源ID',
person_id int DEFAULT NULL COMMENT '人员ID',
student_id int DEFAULT NULL COMMENT '学员ID',
person_type enum('student','customer_resource') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '人员类型: student-正式学员, customer_resource-客户资源,teacher教练',
schedule_id int NOT NULL COMMENT '课程安排ID',
course_date date NOT NULL COMMENT '上课日期',
schedule_type tinyint(1) DEFAULT NULL COMMENT '课程安排类型1临时课2固定课',
course_type tinyint(1) DEFAULT NULL COMMENT '课程类型1加课2补课3 等待位',
time_slot varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '上课时段',
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
deleted_at int DEFAULT '0' COMMENT '删除',
status tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态0待上课1已上课2请假',
remark varchar(512) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '请假备注',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='人员与课程安排关系表';
这个表记录着学员和school_course_schedule中安排的关系。这里面有几种情况 1.正式的付费学员上课(临时的)2.临时的体验学员上课 3.正式的付费学员固定这个时段上课的。
然后这个课程安排的属性还有是正常消耗课时的,还是补课、还是送课。还是这个教室没有位置单纯是等待的课程。
school_student_courses(学员课程表)
CREATE TABLE school_student_courses (
id int NOT NULL AUTO_INCREMENT COMMENT '记录编号',
student_id int NOT NULL COMMENT '学员ID',
course_id int NOT NULL COMMENT '课程ID',
total_hours int NOT NULL COMMENT '总正式课时数',
gift_hours int DEFAULT '0' COMMENT '赠送课时数',
start_date date NOT NULL COMMENT '课程开始日期',
end_date date NOT NULL COMMENT '课程结束日期',
use_total_hours int NOT NULL DEFAULT '0' COMMENT '已使用课包课时数',
use_gift_hours int NOT NULL DEFAULT '0' COMMENT '已使用课包赠送课时数',
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
single_session_count int DEFAULT NULL COMMENT '单次消课数量',
status tinyint(1) DEFAULT NULL COMMENT '课程状态1有效2过期3等待期4延期',
resource_id int DEFAULT NULL COMMENT '资源ID',
main_coach_id int DEFAULT NULL COMMENT '主教练ID',
assistant_ids varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '助教ID列表(逗号分隔)',
education_id int DEFAULT NULL COMMENT '教务ID',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='学员课程表';
这个是一个学员在一个课程周期里可以上课的课时记录以及课时有效期记录,在这个周期范围内为这个学员服务的教练和助教信息。这个表的主要作用是记录学员的课程信息,包括总课时数,赠送课时数,开始和结束日期等信息。这个表和人员与课程安排关系表是一对多的关系,一个学员可以有多个课程安排。
school_student_course_usage(学员课程使用记录表)
CREATE TABLE school_student_course_usage (
id int NOT NULL AUTO_INCREMENT COMMENT '记录编号',
student_course_id int NOT NULL COMMENT '学员课程ID(关联到student_courses表)',
used_hours int NOT NULL COMMENT '本次使用的课时数',
usage_date date NOT NULL COMMENT '课时使用日期',
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='学员课时消费记录表';
这个表记录了学员在某个课程周期内使用的课时数,这个表和学员课程表是一对多的关系,一个学员可以有多个课时使用记录。
school_class(班级表)
CREATE TABLE school_class (
id int NOT NULL AUTO_INCREMENT COMMENT '班级编号',
campus_id int NOT NULL COMMENT '校区ID',
campus_name varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '校区名称',
class_name varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '班级名称',
head_coach varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '班继续
级主教练',
age_group varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '班级授课年龄段',
class_type varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '班级类型',
assistant_coach varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '班级助教',
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
deleted_at int DEFAULT '0' COMMENT '逻辑删除时间',
status varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '班级状态(1开启 2关闭)',
sort_order int NOT NULL COMMENT '班级排序',
remarks text COLLATE utf8mb4_general_ci COMMENT '班级备注',
educational_id int NOT NULL DEFAULT '0' COMMENT '教务id',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='班级表';
学员报名时会分配班级,默认班级里的主教练和助教会被分配到学员课程表里。班级表主要是记录班级的信息,包括班级名称,主教练,助教,授课年龄段等信息。这个表和学员课程表是一对多的关系,一个班级可以有多个学员。
school_class_resources_rel(班级学员关系表)
CREATE TABLE school_class_resources_rel (
id int NOT NULL AUTO_INCREMENT,
class_id int NOT NULL COMMENT '班级id',
resource_id int DEFAULT NULL COMMENT '资源id',
campus_id int DEFAULT NULL COMMENT '校区id',
source_id int DEFAULT NULL COMMENT '数据id',
source_type varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据资源类型student是学员,temporary是非正式学员',
join_time int DEFAULT NULL COMMENT '加入时间',
out_time int DEFAULT NULL COMMENT '离开时间',
status tinyint DEFAULT NULL COMMENT '状态1新入2续费3过期4转班5转校',
create_time timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='班级和资源关系表';
这个表记录了班级和资源的关系,包括班级id,资源id,校区id,数据id,数据资源类型,加入时间,离开时间,状态等信息。这个表和班级表是一对多的关系,一个班级可以有多个资源。