归纳数据库规范
做了5年开发,期间用过Oracle(9、10、11)、Sql Server(2005、2008、2012)、DB2、Mysql、PostgreSQL、Access、Sqllite、Redis等。 今天有空归纳一下数据库方面的设计、使用规范。
开发、测试、线上环境隔离
必须使用UTF8字符集
新数据库默认使用utf8mb4
字符集。
utf8mb4是utf8的超集,支持emoji表情以及部分不常见的汉字,在utf8下会表现为乱码。
默认使用这个字符集的原因是:标准、万国码、无须转码、无乱码风险
数据库、数据字段必须加入中文注释
禁止使用存储过程、视图、触发器、Event
背景:并发量大、数据量大的互联网业务
重点:吞吐量,性能优先、对数据库性能影响较大的数据库特性尽量较少使用
- 禁止使用外键,如果需要外键完整性约束,需要应用程序控制
- 禁止大表使用JOIN查询,禁止大表使用子查询
- 只允许使用内网域名,而不是ip连接数据库
缓存(memcache、redis)的连接,服务(service)的连接都必须使用内网域名,机器迁移/平滑升级/运维管理
提高工作效率
- 禁止使用小数存储国币
- 禁止使用负向查询NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等,会导致全表扫描
- 禁止使用应用程序配置文件内的帐号手工访问线上数据库
- 禁止非DBA对线上数据库进行写操作,修改线上数据需要提交工单,由DBA执行,提交的SQL语句必须经过测试
- 分配非DBA以只读帐号,必须通过VPN+跳板机访问授权的从库