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,数据资源类型,加入时间,离开时间,状态等信息。这个表和班级表是一对多的关系,一个班级可以有多个资源。