玖叶教程网

前端编程开发入门

mysql数据库设计规范(一)(mysql数据库设计的主要步骤)

安全规范

(1)禁止在数据库中明文储存密码,手机号等用户敏感信息,需要加密后再进行存储。

(2)禁止开发同学直接导出涉及用户敏感信息给业务同学,如需要,则需要上级领导审批。

(3)涉及导出功能的操作,用户的敏感数据都需要进行脱敏或者加密。

(4)对链接数据的IP都要进行设置白名单,杜绝非法IP接入。

(5)线上链接数据库的用户名和密码要定期进行更换。

基础规范

(1)尽量不要在数据库做复杂运算,复杂运算需要移到应用里完成。

(2)拒绝大SQL,拒绝大事务,拒绝大批量,可转化到业务端完成。

(3)避免使用存储过程、触发器、函数等,容易造成业务逻辑与数据库耦合。

(4)数据库表和字段必须加入中文注释。

(5)不在数据库存储图片、文件等大数据。

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

(7)数据库设计时,需要问下自己是否对以后的扩展性进行了考虑。

(8)利用pt-query-digest定期分析slow query log并对其进行优化。

(9)使用内网域名而不是ip连接数据库。

(10)如果数据量或数据增长在前期规划时就较大,那么在设计评审时就应加入分表策略。

(11)要求所有研发SQL关键字全部是小写,每个词只允许有一个空格。

命名规范

(1)库名、表名、字段名要小写,下划线风格,不超过32个字符,必须见名知意,建议使用名词而不是动词,词义与业务、产品线等相关联,禁止拼音英文混用。

(2)普通索引命名格式:idx_表名_索引字段名(如果以首个字段名为索引有多个,可以加上第二个字段名,太长可以考虑缩写),唯一索引命名格式:uk_表名_索引字段名(索引名必须全部小写,长度太长可以利用缩写),主键索引命名:pk_ 字段名。

(3)库名、表名、字段名禁止使用MySQL保留字。

(4)临时库表名必须以tmp为前缀,并以日期为后缀。

(5)备份库表必须以bak为前缀,并以日期为后缀。

(6)用HASH进行散表,表名后缀使用16进制数,下标从0开始。

(7)按日期时间分表需符合YYYY[MM][DD][HH]格式

(8)散表如果使用md5(或者类似的hash算法)进行散表,表名后缀使用16进制,比如user_ff。

(9)使用CRC32求余(或者类似的算术算法)进行散表,表名后缀使用数字,数字必须从0开始并等宽,比如散100张表,后缀从00-99。

(10)使用时间散表,表名后缀必须使用特定格式,比如按日散表user_20110209、按月散表user_201102。

(11)表达是与否概念的字段,使用 is _ xxx 的方式进行命名。

库设计规范

(1)数据库使用InnoDB存储引擎。

(2)数据库和表的字符集统一使用UTF8。

(3)不同业务,使用不同的数据库,避免互相影响。

(4)所有线上业务库均必须搭建MHA高可用架构,避免单点问题。

表设计规范

(1)建表规范示例。

CREATE TABLE `student_info` (    
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',    
`stu_name` varchar(10) NOT NULL DEFAULT '' COMMENT '姓名',    
`stu_score` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '总分',    
`stu_num` int(11) NOT NULL COMMENT '学号',    
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',    
`status` tinyint(4) DEFAULT '1' COMMENT '1代表记录有效,0代表记录无效',      
PRIMARY KEY (`id`),      
UNIQUE KEY `uk_student_info_stu_num` (`stu_num`) USING BTREE,    
KEY `idx_student_info_stu_name` (`stu_name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='学生信息表';?

(2)禁止使用外键,如果有外键完整性约束,需要应用程序控制。

(3)每个Innodb 表必须有一个主键。

(4)单表列数目最好小于50。

(5)禁止使用分区表。

(6)拆分大字段和访问频率低的字段,分离冷热数据。

(7)采用合适的分库分表策略,例如千库十表、十库百表等(建议表大小控制在2G)。

(8)单表不超过50个int字段;不超过20个char字段,不超过2个text字段。

(9)表默认设置创建时间戳和更改时间戳字段。

(10)日志类型的表可以考虑按创建时间水平切割,定期归档历史数据。

(11)禁止使用order by rand()。

(12)可以结合使用hash、range、lookup table进行散表。

(13)每张表数据量建议控制在500w以下,超过500w可以使用历史数据归档或分库分表来实现(500万行并不是MySQL数据库的限制。过大对于修改表结构,备份,恢复都会有很大问题。MySQL没有对存储有限制,取决于存储设置和文件系统)。

(14)禁止在表中建立预留字段。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言