数据库设计规范

 

以下规范是根据视频与自己的日常数据库设计整理出来的,如果说的不对,请见谅。

数据库命名规范

所有的数据库对象(表名)名称必须使用小写字母并用下划线分割。mysql数 据库识别大小写字母。

所有数据库对象名称禁止使用mysql保留关键字。

数据库对象的命名必须做到见名明义,最大不超过32字符。

所有的临时表必须以tmp为前缀并以日期为后缀

所有的备份库,备份表以bak为前缀并以日期为后缀

所有存储相同数据的列名与列类型必须一致

数据库基本设计规范(存储引擎选择)

所有表必须使用Innodb存储引擎(如何不存在特殊清楚情况的话,5.6以后的默认引擎,支持事务)

字符集统一使用UTF8(必须字符集转换产生乱码,造成损失数据)

汉字UTF8字符集占用3个字节

所有的表和字段都需要添加注释(从一开始进行数据字典的维护)

尽量控制单表数据量的大小,建议控制在500万行以内(500万不是Mysql的限制,可以用历史数据归档)

谨慎使用MySql分区表(在物理上表现多个文件,在逻辑上表现为一个表,建议使用物理分表的方式管理大数据)

建议使用冷热数据分离,减小表的宽度(经常一起使用的列放在一个表中)

禁止在表中建立预留字段(预留字段的命名很难做到见名明义,预留字段无法确认存储的数据类型)

对预留字段类型的修改,会对表进行锁定。

禁止在数据库中存储图片,文件等二进制数据

  • 数据库索引设计规范

索引对数据的查询性能来说是非常重要。

限制每张表的索引数量,建议单张表索引不应超过5个(可增加查询效率,降低增加与删除的效率)

每个Innodb表必须有一个主键。(不能使用更新频繁的列作为主键)

不使用UUID,MD5,HASH,字符串列作为主键

主键建议选择使用自增ID值。

对于频繁的查询优先考虑使用覆盖索引

尽量避免使用外建(外建可用于保证数据的参照完整性,但建议在业务端实现。外建影响父表盒子表的写操作从而降低性能)

    • 数据库字段设计规范

优先选择符合存储需要的最小的数据类型(将字符串转化为数字类型存储【INET_ATON,INET_NTOA】)

避免使用TEXT BLOB数据类型

避免使用ENUM数据类型

尽可能把所有列定义为NOT NULL

使用TIMESTAMP 或 DATETIME存储时间

同财务相关的金额类的数据,必须使用decimal类型(Decimal为精准浮点数,不会丢失精度)

  • 数据库SQL开发规范

在程序中国使用预编译语句进行数据库操作(避免Sql注入,只传递参数,提高处理效率)

避免数据类型的隐士转换(导致索引失败)

合理利用表上已存在的索引(避免使用双%号的查询条件)

数据库设计时,应该对以后的扩展做考虑。

程序连接不同数据库使用不同的账号,禁止跨库查询(降低业务耦合度)

禁止使用select * (消耗过多的CPU和IO以及网络带宽资源,无法使用覆盖索引)

禁止使用不含字段列表的INSERT语句

避免使用子查询,可以把子查询优化为Join操作

避免使用JOIN关联太多的表(建议不超过5个)

减少同数据库的交互次数

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

拆分复杂的大SQl为多个小SQL

  • 数据库操作行为规范(主要是面对运维人员)

超100万的行的批量写操作,要分批多次进行操作(大批量的写操作会导致严重的主从延迟) 

禁止为程序使用的账号赋予super权限

对于程序连接数据库账号,遵循权限最小原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值