0
点赞
收藏
分享

微信扫一扫

数据库表设计的10条军规

王传学 05-24 09:00 阅读 17

以下是数据库表设计的10条核心原则(军规),综合了行业通用规范和实践经验,涵盖结构优化、性能保障及可维护性关键点:

一、严格遵循范式化设计

  1. 基础三范式
  • 第一范式(1NF):每个字段存储原子性数据(不可再拆分),如地址拆分为省、市、街道字段。
  • 第二范式(2NF):消除部分依赖,非主属性必须完全依赖主键(如订单表中商品价格应独立存储到商品表)。
  • 第三范式(3NF):消除传递依赖,非主属性不能互相依赖(如员工表中部门名称应存储到部门表)。

二、反范式优化策略

  1. 冗余数据权衡
    在频繁查询的场景,允许适度冗余提升性能。例如:
  • 在文章表中添加评论计数字段,通过触发器维护数据,避免每次统计都联表查询。
  • 电商订单表可冗余常用商品信息(如名称、快照价格),减少联表开销。

三、索引黄金法则

  1. 复合索引最左前缀匹配
    建立索引(last_name, age)时,仅支持WHERE last_name='A'WHERE last_name='A' AND age=30的查询,无法加速纯age条件查询。
  2. 索引覆盖与选择性平衡
  • 高频查询字段优先创建索引,但单表索引不超过5个(避免写入性能下降)。
  • 对性别等低区分度字段禁用索引,对手机号等高区分度字段建立唯一索引。

四、数据完整性保障

  1. 约束机制
  • 主键约束:自增ID或业务唯一标识(如用户身份证号)。
  • 外键约束:级联更新/删除保护关联数据(如删除用户时同步删除订单)。
  • 检查约束:限制字段取值范围(如性别仅允许'M'/'F')。

五、高性能结构设计

  1. 垂直拆分
    将大字段(如用户备注、商品详情)拆分到独立表,减少主表IO压力。
  2. 水平分表
    按时间或哈希分区存储日志类数据,例如每年订单数据独立成表,配合分区键查询。

六、扩展性与安全

  1. 可扩展字段预留
    增加ext_infoJSON字段存储未来可能新增的非核心属性(如商品促销标签)。
  2. 数据加密与权限
  • 敏感字段(如密码、手机号)使用AES加密存储。
  • 通过RBAC模型控制表级访问权限,禁止直接SELECT *查询。

七、命名与类型规范

  1. 语义化设计
  • 表名使用业务模块_实体格式(如finance_payment);
  • 字段类型精确匹配(金额用DECIMAL(15,2),IP地址用VARCHAR(45)而非整数)。

扩展建议

  • 版本控制:通过schema_version字段记录表结构变更历史。
  • 冷热分离:将3个月前的订单数据归档到历史库,提升在线库性能。

通过以上原则,可在保障数据一致性的同时,实现高性能与易维护的平衡。具体实施需结合业务场景,如高并发写入系统需弱化外键约束,数据仓库可放宽范式要求等。

举报

相关推荐

0 条评论