[规范]库表规范汇总

本文探讨了数据库设计的关键原则,包括禁用外键以优化性能,采用InnoDB引擎和预设分表策略以应对大数据量,强调字段定义一致性及使用分布式ID确保全局唯一性。此外,还建议避免使用特定数据类型,如float和blob,以及限制varchar长度以优化存储效率。同时,提出了索引设计的注意事项,如避免函数计算和物理删除,推荐使用datetime字段记录时间戳。
摘要由CSDN通过智能技术生成

表设计

ID字段作为自增主键,禁止在非事务内作为上下文作为条件进行数据传递
禁止使用外键。
业务逻辑规则在应用层进行实现,减少外键约束检查和变更带来的性能问题,对未来扩展预留空间
多表中的相同列,必须保证列定义一致
国内表默认使用InnoDB,表字符集默认使用gbk,国际默认使用utf8的表
单表一到两年内数据量超过500w或数据容量超过10G考虑分表,且需要提前考虑历史数据迁移或应用自行删除历史数据
流水数据必须提前分表,避免后续数据迁移工作,分表数据必须建立uuid字段,进行全局唯一标识用来全局防重,可以使用分布式id,其他情况还可以结合业务类型bizType,用户pin等进行拼接防重
单条记录大小禁止超过8k(列长度(中文)2(gbk)/3(utf8)+列长度(英文)1)
日志类数据不建议存储在MySQL上,优先考虑Hbase或OB,如需要存储请找DBA评估使用压缩表存储

字段设计

表必须定义主键,默认为id,整型自增,一般设置为bigint类型
结合聚簇索引B+Tree寻址逻辑,充分利用顺序io磁盘存储,单次load内存数据多且io交互少,带来的高性能。目前线上数据库都是SSD固态硬盘,可以忽略寻址损耗,但是也要知其所以然
表被索引列必须定义为not null,并设置default值。
减少空值带来的验证判断
禁止使用float、double类型,建议使用decimal或者int替代
禁止使用blob、text类型保留大文本、文件、图片,建议使用其他方式存储(TFS/SFS),MySQL只保存指针信息
禁止使用varchar类型作为主键语句设计
数值精度字段采用decimal字段进行存储,一般银行业务保留小数点后6位,结合Java中的BigDecimal匹配使用,注意BigDecimal除不尽的情况,根据业务需要进行ROUNDING_MODE设定
表必须包含createTime和updateTime字段,即表必须包含记录创建时间和修改时间的字段
规范要求修改时间字段必须设置为updateTime字段,数据部门,dba会对该字段进行识别来进行数据抽取、变更判断等,不要设置成其他字段名称
且必须配置 updateTime datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’

索引设计

语句设计

数据更新建议使用二级索引先查询出主键,再根据主键进行数据更新
避免隐式转换带来的索引失效,禁止使用非同类型的列进行等值查询
动态SQL注意where条件为空的情况。
update语句必须有必填项进行更新操作,防止全量更新,或者兜底使用错误语句进行拼接让SQL失效
不允许使用物理删除,对表数据进行逻辑删除。
防止存储数据频繁移动重建,非顺序插入带来的性能消耗,避免存储磁盘产生页分裂,增加读取数据的IO次数消耗
避免函数计算带来的索引失效问题

其他

禁止使用:存储过程、触发器、函数、视图、事件等MySQL高级功能
禁止使用跨库查询
禁止使用子查询,建议将子查询转换成关联查询
禁止核心业务流程SQL包含:计算操作、多表关联、表遍历case when等复杂查询,建议拆分成单表简单查询
varchar长度设计需要根据业务实际需要进行长度控制,禁止预留过长空间。例如status使用varchar(128)进行存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大摩羯先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值