答辩最常问「数据库怎么设计」。很多人当场背 18 张表名,老师下一句「主表是哪张」就卡。正确做法:按主流程抽 4 张核心表,能讲清外键和状态。实验室预约骨架见 Java 落地文;冲突规则见 冲突检测。本页只解决表怎么定、怎么讲。
合格线:一张 ER 图、4 张核心表、每张说得出主键/外键/2–3 个业务字段、业务单有状态枚举。不要从电商模板抄 40 张表。
一、先写流程,再画表
不要打开建模工具先建 User。先用一句话写主流程:
谁(角色)对什么资源提交一笔业务,谁来改状态,失败时凭什么拒绝。
| 题目类型 | 一句话 | 4 张表 |
|---|---|---|
| 预约/订房 | 学生约实验室,管理员审核,时段不能撞 | user, lab, booking, booking_log |
| 报修 | 学生报修,维修员接单完工 | user, room, work_order, work_order_log |
| 招聘 | 企业发岗位,学生投递,企业改状态 | user, job, application, resume(或 user 扩展) |
| 商品/点餐 | 用户下单,商家接单 | user, product, order, order_item |
开题功能清单必须和这 4 张表对得上,见 功能清单模板。
二、4 张核心表(可直接改名)
| 表 | 干什么 | 必有字段 |
|---|---|---|
| user | 登录与角色 | id, username, password_hash, role, status |
| resource | 被占用的东西(实验室/房间/岗位) | id, name, 业务属性, status |
| ticket | 一笔业务(预约/工单/投递) | id, user_id, resource_id, status, 时间或数量 |
| log / item | 审核记录或订单明细 | id, ticket_id, action/qty, created_at, operator_id |
关系默认:user 1—N ticket;resource 1—N ticket;ticket 1—N log。答辩就说这三句。
预约类还要在 ticket 上放 start_time / end_time,冲突判定见 时段相交。不要把「是否冲突」存成单独一张没规则的表。
三、状态字段怎么写才像自己做的
老师追问「状态有哪些」时,读得出来才算你做的:
- 预约:待审核 → 已通过 → 进行中 → 已完成 / 已拒绝 / 已取消
- 报修:待接单 → 维修中 → 待确认 → 已完工 / 已关闭
- 投递:已投递 → 已查看 → 面试 → 录用 / 不合适
用整数或短字符串枚举,不要用「是/否」两列代替流程。谁能改哪个状态,准备一张权限卡,答辩证据见 是不是你做的。
四、答辩 40 秒讲法(可照念)
主表是 booking。一条预约属于一个学生、占用一间实验室,用 user_id 和 lab_id 外键。状态从待审核到已通过。已通过的记录用时间段相交做冲突检测。审核动作记在 booking_log,方便追溯谁改的。字典和公告不是核心,所以没画进这张 ER。
讲的时候手指图,不要背字段列表。演示顺序配合 3 分钟脚本:提交一条 → 库里多一行 → 再提交撞车被拒。
五、常见翻车
| 做法 | 为什么挂 | 改法 |
|---|---|---|
| 抄电商 20+ 张表 | 讲不清主表 | 先删到 4 张,其余标扩展 |
| 没有外键只靠同名 id | 被问关系就空 | 至少逻辑外键,ER 上画线 |
| 一张表塞所有字段 | 改状态和资源混在一起 | 资源与单据拆开 |
| 密码明文、无主键 | 基本功被否 | hash + 自增/雪花主键 |
| 为每个下拉框建表 | 表很多但没业务 | 枚举或一张 dict |
中期前这 4 张表必须能插入真实数据,见 中期 3 天清单。
六、论文里怎么写第 4 章
- 概念结构:ER 图(核心 4 张即可)
- 逻辑结构:每张表字段表,主键/外键加粗
- 一条完整业务对应的插入顺序
- 不写「本系统充分满足第三范式」空话,写你为什么拆 ticket 和 log
章节比例见 论文七章。查重时表结构那段用「本系统如何用」改写,见 查重怎么改。
常见问题
4 张表会不会太少被说工作量不够?
工作量看主流程和约束,不看表数量。4 张核心 + 登录日志/公告 1–2 张扩展足够本科。再多要能讲清用途。
要不要上 Redis / 分库?
不要。本科答辩解释成本高于加分。默认 MySQL 单库。
Mongo 行不行?
课上教过且题目是文档型可以。管理系统默认关系库,ER 更好讲。
没有真实数据怎么办?
自己构造演示数据:每张核心表至少 8–20 行,覆盖两种角色和两种状态。数据来源题见 数据从哪来。
