跳过正文
  1. 文章/

幼儿园园务管理系统数据库表设计详解

sun.ao
作者
sun.ao
我是 sun.ao,一名热爱技术的程序员,专注于 AI 和数智化领域。
目录
幼儿园园务管理系统 - 这篇文章属于一个选集。
§ : 本文

数据库设计是园务管理系统的核心基础。本文基于《幼儿园园务管理系统设计指南》中的功能模块,详细设计各业务表结构。设计原则遵循:数据完整性、查询高效性、扩展灵活性、隐私安全性

一、数据库设计原则
#

1.1 命名规范
#

类型规范示例
表名小写下划线,模块前缀stu_studentfin_payment
字段名小写下划线,语义清晰student_namecreated_at
主键id,自增或雪花IDid BIGINT PRIMARY KEY
外键{关联表}_idclass_idstudent_id
索引idx_{表名}_{字段}idx_stu_student_class_id
唯一索引uk_{表名}_{字段}uk_sys_user_username

1.2 公共字段
#

每张表都包含以下公共字段:

`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` BIGINT COMMENT '创建人ID',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`updated_by` BIGINT COMMENT '更新人ID',
`deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0-正常,1-已删除'

1.3 模块划分
#

├── sys_    # 系统管理模块(用户、角色、权限)
├── stu_    # 幼儿管理模块(幼儿信息、家庭信息)
├── cls_    # 班级管理模块(班级、教师)
├── att_    # 考勤管理模块(考勤、请假、接送)
├── tch_    # 教学管理模块(课程、成长记录)
├── meal_   # 膳食管理模块(食谱、采购)
├── fin_    # 财务管理模块(收费、缴费)
├── msg_    # 消息通知模块(通知、留言)
└── health_ # 健康管理模块(体检、疫苗)

二、系统管理模块
#

2.1 用户表 (sys_user)
#

存储系统所有用户账号信息,包括园长、教师、家长、后勤等。

CREATE TABLE `sys_user` (
  `id` BIGINT PRIMARY KEY COMMENT '用户ID',
  `username` VARCHAR(50) NOT NULL COMMENT '用户名/手机号',
  `password` VARCHAR(255) NOT NULL COMMENT '密码(加密存储)',
  `real_name` VARCHAR(50) NOT NULL COMMENT '真实姓名',
  `phone` VARCHAR(20) COMMENT '手机号',
  `email` VARCHAR(100) COMMENT '邮箱',
  `avatar` VARCHAR(255) COMMENT '头像URL',
  `gender` TINYINT DEFAULT 0 COMMENT '性别:0-未知,1-男,2-女',
  `user_type` TINYINT NOT NULL COMMENT '用户类型:1-园长,2-教师,3-家长,4-后勤,5-保健医,6-管理员',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
  `last_login_at` DATETIME COMMENT '最后登录时间',
  `last_login_ip` VARCHAR(50) COMMENT '最后登录IP',
  `remark` VARCHAR(500) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_sys_user_username` (`username`),
  UNIQUE KEY `uk_sys_user_phone` (`phone`),
  KEY `idx_sys_user_type` (`user_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

2.2 角色表 (sys_role)
#

CREATE TABLE `sys_role` (
  `id` BIGINT PRIMARY KEY COMMENT '角色ID',
  `role_name` VARCHAR(50) NOT NULL COMMENT '角色名称',
  `role_code` VARCHAR(50) NOT NULL COMMENT '角色编码',
  `description` VARCHAR(255) COMMENT '角色描述',
  `sort` INT DEFAULT 0 COMMENT '排序',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_sys_role_code` (`role_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

2.3 用户角色关联表 (sys_user_role)
#

CREATE TABLE `sys_user_role` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `user_id` BIGINT NOT NULL COMMENT '用户ID',
  `role_id` BIGINT NOT NULL COMMENT '角色ID',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_sys_user_role` (`user_id`, `role_id`),
  KEY `idx_sys_user_role_role` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';

2.4 权限表 (sys_permission)
#

CREATE TABLE `sys_permission` (
  `id` BIGINT PRIMARY KEY COMMENT '权限ID',
  `parent_id` BIGINT DEFAULT 0 COMMENT '父权限ID',
  `permission_name` VARCHAR(50) NOT NULL COMMENT '权限名称',
  `permission_code` VARCHAR(100) NOT NULL COMMENT '权限编码',
  `permission_type` TINYINT NOT NULL COMMENT '类型:1-菜单,2-按钮,3-接口',
  `path` VARCHAR(255) COMMENT '路由路径',
  `component` VARCHAR(255) COMMENT '组件路径',
  `icon` VARCHAR(100) COMMENT '图标',
  `sort` INT DEFAULT 0 COMMENT '排序',
  `visible` TINYINT DEFAULT 1 COMMENT '是否可见:0-否,1-是',
  `status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_sys_permission_parent` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表';

2.5 角色权限关联表 (sys_role_permission)
#

CREATE TABLE `sys_role_permission` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `role_id` BIGINT NOT NULL COMMENT '角色ID',
  `permission_id` BIGINT NOT NULL COMMENT '权限ID',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_sys_role_permission` (`role_id`, `permission_id`),
  KEY `idx_sys_role_permission_perm` (`permission_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';

三、幼儿管理模块
#

3.1 幼儿信息表 (stu_student)
#

核心业务表,存储幼儿基本信息。

CREATE TABLE `stu_student` (
  `id` BIGINT PRIMARY KEY COMMENT '幼儿ID',
  `student_no` VARCHAR(50) COMMENT '学号',
  `student_name` VARCHAR(50) NOT NULL COMMENT '幼儿姓名',
  `gender` TINYINT NOT NULL COMMENT '性别:1-男,2-女',
  `birth_date` DATE NOT NULL COMMENT '出生日期',
  `id_card` VARCHAR(18) COMMENT '身份证号(加密存储)',
  `nation` VARCHAR(20) COMMENT '民族',
  `native_place` VARCHAR(100) COMMENT '籍贯',
  `household_type` TINYINT COMMENT '户籍类型:1-本地户籍,2-外地户籍',
  `household_address` VARCHAR(255) COMMENT '户籍地址',
  `current_address` VARCHAR(255) COMMENT '现居住地址',
  `photo` VARCHAR(255) COMMENT '照片URL',
  `face_feature` TEXT COMMENT '人脸特征数据(用于人脸识别)',
  `blood_type` VARCHAR(5) COMMENT '血型:A、B、AB、O',
  `enrollment_date` DATE COMMENT '入园日期',
  `graduation_date` DATE COMMENT '毕业日期',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-在园,2-毕业,3-转学,4-退学',
  `source` TINYINT COMMENT '生源:1-网上报名,2-现场报名,3-转学',
  `remark` VARCHAR(500) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_stu_student_no` (`student_no`),
  KEY `idx_stu_student_status` (`status`),
  KEY `idx_stu_student_enrollment` (`enrollment_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='幼儿信息表';

3.2 家庭成员表 (stu_family_member)
#

存储幼儿的父母、祖父母等家庭成员信息。

CREATE TABLE `stu_family_member` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `member_type` TINYINT NOT NULL COMMENT '成员类型:1-父亲,2-母亲,3-爷爷,4-奶奶,5-外公,6-外婆,7-其他',
  `member_name` VARCHAR(50) NOT NULL COMMENT '成员姓名',
  `relation` VARCHAR(20) COMMENT '与幼儿关系',
  `id_card` VARCHAR(18) COMMENT '身份证号(加密存储)',
  `phone` VARCHAR(20) COMMENT '联系电话',
  `work_unit` VARCHAR(100) COMMENT '工作单位',
  `occupation` VARCHAR(50) COMMENT '职业',
  `education` VARCHAR(20) COMMENT '学历',
  `is_emergency` TINYINT DEFAULT 0 COMMENT '是否紧急联系人:0-否,1-是',
  `is_pickup` TINYINT DEFAULT 0 COMMENT '是否接送人:0-否,1-是',
  `face_feature` TEXT COMMENT '人脸特征数据',
  `photo` VARCHAR(255) COMMENT '照片URL',
  `user_id` BIGINT COMMENT '关联用户ID',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_stu_family_member_student` (`student_id`),
  KEY `idx_stu_family_member_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='家庭成员表';

3.3 幼儿班级关联表 (stu_student_class)
#

记录幼儿的班级分配历史,支持升班、转班追溯。

CREATE TABLE `stu_student_class` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `class_id` BIGINT NOT NULL COMMENT '班级ID',
  `start_date` DATE NOT NULL COMMENT '开始日期',
  `end_date` DATE COMMENT '结束日期',
  `change_type` TINYINT NOT NULL COMMENT '变更类型:1-入园分配,2-升班,3-转班',
  `change_reason` VARCHAR(255) COMMENT '变更原因',
  `is_current` TINYINT DEFAULT 1 COMMENT '是否当前班级:0-否,1-是',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_stu_student_class_student` (`student_id`),
  KEY `idx_stu_student_class_class` (`class_id`),
  KEY `idx_stu_student_class_current` (`is_current`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='幼儿班级关联表';

四、班级管理模块
#

4.1 班级表 (cls_class)
#

CREATE TABLE `cls_class` (
  `id` BIGINT PRIMARY KEY COMMENT '班级ID',
  `class_name` VARCHAR(50) NOT NULL COMMENT '班级名称',
  `class_code` VARCHAR(50) COMMENT '班级编码',
  `class_type` TINYINT NOT NULL COMMENT '班级类型:1-托班,2-小班,3-中班,4-大班',
  `grade_year` INT COMMENT '年级年份(如2024级)',
  `capacity` INT NOT NULL DEFAULT 30 COMMENT '班级容量',
  `current_count` INT DEFAULT 0 COMMENT '当前人数',
  `classroom` VARCHAR(50) COMMENT '教室位置',
  `head_teacher_id` BIGINT COMMENT '班主任ID',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-已结业,1-在读',
  `description` VARCHAR(255) COMMENT '班级描述',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_cls_class_code` (`class_code`),
  KEY `idx_cls_class_type` (`class_type`),
  KEY `idx_cls_class_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班级表';

4.2 教师信息表 (cls_teacher)
#

CREATE TABLE `cls_teacher` (
  `id` BIGINT PRIMARY KEY COMMENT '教师ID',
  `user_id` BIGINT NOT NULL COMMENT '关联用户ID',
  `teacher_no` VARCHAR(50) COMMENT '工号',
  `teacher_name` VARCHAR(50) NOT NULL COMMENT '教师姓名',
  `gender` TINYINT NOT NULL COMMENT '性别:1-男,2-女',
  `birth_date` DATE COMMENT '出生日期',
  `id_card` VARCHAR(18) COMMENT '身份证号(加密存储)',
  `phone` VARCHAR(20) COMMENT '联系电话',
  `education` VARCHAR(20) COMMENT '学历',
  `major` VARCHAR(50) COMMENT '专业',
  `graduate_school` VARCHAR(100) COMMENT '毕业院校',
  `entry_date` DATE COMMENT '入职日期',
  `leave_date` DATE COMMENT '离职日期',
  `position_type` TINYINT NOT NULL COMMENT '岗位类型:1-主班教师,2-副班教师,3-保育员,4-保健医,5-后勤',
  `qualification_no` VARCHAR(50) COMMENT '教师资格证编号',
  `qualification_type` VARCHAR(50) COMMENT '资格证类型',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-离职,1-在职',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_cls_teacher_user` (`user_id`),
  KEY `idx_cls_teacher_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师信息表';

4.3 教师班级关联表 (cls_teacher_class)
#

CREATE TABLE `cls_teacher_class` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `teacher_id` BIGINT NOT NULL COMMENT '教师ID',
  `class_id` BIGINT NOT NULL COMMENT '班级ID',
  `role_type` TINYINT NOT NULL COMMENT '角色类型:1-班主任,2-主班教师,3-副班教师,4-保育员',
  `start_date` DATE NOT NULL COMMENT '开始日期',
  `end_date` DATE COMMENT '结束日期',
  `is_current` TINYINT DEFAULT 1 COMMENT '是否当前:0-否,1-是',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_cls_teacher_class_teacher` (`teacher_id`),
  KEY `idx_cls_teacher_class_class` (`class_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师班级关联表';

五、考勤管理模块
#

5.1 幼儿考勤表 (att_student_attendance)
#

CREATE TABLE `att_student_attendance` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `class_id` BIGINT NOT NULL COMMENT '班级ID',
  `attendance_date` DATE NOT NULL COMMENT '考勤日期',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '考勤状态:1-正常出勤,2-请假,3-迟到,4-早退,5-旷课',
  `arrival_time` TIME COMMENT '入园时间',
  `arrival_type` TINYINT COMMENT '入园方式:1-刷卡,2-人脸识别,3-手动登记',
  `arrival_photo` VARCHAR(255) COMMENT '入园照片',
  `leave_time` TIME COMMENT '离园时间',
  `leave_type` TINYINT COMMENT '离园方式:1-刷卡,2-人脸识别,3-手动登记',
  `leave_photo` VARCHAR(255) COMMENT '离园照片',
  `temperature` DECIMAL(4,2) COMMENT '晨检体温',
  `health_status` TINYINT COMMENT '晨检健康状态:1-正常,2-异常',
  `health_remark` VARCHAR(255) COMMENT '晨检备注',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_att_student_attendance` (`student_id`, `attendance_date`),
  KEY `idx_att_student_attendance_date` (`attendance_date`),
  KEY `idx_att_student_attendance_class` (`class_id`, `attendance_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='幼儿考勤表';

5.2 请假申请表 (att_leave_request)
#

CREATE TABLE `att_leave_request` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `applicant_id` BIGINT NOT NULL COMMENT '申请人ID(家长)',
  `leave_type` TINYINT NOT NULL COMMENT '请假类型:1-病假,2-事假',
  `start_date` DATE NOT NULL COMMENT '开始日期',
  `end_date` DATE NOT NULL COMMENT '结束日期',
  `days` DECIMAL(4,1) NOT NULL COMMENT '请假天数',
  `reason` VARCHAR(500) COMMENT '请假原因',
  `attachment` VARCHAR(255) COMMENT '附件(如病历照片)',
  `status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-待审批,1-已通过,2-已拒绝,3-已撤销',
  `approver_id` BIGINT COMMENT '审批人ID',
  `approve_time` DATETIME COMMENT '审批时间',
  `approve_remark` VARCHAR(255) COMMENT '审批备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_att_leave_request_student` (`student_id`),
  KEY `idx_att_leave_request_status` (`status`),
  KEY `idx_att_leave_request_date` (`start_date`, `end_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='请假申请表';

5.3 接送记录表 (att_pickup_record)
#

CREATE TABLE `att_pickup_record` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `pickup_date` DATE NOT NULL COMMENT '接送日期',
  `pickup_type` TINYINT NOT NULL COMMENT '接送类型:1-入园,2-离园',
  `pickup_time` TIME NOT NULL COMMENT '接送时间',
  `pickup_person_id` BIGINT COMMENT '接送人ID(家庭成员表)',
  `pickup_person_name` VARCHAR(50) COMMENT '接送人姓名',
  `pickup_relation` VARCHAR(20) COMMENT '与幼儿关系',
  `verify_type` TINYINT COMMENT '验证方式:1-刷卡,2-人脸识别,3-密码',
  `verify_photo` VARCHAR(255) COMMENT '验证照片',
  `operator_id` BIGINT COMMENT '操作人ID(教师)',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_att_pickup_record_student` (`student_id`),
  KEY `idx_att_pickup_record_date` (`pickup_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='接送记录表';

5.4 教师考勤表 (att_teacher_attendance)
#

CREATE TABLE `att_teacher_attendance` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `teacher_id` BIGINT NOT NULL COMMENT '教师ID',
  `attendance_date` DATE NOT NULL COMMENT '考勤日期',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-正常,2-迟到,3-早退,4-请假,5-旷工',
  `clock_in_time` TIME COMMENT '签到时间',
  `clock_in_type` TINYINT COMMENT '签到方式:1-人脸识别,2-指纹,3-刷卡',
  `clock_out_time` TIME COMMENT '签退时间',
  `clock_out_type` TINYINT COMMENT '签退方式',
  `work_hours` DECIMAL(4,1) COMMENT '工作时长(小时)',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_att_teacher_attendance` (`teacher_id`, `attendance_date`),
  KEY `idx_att_teacher_attendance_date` (`attendance_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师考勤表';

六、教学管理模块
#

6.1 课程表 (tch_course)
#

CREATE TABLE `tch_course` (
  `id` BIGINT PRIMARY KEY COMMENT '课程ID',
  `course_name` VARCHAR(100) NOT NULL COMMENT '课程名称',
  `course_code` VARCHAR(50) COMMENT '课程编码',
  `course_type` TINYINT NOT NULL COMMENT '课程类型:1-健康,2-语言,3-社会,4-科学,5-艺术,6-特色课程',
  `target_age` TINYINT COMMENT '适用年龄:1-托班,2-小班,3-中班,4-大班',
  `description` VARCHAR(500) COMMENT '课程描述',
  `objectives` TEXT COMMENT '教学目标',
  `duration` INT COMMENT '课程时长(分钟)',
  `status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_tch_course_type` (`course_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程表';

6.2 课程安排表 (tch_course_schedule)
#

CREATE TABLE `tch_course_schedule` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `class_id` BIGINT NOT NULL COMMENT '班级ID',
  `course_id` BIGINT NOT NULL COMMENT '课程ID',
  `teacher_id` BIGINT NOT NULL COMMENT '授课教师ID',
  `week_day` TINYINT NOT NULL COMMENT '星期:1-7',
  `start_time` TIME NOT NULL COMMENT '开始时间',
  `end_time` TIME NOT NULL COMMENT '结束时间',
  `location` VARCHAR(50) COMMENT '上课地点',
  `effective_date` DATE COMMENT '生效日期',
  `expiry_date` DATE COMMENT '失效日期',
  `status` TINYINT DEFAULT 1 COMMENT '状态:0-无效,1-有效',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_tch_course_schedule_class` (`class_id`),
  KEY `idx_tch_course_schedule_teacher` (`teacher_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程安排表';

6.3 成长记录表 (tch_growth_record)
#

CREATE TABLE `tch_growth_record` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `class_id` BIGINT NOT NULL COMMENT '班级ID',
  `teacher_id` BIGINT NOT NULL COMMENT '记录教师ID',
  `record_date` DATE NOT NULL COMMENT '记录日期',
  `record_type` TINYINT NOT NULL COMMENT '记录类型:1-日常活动,2-学习表现,3-社交行为,4-生活习惯,5-体能发展',
  `title` VARCHAR(100) COMMENT '标题',
  `content` TEXT NOT NULL COMMENT '记录内容',
  `media_urls` JSON COMMENT '媒体文件URLs(图片、视频)',
  `tags` VARCHAR(255) COMMENT '标签(逗号分隔)',
  `parent_visible` TINYINT DEFAULT 1 COMMENT '家长可见:0-否,1-是',
  `parent_liked` TINYINT DEFAULT 0 COMMENT '家长点赞:0-否,1-是',
  `parent_comment` VARCHAR(500) COMMENT '家长评论',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_tch_growth_record_student` (`student_id`),
  KEY `idx_tch_growth_record_class` (`class_id`, `record_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='成长记录表';

七、膳食管理模块
#

7.1 食谱表 (meal_menu)
#

CREATE TABLE `meal_menu` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `menu_date` DATE NOT NULL COMMENT '食谱日期',
  `meal_type` TINYINT NOT NULL COMMENT '餐次:1-早餐,2-早点,3-午餐,4-午点,5-晚餐',
  `dishes` JSON NOT NULL COMMENT '菜品列表(JSON格式)',
  `calories` DECIMAL(8,2) COMMENT '总热量(千卡)',
  `protein` DECIMAL(8,2) COMMENT '蛋白质(克)',
  `fat` DECIMAL(8,2) COMMENT '脂肪(克)',
  `carbohydrate` DECIMAL(8,2) COMMENT '碳水化合物(克)',
  `description` VARCHAR(255) COMMENT '描述',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_meal_menu` (`menu_date`, `meal_type`),
  KEY `idx_meal_menu_date` (`menu_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='食谱表';

7.2 食材表 (meal_ingredient)
#

CREATE TABLE `meal_ingredient` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `ingredient_name` VARCHAR(50) NOT NULL COMMENT '食材名称',
  `ingredient_code` VARCHAR(50) COMMENT '食材编码',
  `category` TINYINT COMMENT '分类:1-蔬菜,2-肉类,3-水产,4-蛋奶,5-粮油,6-调味品,7-水果',
  `unit` VARCHAR(10) COMMENT '单位:kg、g、个、盒',
  `unit_price` DECIMAL(8,2) COMMENT '单价',
  `nutrient_info` JSON COMMENT '营养成分信息',
  `allergy_warning` VARCHAR(255) COMMENT '过敏提示',
  `status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_meal_ingredient_category` (`category`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='食材表';

7.3 采购计划表 (meal_procurement_plan)
#

CREATE TABLE `meal_procurement_plan` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `plan_no` VARCHAR(50) COMMENT '计划编号',
  `plan_date` DATE NOT NULL COMMENT '计划日期',
  `supplier_id` BIGINT COMMENT '供应商ID',
  `total_amount` DECIMAL(10,2) COMMENT '总金额',
  `status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-待审批,1-已审批,2-已采购,3-已入库',
  `approver_id` BIGINT COMMENT '审批人ID',
  `approve_time` DATETIME COMMENT '审批时间',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_meal_procurement_plan_date` (`plan_date`),
  KEY `idx_meal_procurement_plan_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购计划表';

7.4 采购明细表 (meal_procurement_item)
#

CREATE TABLE `meal_procurement_item` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `plan_id` BIGINT NOT NULL COMMENT '采购计划ID',
  `ingredient_id` BIGINT NOT NULL COMMENT '食材ID',
  `quantity` DECIMAL(10,2) NOT NULL COMMENT '采购数量',
  `unit` VARCHAR(10) COMMENT '单位',
  `unit_price` DECIMAL(8,2) COMMENT '单价',
  `amount` DECIMAL(10,2) COMMENT '金额',
  `actual_quantity` DECIMAL(10,2) COMMENT '实际入库数量',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_meal_procurement_item_plan` (`plan_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='采购明细表';

7.5 供应商表 (meal_supplier)
#

CREATE TABLE `meal_supplier` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `supplier_name` VARCHAR(100) NOT NULL COMMENT '供应商名称',
  `contact_person` VARCHAR(50) COMMENT '联系人',
  `contact_phone` VARCHAR(20) COMMENT '联系电话',
  `address` VARCHAR(255) COMMENT '地址',
  `license_no` VARCHAR(50) COMMENT '营业执照号',
  `license_photo` VARCHAR(255) COMMENT '营业执照照片',
  `supply_category` VARCHAR(255) COMMENT '供应类别',
  `cooperation_start` DATE COMMENT '合作开始日期',
  `status` TINYINT DEFAULT 1 COMMENT '状态:0-停用,1-合作中',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_meal_supplier_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商表';

八、财务管理模块
#

8.1 收费项目表 (fin_fee_item)
#

CREATE TABLE `fin_fee_item` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `item_name` VARCHAR(50) NOT NULL COMMENT '收费项目名称',
  `item_code` VARCHAR(50) COMMENT '项目编码',
  `item_type` TINYINT NOT NULL COMMENT '项目类型:1-保教费,2-餐费,3-校服费,4-兴趣班,5-代收费,6-其他',
  `fee_standard` DECIMAL(10,2) NOT NULL COMMENT '收费标准',
  `fee_unit` TINYINT COMMENT '收费单位:1-按月,2-按学期,3-按次,4-按年',
  `effective_date` DATE COMMENT '生效日期',
  `expiry_date` DATE COMMENT '失效日期',
  `description` VARCHAR(255) COMMENT '说明',
  `status` TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_fin_fee_item_type` (`item_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收费项目表';

8.2 账单表 (fin_bill)
#

CREATE TABLE `fin_bill` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `bill_no` VARCHAR(50) NOT NULL COMMENT '账单编号',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `bill_month` VARCHAR(7) NOT NULL COMMENT '账单月份(YYYY-MM)',
  `total_amount` DECIMAL(10,2) NOT NULL COMMENT '应收总额',
  `paid_amount` DECIMAL(10,2) DEFAULT 0 COMMENT '已付金额',
  `discount_amount` DECIMAL(10,2) DEFAULT 0 COMMENT '优惠金额',
  `deduct_amount` DECIMAL(10,2) DEFAULT 0 COMMENT '扣减金额(请假等)',
  `status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-待支付,1-部分支付,2-已支付,3-已退款',
  `due_date` DATE COMMENT '应付日期',
  `paid_time` DATETIME COMMENT '支付时间',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_fin_bill_no` (`bill_no`),
  KEY `idx_fin_bill_student` (`student_id`),
  KEY `idx_fin_bill_month` (`bill_month`),
  KEY `idx_fin_bill_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账单表';

8.3 账单明细表 (fin_bill_item)
#

CREATE TABLE `fin_bill_item` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `bill_id` BIGINT NOT NULL COMMENT '账单ID',
  `fee_item_id` BIGINT NOT NULL COMMENT '收费项目ID',
  `item_name` VARCHAR(50) NOT NULL COMMENT '项目名称',
  `quantity` DECIMAL(10,2) DEFAULT 1 COMMENT '数量',
  `unit_price` DECIMAL(10,2) NOT NULL COMMENT '单价',
  `amount` DECIMAL(10,2) NOT NULL COMMENT '金额',
  `deduct_amount` DECIMAL(10,2) DEFAULT 0 COMMENT '扣减金额',
  `paid_amount` DECIMAL(10,2) DEFAULT 0 COMMENT '已付金额',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_fin_bill_item_bill` (`bill_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账单明细表';

8.4 支付记录表 (fin_payment)
#

CREATE TABLE `fin_payment` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `payment_no` VARCHAR(50) NOT NULL COMMENT '支付流水号',
  `bill_id` BIGINT NOT NULL COMMENT '账单ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `payer_id` BIGINT COMMENT '付款人ID(家长)',
  `payer_name` VARCHAR(50) COMMENT '付款人姓名',
  `amount` DECIMAL(10,2) NOT NULL COMMENT '支付金额',
  `payment_method` TINYINT NOT NULL COMMENT '支付方式:1-微信,2-支付宝,3-银行卡,4-现金,5-转账',
  `payment_time` DATETIME NOT NULL COMMENT '支付时间',
  `transaction_id` VARCHAR(100) COMMENT '第三方交易号',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:0-待确认,1-支付成功,2-支付失败,3-已退款',
  `refund_amount` DECIMAL(10,2) COMMENT '退款金额',
  `refund_time` DATETIME COMMENT '退款时间',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_fin_payment_no` (`payment_no`),
  KEY `idx_fin_payment_bill` (`bill_id`),
  KEY `idx_fin_payment_student` (`student_id`),
  KEY `idx_fin_payment_time` (`payment_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付记录表';

九、健康管理模块
#

9.1 健康档案表 (health_record)
#

CREATE TABLE `health_record` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `blood_type` VARCHAR(5) COMMENT '血型',
  `height` DECIMAL(5,2) COMMENT '身高(cm)',
  `weight` DECIMAL(5,2) COMMENT '体重(kg)',
  `vision_left` VARCHAR(10) COMMENT '左眼视力',
  `vision_right` VARCHAR(10) COMMENT '右眼视力',
  `hearing_left` VARCHAR(10) COMMENT '左耳听力',
  `hearing_right` VARCHAR(10) COMMENT '右耳听力',
  `teeth_status` VARCHAR(255) COMMENT '牙齿状况',
  `allergy_history` TEXT COMMENT '过敏史',
  `disease_history` TEXT COMMENT '既往病史',
  `medication_history` TEXT COMMENT '用药史',
  `special_care` TEXT COMMENT '特殊护理需求',
  `check_date` DATE COMMENT '检查日期',
  `check_hospital` VARCHAR(100) COMMENT '检查医院',
  `remark` VARCHAR(500) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_health_record_student` (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康档案表';

9.2 疫苗接种记录表 (health_vaccination)
#

CREATE TABLE `health_vaccination` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `vaccine_name` VARCHAR(100) NOT NULL COMMENT '疫苗名称',
  `vaccine_type` VARCHAR(50) COMMENT '疫苗类型',
  `dose_no` INT COMMENT '剂次',
  `vaccination_date` DATE NOT NULL COMMENT '接种日期',
  `vaccination_org` VARCHAR(100) COMMENT '接种单位',
  `batch_no` VARCHAR(50) COMMENT '疫苗批号',
  `manufacturer` VARCHAR(100) COMMENT '生产厂家',
  `next_date` DATE COMMENT '下次接种日期',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_health_vaccination_student` (`student_id`),
  KEY `idx_health_vaccination_date` (`vaccination_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='疫苗接种记录表';

9.3 晨检记录表 (health_morning_check)
#

CREATE TABLE `health_morning_check` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `check_date` DATE NOT NULL COMMENT '检查日期',
  `temperature` DECIMAL(4,2) COMMENT '体温(℃)',
  `spirit_status` TINYINT COMMENT '精神状态:1-良好,2-一般,3-较差',
  `skin_status` TINYINT COMMENT '皮肤状况:1-正常,2-异常',
  `hand_foot_status` TINYINT COMMENT '手足状况:1-正常,2-异常',
  `mouth_status` TINYINT COMMENT '口腔状况:1-正常,2-异常',
  `eye_status` TINYINT COMMENT '眼部状况:1-正常,2-异常',
  `overall_status` TINYINT NOT NULL COMMENT '总体状态:1-正常,2-观察,3-异常',
  `abnormal_desc` VARCHAR(255) COMMENT '异常描述',
  `handler` VARCHAR(50) COMMENT '处理措施',
  `checker_id` BIGINT COMMENT '检查人ID',
  `remark` VARCHAR(255) COMMENT '备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_health_morning_check` (`student_id`, `check_date`),
  KEY `idx_health_morning_check_date` (`check_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='晨检记录表';

9.4 用药记录表 (health_medication)
#

CREATE TABLE `health_medication` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `student_id` BIGINT NOT NULL COMMENT '幼儿ID',
  `medicine_name` VARCHAR(100) NOT NULL COMMENT '药品名称',
  `dosage` VARCHAR(50) COMMENT '剂量',
  `frequency` VARCHAR(50) COMMENT '用药频次',
  `start_date` DATE NOT NULL COMMENT '开始日期',
  `end_date` DATE COMMENT '结束日期',
  `medicine_time` TIME COMMENT '服药时间',
  `reason` VARCHAR(255) COMMENT '用药原因',
  `prescription_photo` VARCHAR(255) COMMENT '处方照片',
  `parent_request` TEXT COMMENT '家长嘱托',
  `status` TINYINT DEFAULT 1 COMMENT '状态:1-进行中,2-已完成,3-已取消',
  `nurse_id` BIGINT COMMENT '执行人ID',
  `execute_time` DATETIME COMMENT '执行时间',
  `execute_remark` VARCHAR(255) COMMENT '执行备注',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_health_medication_student` (`student_id`),
  KEY `idx_health_medication_date` (`start_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用药记录表';

十、消息通知模块
#

10.1 通知公告表 (msg_notice)
#

CREATE TABLE `msg_notice` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `notice_type` TINYINT NOT NULL COMMENT '通知类型:1-园所公告,2-班级通知,3-系统通知',
  `title` VARCHAR(100) NOT NULL COMMENT '标题',
  `content` TEXT NOT NULL COMMENT '内容',
  `cover_image` VARCHAR(255) COMMENT '封面图片',
  `attachments` JSON COMMENT '附件列表',
  `target_type` TINYINT NOT NULL COMMENT '目标类型:1-全体,2-指定班级,3-指定家长',
  `target_ids` JSON COMMENT '目标ID列表',
  `publisher_id` BIGINT NOT NULL COMMENT '发布人ID',
  `publish_time` DATETIME COMMENT '发布时间',
  `status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-草稿,1-已发布,2-已撤回',
  `top_flag` TINYINT DEFAULT 0 COMMENT '置顶标记:0-否,1-是',
  `read_count` INT DEFAULT 0 COMMENT '阅读次数',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by` BIGINT,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_by` BIGINT,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_msg_notice_type` (`notice_type`),
  KEY `idx_msg_notice_status` (`status`),
  KEY `idx_msg_notice_publish_time` (`publish_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知公告表';

10.2 通知阅读记录表 (msg_notice_read)
#

CREATE TABLE `msg_notice_read` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `notice_id` BIGINT NOT NULL COMMENT '通知ID',
  `user_id` BIGINT NOT NULL COMMENT '用户ID',
  `read_time` DATETIME NOT NULL COMMENT '阅读时间',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  UNIQUE KEY `uk_msg_notice_read` (`notice_id`, `user_id`),
  KEY `idx_msg_notice_read_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知阅读记录表';

10.3 留言消息表 (msg_message)
#

CREATE TABLE `msg_message` (
  `id` BIGINT PRIMARY KEY COMMENT '主键ID',
  `conversation_id` VARCHAR(50) COMMENT '会话ID',
  `sender_id` BIGINT NOT NULL COMMENT '发送人ID',
  `receiver_id` BIGINT NOT NULL COMMENT '接收人ID',
  `message_type` TINYINT NOT NULL COMMENT '消息类型:1-文字,2-图片,3-语音,4-文件',
  `content` TEXT COMMENT '消息内容',
  `media_url` VARCHAR(255) COMMENT '媒体文件URL',
  `status` TINYINT DEFAULT 0 COMMENT '状态:0-未读,1-已读',
  `read_time` DATETIME COMMENT '阅读时间',
  -- 公共字段
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `deleted` TINYINT NOT NULL DEFAULT 0,
  KEY `idx_msg_message_conversation` (`conversation_id`),
  KEY `idx_msg_message_sender` (`sender_id`),
  KEY `idx_msg_message_receiver` (`receiver_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='留言消息表';

十一、表关系总结
#

11.1 核心关联关系
#

sys_user ──┬── sys_user_role ──── sys_role ──── sys_role_permission ──── sys_permission
           ├── cls_teacher ──── cls_teacher_class ──── cls_class
           │                                              │
           │                                              ├── stu_student_class ──── stu_student
           │                                              │                              │
           │                                              │                              ├── stu_family_member
           │                                              │                              │
           │                                              │                              ├── att_student_attendance
           │                                              │                              │
           │                                              │                              ├── att_leave_request
           │                                              │                              │
           │                                              │                              ├── att_pickup_record
           │                                              │                              │
           │                                              │                              ├── tch_growth_record
           │                                              │                              │
           │                                              │                              ├── fin_bill ──── fin_bill_item
           │                                              │                              │                │
           │                                              │                              │                └── fin_payment
           │                                              │                              │
           │                                              │                              └── health_record
           │                                              │                                        │
           │                                              │                                        ├── health_vaccination
           │                                              │                                        │
           │                                              │                                        ├── health_morning_check
           │                                              │                                        │
           │                                              │                                        └── health_medication
           │                                              │
           │                                              └── tch_course_schedule ──── tch_course
           └── (家长用户关联 stu_family_member)

11.2 表数量统计
#

模块表数量主要表
系统管理5sys_user, sys_role, sys_permission
幼儿管理3stu_student, stu_family_member, stu_student_class
班级管理3cls_class, cls_teacher, cls_teacher_class
考勤管理4att_student_attendance, att_leave_request, att_pickup_record
教学管理3tch_course, tch_course_schedule, tch_growth_record
膳食管理5meal_menu, meal_ingredient, meal_procurement_plan
财务管理4fin_fee_item, fin_bill, fin_payment
健康管理4health_record, health_vaccination, health_morning_check
消息通知3msg_notice, msg_notice_read, msg_message
合计34

十二、设计要点总结
#

12.1 数据安全
#

  • 敏感字段(身份证号、密码)加密存储
  • 人脸特征数据单独字段存储,便于安全管控
  • 逻辑删除设计,支持数据恢复和审计

12.2 性能优化
#

  • 合理设置索引,高频查询字段建立联合索引
  • 大文本字段(content、media_urls)使用 TEXT/JSON 类型
  • 统计类字段(current_count、read_count)考虑缓存

12.3 扩展性
#

  • 使用 JSON 字段存储动态数据(菜品列表、附件列表)
  • 状态字段预留扩展空间
  • 公共字段统一,便于后续增加审计功能

12.4 业务完整性
#

  • 幼儿班级关联保留历史记录,支持升班追溯
  • 账单与支付分离,支持部分支付和退款
  • 请假审批流程完整,支持撤销和拒绝

这套数据库设计覆盖了幼儿园园务管理的核心业务场景,可根据实际需求进行裁剪或扩展。建议在开发前根据具体业务规则补充字段约束和触发器设计。

幼儿园园务管理系统 - 这篇文章属于一个选集。
§ : 本文

相关文章