数据库设计是园务管理系统的核心基础。本文基于《幼儿园园务管理系统设计指南》中的功能模块,详细设计各业务表结构。设计原则遵循:数据完整性、查询高效性、扩展灵活性、隐私安全性。
一、数据库设计原则#
1.1 命名规范#
| 类型 | 规范 | 示例 |
|---|---|---|
| 表名 | 小写下划线,模块前缀 | stu_student、fin_payment |
| 字段名 | 小写下划线,语义清晰 | student_name、created_at |
| 主键 | id,自增或雪花ID | id BIGINT PRIMARY KEY |
| 外键 | {关联表}_id | class_id、student_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 表数量统计#
| 模块 | 表数量 | 主要表 |
|---|---|---|
| 系统管理 | 5 | sys_user, sys_role, sys_permission |
| 幼儿管理 | 3 | stu_student, stu_family_member, stu_student_class |
| 班级管理 | 3 | cls_class, cls_teacher, cls_teacher_class |
| 考勤管理 | 4 | att_student_attendance, att_leave_request, att_pickup_record |
| 教学管理 | 3 | tch_course, tch_course_schedule, tch_growth_record |
| 膳食管理 | 5 | meal_menu, meal_ingredient, meal_procurement_plan |
| 财务管理 | 4 | fin_fee_item, fin_bill, fin_payment |
| 健康管理 | 4 | health_record, health_vaccination, health_morning_check |
| 消息通知 | 3 | msg_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 业务完整性#
- 幼儿班级关联保留历史记录,支持升班追溯
- 账单与支付分离,支持部分支付和退款
- 请假审批流程完整,支持撤销和拒绝
这套数据库设计覆盖了幼儿园园务管理的核心业务场景,可根据实际需求进行裁剪或扩展。建议在开发前根据具体业务规则补充字段约束和触发器设计。
