在项目里,关于数据库表的设计,你会从哪些维度考虑?请具体谈谈字段层面的设计要点。
考察说明
考察候选人数据库表设计的实践经验,尤其是字段设计的规范性和合理性。
回答思路
- 【回答框架 1】数据库表设计需遵循三大范式,但实际中常做反范式化以提升查询性能。字段设计是核心,包括字段类型选择、长度、是否为空、默认值、索引设计等。
- 【回答框架 2】字段类型选择:数值型用INT/BIGINT,金额用DECIMAL避免浮点误差,字符串用VARCHAR并设合理长度,时间用DATETIME/TIMESTAMP。应避免使用TEXT等大字段,如必须使用可拆分或存外部存储。
- 【回答框架 3】字段属性设计:尽量设置NOT NULL并给默认值,便于索引和避免NULL值带来的额外开销;主键建议使用自增或雪花ID,避免业务字段做主键;创建时间、更新时间等审计字段应保留。
- 【回答框架 4】索引设计:根据查询频率和WHERE条件创建索引,注意区分普通索引、唯一索引、联合索引,联合索引需遵循最左前缀原则;避免索引失效,如对索引列使用函数或隐式类型转换。
- 【回答框架 5】实际项目中的表设计需结合业务场景,如用户表、订单表、商品表等,关系通过外键或逻辑关联,考虑数据量级和扩展性,必要时分库分表。
- 【关键点 1】字段类型选择需合理,金额用DECIMAL,时间用DATETIME/TIMESTAMP。
- 【关键点 2】尽量使用NOT NULL并设置默认值,减少NULL值带来的查询和存储开销。
- 【关键点 3】主键使用自增ID或雪花ID,避免使用业务字段。
- 【关键点 4】联合索引遵循最左前缀原则,根据查询频率设计索引。
- 【关键点 5】结合实际业务场景,考虑数据量、查询频率和扩展性。
- 【易错点 1】过度使用TEXT/BLOB等大字段会导致查询效率低,应避免或拆分。
- 【易错点 2】对索引列使用函数或隐式类型转换会导致索引失效,影响查询性能。
- 【易错点 3】过度反范式化可能导致数据不一致,需权衡性能和数据一致性。