日期:2026-07-11
难度:中等
标签:#面试 #MySQL #表设计 #数据库设计 #VIP
一句话答案
建表要围绕业务不变量和查询模式,合理设计主键、字段类型、NULL 与默认值、约束和索引,并提前考虑字符集、时间金额、数据增长、冷热归档、审计与迁移成本。
面试口语版
我先从领域模型和访问模式出发,不为“范式漂亮”脱离业务。主键优先短、稳定、非业务可变值;字段选能覆盖范围的最小合理类型,金额用 DECIMAL,时间明确时区,字符串长度按领域约束,统一 utf8mb4 和排序规则。能由数据库保证的不变量用 NOT NULL、唯一索引或约束表达。索引根据 WHERE、JOIN、ORDER BY 设计联合索引,避免重复和过多索引。大字段、冷热数据和高增长表要考虑拆分、归档与分区边界;同时保留 created_at、updated_at 等审计字段,并评估在线 DDL 和未来扩容。
原理拆解
| 维度 | 检查项 |
|---|---|
| 主键 | 短、稳定、唯一,评估自增或分布式 ID |
| 字段 | 类型、长度、NULL、默认值、单位与时区 |
| 约束 | 唯一性、检查约束、关系完整性 |
| 索引 | 匹配查询、控制数量、避免重复 |
| 生命周期 | 增长率、归档、逻辑删除、大字段 |
| 运维 | 字符集、DDL、备份、审计、权限 |
关键细节
- 不要用字符串保存结构化数字、时间或逗号分隔列表。
- 主键越宽,InnoDB 所有二级索引通常也越大。
- 默认值必须有业务含义,避免用 0 或空串混淆“未知”和真实值。
- 表和列注释、命名规范能显著降低长期沟通成本。
面试官追问
- 为什么不建议 UUID 字符串直接做聚簇主键?
- NULL 与默认值如何选择?
- 联合索引字段顺序怎么设计?
- 分区能替代分库分表吗?
高分补充
优秀表设计不是一次定稿,应以增长模型和迁移能力为约束,确保未来变化可在线演进。
学习清单
- 用主键、字段、约束、索引、生命周期、运维六项做建表评审。