数据库怎么设计:先 4 张核心表,再谈范式

发布于 2026-09-16 · 作者 babachen · 管理系统通用
毕业设计数据库 4 张核心表

答辩最常问「数据库怎么设计」。很多人当场背 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 章

  1. 概念结构:ER 图(核心 4 张即可)
  2. 逻辑结构:每张表字段表,主键/外键加粗
  3. 一条完整业务对应的插入顺序
  4. 不写「本系统充分满足第三范式」空话,写你为什么拆 ticket 和 log

章节比例见 论文七章。查重时表结构那段用「本系统如何用」改写,见 查重怎么改。

常见问题

4 张表会不会太少被说工作量不够?

工作量看主流程和约束,不看表数量。4 张核心 + 登录日志/公告 1–2 张扩展足够本科。再多要能讲清用途。

要不要上 Redis / 分库?

不要。本科答辩解释成本高于加分。默认 MySQL 单库。

Mongo 行不行?

课上教过且题目是文档型可以。管理系统默认关系库,ER 更好讲。

没有真实数据怎么办?

自己构造演示数据:每张核心表至少 8–20 行,覆盖两种角色和两种状态。数据来源题见 数据从哪来。

把题目发过来,帮你压成 4 张表

微信 cqlhsa123(专业 + 题目 + 你现在有几张表)。

立即免费咨询