美文网首页
数据库设计规范

数据库设计规范

作者: 余头 | 来源:发表于2018-04-19 23:18 被阅读0次

一、数据库命名规范

a、所有数据库对象名称必须使用小写字母并用下划线分割(数据库对大小写敏感)
b、禁用mysql保留关键字
c、命名尽量不超过32个字符
d、临时表以tmp为前缀并以日期为后缀
备份表以bak为前缀并以日期为后缀

二、数据库基本设计规范

a、所有表使用Innodb存储引擎(5.6以后默认引擎,支持事务,行级锁,更好的恢复性,高并发下性能更好)
b、数据库和表字符集统一使用UTF8(避免由于字符集转换产生的乱码)
c、所有表和字段添加注释(从一开始就进行数据字典的维护)
d、尽量控制单表数据量的大小,500w以内
(限制取决于存储设置和文件系统)
e、减小表的宽度(mysql限制最多存储4096列)保证内存缓存命中率
f、禁止数据库中存储图片,文件等二进制数据
g、禁止在线上做数据库压力测试

三、数据库索引设计规范

a、限制每张表索引数量,单张表索引不超过5个(增加查询效率同样也会降低插入和更新效率)

b、每个Innodb表必须有一个主键(不使用更新频繁的列作为主键,不使用多列主键)

c、合理选择复合索引列顺序

image.png

d、避免建立冗余索引和重复索引

primary key(id) index(id) unique index(id)

index(a,b,c) index(a,b)

e、对频繁查询优先考虑使用覆盖索引

image.png

f、尽量避免使用外键(不建议使用外键约束,但一定在表与表间关联键上建立索引)

image.png

四、数据库字段设计规范

a、选择复合存储需要最小数据类型
将字符串转换为数字类型存储
INET_ATON(’255.255.255.255’)= 4294967295
INET_NTOA(4294967295) = ’255.255.255.255’
非负数据采用无符号整型进行存储
VARCHAR(N) N代表的是字符数而不是字节数
b、避免使用TEXT BLOG数据类型
避免使用ENUM数据类型
c、尽可能把所有列定义为not null 属性
d、使用timestamp(4字节 到2038年)或datetime类型存储时间
e、金额类数据必须使用decimal类型
非精准浮点(float double)精准浮点(decimal)

五、数据库SQL开发规范

a、建议使用预编译进行数据库操作

image.png

b、避免数据类型隐式类型转换(会导致索引失效)

select * where id=“111"

c、充分利用表上已存在的索引

image.png

d、程序连接不同数据库使用不同账号,禁止跨库查询

e、禁止select * 查询(消耗更多cpu和io及网络带宽资源 减少表结构变更 无法使用覆盖索引)

f、禁止不含字段列表insert语句

g、避免子查询可优化为join操作

子查询结果无法使用索引

子查询会产生临时表操作,若子查询数据量大则严重影响效率

消耗更多cpu和io资源

h、避免使用join关联太多的表

i、减少同数据库的交互次数

j、in代替or

k、禁止使用order by rand() 进行随机排序

l、where从句禁止对列进行函数转换和计算

m、明显不会有重复值时使用union all 而不是union

n、拆分复杂大sql为多个小sql

六、数据库操作行为规范

a、超100w行批量写操作,要分批多次操作
b、对大表数据结构修改会造成严重锁表操作
大表pt-online-schema-change修改表结构
c、禁止为程序使用账号赋予super权限
d、对于程序连接数据库账号,遵循权限最小原则

相关文章

网友评论

      本文标题:数据库设计规范

      本文链接:https://www.haomeiwen.com/subject/uywgkftx.html