1. 项目概述与技术选型
这个时间日程管理系统是我去年为一个中小型创业团队开发的核心工具,主要解决团队成员日程混乱、任务分配不透明的问题。系统采用经典的Java Web技术栈:Spring Boot框架打底,MyBatis做持久层,MySQL存储数据,前端用Thymeleaf模板引擎。选择这套组合主要基于三个考虑:
首先,创业团队预算有限但需求明确,Java生态成熟的组件能快速搭建稳定系统。Spring Boot的自动配置特性让项目初始化时间缩短了60%,而MyBatis在复杂查询场景下的灵活性正好匹配日程管理中的多条件筛选需求。
其次,MySQL作为关系型数据库,在事务处理和复杂查询方面表现优异。日程系统需要频繁处理时间冲突检测(比如同一会议室不能同时安排两个会议),这正是MySQL的强项。我们使用5.7版本,主要看中其对JSON字段的支持,方便存储日程的附加属性。
最后,放弃主流前端框架而选择Thymeleaf,是因为团队内部有大量传统Java Web开发人员,学习成本低。实测下来,在不超过20个页面的中小型系统中,服务端渲染的性能反而优于前后端分离方案。
关键决策点:技术选型时要区分"行业热门"和"项目合适"。比如虽然Vue/React是前端主流,但对于内部工具类系统,开发团队现有技术栈的匹配度往往更重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据库设计与核心表结构
2.1 主表设计思路
整个系统的核心是四张主表,采用符合第三范式的设计:
sql复制CREATE TABLE `user` (
`user_id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) NOT NULL,
`dept_id` INT DEFAULT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `schedule` (
`schedule_id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`description` TEXT,
`start_time` DATETIME NOT NULL,
`end_time` DATETIME NOT NULL,
`creator_id` INT NOT NULL,
`location` VARCHAR(200) DEFAULT NULL,
`status` TINYINT DEFAULT 1 COMMENT '1-待确认 2-已确认 3-已取消',
`repeat_pattern` JSON DEFAULT NULL,
PRIMARY KEY (`schedule_id`),
KEY `idx_time_range` (`start_time`,`end_time`),
KEY `idx_creator` (`creator_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
特别说明几个设计要点:
- 用户密码采用BCrypt加密存储,这是Spring Security的推荐方案
- 日程表的时间字段精确到分钟,索引采用联合索引提升范围查询效率
- repeat_pattern字段用JSON类型存储重复规则,比如{"type":"weekly","days":[1,3,5]}表示每周一三五重复
2.2 关联表设计
参与人关系表和部门表的设计体现了业务特性:
sql复制CREATE TABLE `schedule_participant` (
`id` INT NOT NULL AUTO_IN
