以下是数据库表设计的10条核心原则(军规),综合了行业通用规范和实践经验,涵盖结构优化、性能保障及可维护性关键点:
一、严格遵循范式化设计
- 基础三范式
- 第一范式(1NF):每个字段存储原子性数据(不可再拆分),如地址拆分为省、市、街道字段。
- 第二范式(2NF):消除部分依赖,非主属性必须完全依赖主键(如订单表中商品价格应独立存储到商品表)。
- 第三范式(3NF):消除传递依赖,非主属性不能互相依赖(如员工表中部门名称应存储到部门表)。
二、反范式优化策略
- 冗余数据权衡
在频繁查询的场景,允许适度冗余提升性能。例如:
- 在文章表中添加评论计数字段,通过触发器维护数据,避免每次统计都联表查询。
- 电商订单表可冗余常用商品信息(如名称、快照价格),减少联表开销。
三、索引黄金法则
- 复合索引最左前缀匹配
建立索引(last_name, age)
时,仅支持WHERE last_name='A'
或WHERE last_name='A' AND age=30
的查询,无法加速纯age
条件查询。 - 索引覆盖与选择性平衡
- 高频查询字段优先创建索引,但单表索引不超过5个(避免写入性能下降)。
- 对性别等低区分度字段禁用索引,对手机号等高区分度字段建立唯一索引。
四、数据完整性保障
- 约束机制
- 主键约束:自增ID或业务唯一标识(如用户身份证号)。
- 外键约束:级联更新/删除保护关联数据(如删除用户时同步删除订单)。
- 检查约束:限制字段取值范围(如性别仅允许'M'/'F')。
五、高性能结构设计
- 垂直拆分
将大字段(如用户备注、商品详情)拆分到独立表,减少主表IO压力。 - 水平分表
按时间或哈希分区存储日志类数据,例如每年订单数据独立成表,配合分区键查询。
六、扩展性与安全
- 可扩展字段预留
增加ext_info
JSON字段存储未来可能新增的非核心属性(如商品促销标签)。 - 数据加密与权限
- 敏感字段(如密码、手机号)使用AES加密存储。
- 通过RBAC模型控制表级访问权限,禁止直接
SELECT *
查询。
七、命名与类型规范
- 语义化设计
- 表名使用
业务模块_实体
格式(如finance_payment
); - 字段类型精确匹配(金额用
DECIMAL(15,2)
,IP地址用VARCHAR(45)
而非整数)。
扩展建议
- 版本控制:通过
schema_version
字段记录表结构变更历史。 - 冷热分离:将3个月前的订单数据归档到历史库,提升在线库性能。
通过以上原则,可在保障数据一致性的同时,实现高性能与易维护的平衡。具体实施需结合业务场景,如高并发写入系统需弱化外键约束,数据仓库可放宽范式要求等。