概述
MySQL数据库与Oracle、SQLServer等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。无意中从github上看到一个大佬的MySQL数据库设计规范,顺便在这里分享一下。
1.规范背景与目的
MySQL数据库与Oracle、SQLServer等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更和处理流程、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。
2.设计规范2.1数据库设计
以下所有规范会按照、、三个级别进行标注,遵守优先级从高到低。
对于不满足和两个级别的设计,DBA会强制打回要求修改。
2.1.1库名库的名称必须控制在32个字符以内,相关模块的表名与表名之间尽量提现join的关系,如user表和user_login表。库的名称格式:业务系统名称_子系统名,同一模块使用的表名尽量使用统一前缀。一般分库名称命名格式是库通配名_编号,编号从0开始递增,比如wenda_以时间进行分库的名称格式是“库通配名_时间”创建数据库时必须显式指定字符集,并且字符集只能是utf8或者utf8mb4。创建数据库SQL举例:createdatabasedb1defaultcharactersetutf8;。2.1.2表结构表和列的名称必须控制在32个字符以内,表名只能使用字母、数字和下划线,一律小写。表名要求模块名强相关,如师资系统采用”sz”作为前缀,渠道系统采用”qd”作为前缀等。创建表时必须显式指定字符集为utf8或utf8mb4。创建表时必须显式指定表存储引擎类型,如无特殊需求,一律为InnoDB。当需要使用除InnoDB/MyISAM/Memory以外的存储引擎时,必须通过DBA审核才能在生产环境中使用。因为Innodb表支持事务、行锁、宕机恢复、MVCC等关系型数据库重要特性,为业界使用最多的MySQL存储引擎。而这是其他大多数存储引擎不具备的,因此首推InnoDB。建表必须有