9. 数据库设计答辩

本章收录 46 道老师常问问题,高频题靠前。回答时尽量结合自己的项目举例。

1. 整体数据库设计思路与流程?

  1. 先梳理项目业务实体,提取用户、业务数据、权限等核心实体
  2. 根据业务关联设计表结构
  3. 遵循数据库三范式,合理设计主键、外键、索引
  4. 设置字段类型、长度、非空约束,减少冗余,保证数据完整性、一致性。

2. 主键、外键、索引的作用?

  1. 主键:唯一标识单条数据、非空唯一,精准查询数据
  2. 外键:关联多表关系,约束数据关联性,防止脏数据
  3. 索引:针对高频查询字段建立,大幅提升SQL查询效率,优化数据库性能。

3. 数据库三大范式详细解释与作用?

  1. 第一范式:字段原子性,不可再拆分
  2. 第二范式:消除部分依赖,所有字段依赖主键
  3. 第三范式:消除传递依赖,字段不间接依赖主键。遵循三范式最大限度减少数据冗余,避免数据更新、删除、插入异常。

4. 项目数据库优化的具体手段?

  1. 合理设计表结构、精简冗余字段
  2. 高频查询字段建立索引
  3. 避免select * 全表查询、避免模糊前置%
  4. 优化联表查询逻辑
  5. 对高频静态数据做缓存,降低数据库压力。

5. 多表联查的实现方式?

使用内连接、左连接、右连接实现多表关联查询,根据业务场景选用,优先左连接保证数据完整性,精准关联多表业务数据,满足复杂数据查询需求。

6. 为什么选 MySQL?

MySQL 开源关系型数据库,InnoDB 支持事务行锁,适合业务系统。

  1. 索引、事务、主从了解
  2. utf8mb4 字符集
  3. 答辩说明版本与引擎

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

7. 如何设计 ER?

JDK 开发工具包(编译+运行),JRE 运行环境,JVM 执行字节码的虚拟机。

  1. 开发装 JDK,部署可只需 JRE(Boot jar 可带 JRE)
  2. JVM 负责 GC、类加载
  3. 答辩说清三者关系

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

8. 范式到第几?有无反范式?

三范式减少冗余:1NF 原子性、2NF 消除部分依赖、3NF 消除传递依赖;报表可适度冗余。

  1. 设计权衡性能与规范
  2. 答辩说明表设计思路
  3. ER 与范式一致

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

9. 索引如何选择?

索引加速查询,B+ 树结构;过多索引影响写入;遵循最左前缀联合索引。

  1. where/order by 字段考虑索引
  2. 避免函数包列导致失效
  3. 答辩指出项目索引字段

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

10. 事务 ACID?

事务 ACID:原子性(全成或全回滚)、一致性、隔离性、持久性。

  1. 转账扣款+加款必须同事务
  2. @Transactional 保证
  3. 答辩举例业务场景

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

11. 隔离级别与脏读幻读?

隔离级别:读未提交、读已提交、可重复读、串行化;越高越安全性能越低。

  1. 脏读/不可重复读/幻读
  2. MySQL InnoDB 默认可重复读
  3. 答辩了解概念

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

12. EXPLAIN 看什么?

EXPLAIN 分析 SQL 执行计划:type、key、rows、Extra,查是否走索引。

  1. 避免 ALL 全表扫描
  2. 优化慢查询第一步
  3. 答辩带一条 SQL 演示

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

13. 主键用自增还是 UUID?

数据源(DataSource)管理数据库连接,常用 Druid/HikariCP 连接池。

  1. 连接池复用连接,控制并发与超时
  2. 配置 URL、用户名、密码、最大连接数等
  3. 答辩可说明为何不用 DriverManager 每次新建连接

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

14. 软删还是硬删?

逻辑删除用 deleted/is_deleted 标志位标记删除,查询默认带 deleted=0 条件。

  1. 数据可恢复,满足审计需求
  2. MyBatis-Plus 可用 @TableLogic 自动过滤
  3. 注意唯一索引与业务查询都要带删除条件

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

15. 如何防超卖/负数库存?

事务保证一组 SQL 同成功同失败,Spring @Transactional 或数据库 BEGIN/COMMIT。

  1. 下单扣库存典型场景
  2. 隔离级别影响并发问题
  3. 答辩指出哪些 Service 加了事务

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

16. InnoDB vs MyISAM?

InnoDB 支持事务与行级锁,默认引擎;MyISAM 表锁无事务,适合只读场景。

  1. 业务表选 InnoDB
  2. 聚簇索引
  3. 答辩说明引擎选择

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

17. 聚簇索引?

索引加速查询,B+ 树结构;过多索引影响写入;遵循最左前缀联合索引。

  1. where/order by 字段考虑索引
  2. 避免函数包列导致失效
  3. 答辩指出项目索引字段

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

18. 覆盖索引?

索引加速查询,B+ 树结构;过多索引影响写入;遵循最左前缀联合索引。

  1. where/order by 字段考虑索引
  2. 避免函数包列导致失效
  3. 答辩指出项目索引字段

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

19. 联合索引顺序?

索引加速查询,B+ 树结构;过多索引影响写入;遵循最左前缀联合索引。

  1. where/order by 字段考虑索引
  2. 避免函数包列导致失效
  3. 答辩指出项目索引字段

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

20. 索引失效例子?

索引加速查询,B+ 树结构;过多索引影响写入;遵循最左前缀联合索引。

  1. where/order by 字段考虑索引
  2. 避免函数包列导致失效
  3. 答辩指出项目索引字段

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

21. 连接类型?

连接池预先创建并复用数据库连接,控制最大连接数、空闲回收与超时。

  1. 避免频繁创建连接的开销
  2. Druid/Hikari 提供监控与泄漏检测
  3. 答辩说明连接数配置依据

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

22. 分页优化?

分页限制单次查询数据量,常用 PageHelper 或 LIMIT offset,size。

  1. 前端传 pageNum/pageSize,后端封装 PageInfo
  2. 深分页 offset 过大性能差,可延迟关联优化
  3. 答辩演示列表页分页接口与 SQL

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

23. 深分页问题?

分页限制单次查询数据量,常用 PageHelper 或 LIMIT offset,size。

  1. 前端传 pageNum/pageSize,后端封装 PageInfo
  2. 深分页 offset 过大性能差,可延迟关联优化
  3. 答辩演示列表页分页接口与 SQL

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

24. 锁类型?

简要结论:行锁表锁间隙锁。

关于「锁类型」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合本项目数据库表与 SQL,结合自己的代码、配置或表结构举例,避免只背关键词

25. MVCC?

JDK 开发工具包(编译+运行),JRE 运行环境,JVM 执行字节码的虚拟机。

  1. 开发装 JDK,部署可只需 JRE(Boot jar 可带 JRE)
  2. JVM 负责 GC、类加载
  3. 答辩说清三者关系

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

26. 死锁?

死锁四条件:互斥、占有且等待、不可抢占、循环等待;避免固定加锁顺序。

  1. tryLock 超时
  2. 银行家算法了解
  3. 答辩说明项目是否多线程

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

27. 字符集?

简要结论:utf8mb4。

关于「字符集」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合本项目数据库表与 SQL,结合自己的代码、配置或表结构举例,避免只背关键词

28. 金额 decimal?

JavaScript Number 精度有限,Long 型 ID 序列化 JSON 可能丢失,需转 String。

  1. @JsonSerialize 或全局 Jackson 配置
  2. 前端以字符串接收大整数
  3. 答辩说明雪花 ID 场景

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

29. 时间类型?

简要结论:datetime / timestamp。

关于「时间类型」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合本项目数据库表与 SQL,结合自己的代码、配置或表结构举例,避免只背关键词

30. 多对多?

简要结论:中间表。

关于「多对多」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合本项目数据库表与 SQL,结合自己的代码、配置或表结构举例,避免只背关键词

31. 树形存储?

简要结论:parent_id。

关于「树形存储」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合本项目数据库表与 SQL,结合自己的代码、配置或表结构举例,避免只背关键词

32. 唯一约束?

简要结论:业务唯一。

关于「唯一约束」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合本项目数据库表与 SQL,结合自己的代码、配置或表结构举例,避免只背关键词

33. 外键?

简要结论:逻辑或物理。

关于「外键」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合本项目数据库表与 SQL,结合自己的代码、配置或表结构举例,避免只背关键词

34. 字典表?

枚举/constants 管理订单状态等,状态机规定合法迁移,防止非法跳转。

  1. 如 待支付→已支付→已完成
  2. 更新时校验当前状态
  3. 答辩结合业务状态字段

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

35. 乐观锁 version?

乐观锁用 version 字段:更新时 WHERE id=? AND version=?,成功后 version+1。

  1. 适合并发冲突较少的场景
  2. 失败则提示用户刷新重试
  3. 答辩对比悲观锁 SELECT FOR UPDATE

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

36. SELECT FOR UPDATE?

统一异常处理避免把堆栈直接返回前端,提升体验与安全。

  1. @ControllerAdvice + @ExceptionHandler 捕获业务/系统异常
  2. 封装统一 Result(code/msg/data)
  3. 记录日志便于排错,答辩可展示全局异常类

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

37. 备份?

MySQL 开源关系型数据库,InnoDB 支持事务行锁,适合业务系统。

  1. 索引、事务、主从了解
  2. utf8mb4 字符集
  3. 答辩说明版本与引擎

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

38. 慢查询日志?

日志用于排错、审计与性能分析,常用 SLF4J + Logback/Log4j2。

  1. 分级别:ERROR/WARN/INFO/DEBUG
  2. 关键业务、异常、慢接口应记录
  3. 生产避免打印敏感信息与过量 DEBUG

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

39. 连接池?

连接池预先创建并复用数据库连接,控制最大连接数、空闲回收与超时。

  1. 避免频繁创建连接的开销
  2. Druid/Hikari 提供监控与泄漏检测
  3. 答辩说明连接数配置依据

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

40. NULL 坑?

简要结论:三值逻辑。

关于「NULL 坑」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合本项目数据库表与 SQL,结合自己的代码、配置或表结构举例,避免只背关键词

41. 审计字段?

简要结论:创建/更新时间。

关于「审计字段」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合本项目数据库表与 SQL,结合自己的代码、配置或表结构举例,避免只背关键词

42. 敏感加密?

日志脱敏对手机号、身份证等打码,防止敏感信息泄露。

  1. 自定义 log 格式或 AOP
  2. 接口返回也可 @JsonIgnore
  3. 答辩体现安全意识

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

43. 权限账号?

权限设计常用 RBAC:用户—角色—权限,菜单与接口双重校验。

  1. 前端隐藏按钮不等于安全,后端必须鉴权
  2. 拦截器/过滤器校验登录态与角色
  3. 答辩演示管理员与普通用户差异

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

44. 结合项目讲表?

Java 基础题答辩策略:先答概念,再指项目中类/方法/配置印证,最后说注意点。

  1. 准备 2~3 段可打开的核心代码
  2. 避免只背八股
  3. 体现真的写过代码

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

45. 结合项目讲 SQL?

Java 基础题答辩策略:先答概念,再指项目中类/方法/配置印证,最后说注意点。

  1. 准备 2~3 段可打开的核心代码
  2. 避免只背八股
  3. 体现真的写过代码

结合毕设:结合本项目数据库表与 SQL,可指出具体类名、配置项或表结构,避免只背概念。

46. 最大设计体会?

简要结论:先理业务再落表。

关于「最大设计体会」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合本项目数据库表与 SQL,结合自己的代码、配置或表结构举例,避免只背关键词