保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

公司用的MySQL团队开发规范,太详细了,建议收藏

  作者:翁智华
  链接:https:www。cnblogs。comwzh2010p15027366。html
  数据库对象命名规范数据库对象
  数据库对象是数据库的组成部分,常见的有以下几种:表(Table)、索引(Index)、视图(View)、图表(Diagram)、缺省值(Default)、规则(Rule)、触发器(Trigger)、存储过程(StoredProcedure)、用户(User)等。命名规范是指数据库对象如数据库(SCHEMA)、表(TABLE)、索引(INDEX)、约束(CONSTRAINTS)等的命名约定。
  数据库对象全局命名规范
  1、命名使用具有意义的英文词汇,词汇中间以下划线分隔
  2、命名只能使用英文字母、数字、下划线,以英文字母开头
  3、避免用MySQL的保留字如:backup、call、group等
  4、所有数据库对象使用小写字母,实际上MySQL中是可以设置大小写是否敏感的,为了保证统一性,我们这边规范全部小写表示。
  数据库命名规范
  1、数据库命名尽量不超过30个字符。
  2、数据库命名一般为项目名称代表库含义的简写,比如IM项目的工作流数据库,可以是imflow。
  3、数据库创建时必须添加默认字符集和校对规则子句。默认字符集为UTF8(已迁移dumbo的使用utf8mb4)
  4、命名应使用小写。
  表命名规范
  1、常规表表名以t开头,t代表table的意思,命名规则即t模块(包含模块含义的简写)表(包含表含义的简写),比如用户模块的教育信息表:tusereduinfo。
  2、临时表(RD、QA或DBA同学用于数据临时处理的表),命名规则:temp前缀模块表日期后缀:tempusereduinfo20210719
  3、备份表(用于保存和归档历史数据或者作为灾备恢复的数据)命名规则,bak前缀模块表日期后缀:bakusereduinfo20210719
  4、同一个模块的表尽可能使用相同的前缀,表名称尽可能表达含义
  5、多个单词以下划线分隔
  6、常规表表名尽量不超过30个字符,temp表和bak表视情况而定,也尽量简短为宜,命名应使用小写
  字段命名规范
  1、字段命名需要表示其实际含义的英文单词或简写,单词之间用下划线进行连接,如serviceip、serviceport。
  2、各表之间相同意义的字段必须同名,比如a表和b表都有创建时间,应该统一为createtime,不一致会很混乱。
  3、多个单词以下划线分隔
  4、字段名尽量不超过30个字符,命名应该使用小写
  索引命名规范
  1、唯一索引使用uni字段名来命名:createuniqueindexuniuidontuserbasic(uid)。
  2、非唯一索引使用idx字段名来命名:createindexidxunamemobileontuserbasic(uname,mobile)。
  3、多个单词以下划线分隔。
  4、索引名尽量不超过50个字符,命名应该使用小写,组合索引的字段不宜太多,不然也不利于查询效率的提升。
  5、多单词组成的列名,取尽可能代表意义的缩写,如testcontact表memberid和friendid上的组合索引:idxmidfid。
  6、理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于建立了(a),(a,b),(a,b,c)。
  视图命名规范
  1、视图名以v开头,表示view,完整结构是v视图内容含义缩写。
  2、如果视图只来源单个表,则为v表名。如果视图由几个表关联产生就用v下划线()连接几个表名,视图名尽量不超过30个字符。如超过30个字符则取简写。
  3、如无特殊需要,严禁开发人员创建视图。
  4、命名应使用小写。
  存储过程命名规范
  1、存储过程名以sp开头,表示存储过程(storageprocedure)。之后多个单词以下划线()进行连接。存储过程命名中应体现其功能。存储过程名尽量不能超过30个字符。
  2、存储过程中的输入参数以i开头,输出参数以o开头。
  3、命名应使用小写。1createprocedurespmultiparam(iniidbigint,ininamevarchar(32),outomemovarchar(100))
  函数命名规范
  1、函数名以func开始,表示function。之后多个单词以下划线()进行连接,函数命名中应体现其功能。函数名尽量不超过30个字符。
  2、命名应使用小写。1createfunctionfuncformatdate(ctimedatetime)
  触发器命名规范
  1、触发器以trig开头,表示trigger触发器。
  2、基本部分,描述触发器所加的表,触发器名尽量不超过30个字符。
  3、后缀(i,u,d),表示触发条件的触发方式(insert,update或delete)。
  4、命名应使用小写。1DROPTRIGGERIFEXISTStrigattachlogd;
  2CREATETRIGGERtrigattachlogdAFTERDELETEONtdeptFOREACHROW;
  约束命名规范
  1、唯一约束:uk表名称字段名。uk是UNIQUEKEY的缩写。比如给一个部门的部门名称加上唯一约束,来保证不重名,如下:ALTERTABLEtdeptADDCONSTRAINTunnameUNIQUE(name);
  2、外键约束:fk表名,后面紧跟该外键所在的表名和对应的主表名(不含t)。子表名和父表名用下划线()分隔。如下:ALTERTABLEtuserADDCONSTRAINTfkuserdeptFOREIGNKEY(depno)REFERENCEStdept(id);
  3、非空约束:如无特殊需要,建议所有字段默认非空(not),不同数据类型必须给出默认值(default)。1idint(11)NOT,
  2namevarchar(30)DEFAULT,
  3deptIdint(11)DEFAULT0,
  4salaryfloatDEFAULT,
  4、出于性能考虑,如无特殊需要,建议不使用外键。参照完整性由代码控制。这个也是我们普遍的做法,从程序角度进行完整性控制,但是如果不注意,也会产生脏数据。
  5、命名应使用小写。
  用户命名规范
  1、生产使用的用户命名格式为code应用
  2、只读用户命名规则为read应用
  数据库对象设计规范存储引擎的选择
  1、如无特殊需求,必须使用innodb存储引擎。
  可以通过showvariableslikedefaultstorageengine来查看当前默认引擎。主要有MyISAM和InnoDB,从5。5版本开始默认使用InnoDB引擎。
  基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
  字符集的选择
  1、如无特殊要求,必须使用utf8或utf8mb4。
  在国内,选择对中文和各语言支持都非常完善的utf8格式是最好的方式,MySQL在5。5之后增加utf8mb4编码,mb4就是mostbytes4的意思,专门用来兼容四字节的unicode。
  所以utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。
  可以使用如下脚本来查看数据库的编码格式1SHOWVARIABLESWHEREVariablenameLIKEcharactersetORVariablenameLIKEcollation;
  2或
  3SHOWVARIABLESLikechar;
  表设计规范
  1、不同应用间所对应的数据库表之间的关联应尽可能减少,不允许使用外键对表之间进行关联,确保组件对应的表之间的独立性,为系统或表结构的重构提供可能性。目前业内的做法一般由程序控制参照完整性。
  2、表设计的角度不应该针对整个系统进行数据库设计,而应该根据系统架构中组件划分,针对每个组件所处理的业务进行数据库设计。
  3、表必须要有PK,主键的优势是唯一标识、有效引用、高效检索,所以一般情况下尽量有主键字段。
  4、一个字段只表示一个含义。
  5、表不应该有重复列。
  6、禁止使用复杂数据类型(数组,自定义等),Json类型的使用视情况而定。
  7、需要join的字段(连接键),数据类型必须保持绝对一致,避免隐式转换。比如关联的字段都是int类型。
  8、设计应至少满足第三范式,尽量减少数据冗余。一些特殊场景允许反范式化设计,但在项目评审时需要对冗余字段的设计给出解释。
  9、TEXT字段作为大体量文本存储,必须放在独立的表中,用PK与主表关联。如无特殊需要,禁止使用TEXT、BLOB字段。
  10、需要定期删除(或者转移)过期数据的表,通过分表解决,我们的做法是按照28法则将操作频率较低的历史数据迁移到历史表中,按照时间或者则曾Id做切割点。
  11、单表字段数不要太多,建议最多不要大于50个。过度的宽表对性能也是很大的影响。
  12、MySQL在处理大表时,性能就开始明显降低,所以建议单表物理大小限制在16GB,表中数据行数控制在2000W内。
  业内的规则是超过2000W性能开始明显降低。但是这个值是灵活的,你可以根据实际情况进行测试来判断,比如阿里的标准就是500W,百度的确是2000W。实际上是否宽表,单行数据所占用的空间都有起到作用的。
  13、如果数据量或数据增长在前期规划时就较大,那么在设计评审时就应加入分表策略,后续会有专门的文章来分析数据拆分的做法:垂直拆分(垂直分库和垂直分表)、水平拆分(分库分表和库内分表);
  14、无特殊需求,严禁使用分区表
  字段设计规范
  1、INT:如无特殊需要,存放整型数字使用UNSIGNEDINT型,整型字段后的数字代表显示长度。比如idint(11)NOT
  2、DATETIME:所有需要精确到时间(时分秒)的字段均使用DATETIME,不要使用TIMESTAMP类型。
  对于TIMESTAMP,它把写入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出。
  另外DATETIME存储的范围也比较大:
  timestamp所能存储的时间范围为:1970010100:00:01。000000到2038011903:14:07。999999。
  datetime所能存储的时间范围为:1000010100:00:00。000000到9999123123:59:59。999999。
  但是特殊情况,对于跨时区的业务,TIMESTAMP更为合适。
  3、VARCHAR:所有动态长度字符串全部使用VARCHAR类型,类似于状态等有限类别的字段,也使用可以比较明显表示出实际意义的字符串,而不应该使用INT之类的数字来代替;VARCHAR(N),
  N表示的是字符数而不是字节数。比如VARCHAR(255),可以最大可存储255个字符(字符包括英文字母,汉字,特殊字符等)。但N应尽可能小,因为MySQL一个表中所有的VARCHAR字段最大长度是65535个字节,且存储字符个数由所选字符集决定。
  如UTF8存储一个字符最大要3个字节,那么varchar在存放占用3个字节长度的字符时不应超过21845个字符。同时,在进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存。(如无特殊需要,原则上单个varchar型字段不允许超过255个字符)
  4、TEXT:仅仅当字符数量可能超过20000个的时候,才可以使用TEXT类型来存放字符类数据,因为所有MySQL数据库都会使用UTF8字符集。
  所有使用TEXT类型的字段必须和原表进行分拆,与原表主键单独组成另外一个表进行存放,与大文本字段的隔离,目的是。如无特殊需要,不使用MEDIUMTEXT、TEXT、LONGTEXT类型
  5、对于精确浮点型数据存储,需要使用DECIMAL,严禁使用FLOAT和DOUBLE。
  6、如无特殊需要,尽量不使用BLOB类型
  7、如无特殊需要,字段建议使用NOT属性,可用默认值代替
  8、自增字段类型必须是整型且必须为UNSIGNED,推荐类型为INT或BIGINT,并且自增字段必须是主键或者主键的一部分。
  索引设计规范
  1、索引区分度
  索引必须创建在索引选择性(区分度)较高的列上,选择性的计算方式为:selecttivitycount(distinctcname)count();如果区分度结果小于0。2,则不建议在此列上创建索引,否则大概率会拖慢SQL执行
  2、遵循最左前缀
  对于确定需要组成组合索引的多个字段,设计时建议将选择性高的字段靠前放。使用时,组合索引的首字段,必须在where条件中,且需要按照最左前缀规则去匹配。
  3、禁止使用外键,可以在程序级别来约束完整性
  4、Text类型字段如果需要创建索引,必须使用前缀索引
  5、单张表的索引数量理论上应控制在5个以内。经常有大批量插入、更新操作表,应尽量少建索引,索引建立的原则理论上是多读少写的场景。
  6、ORDERBY,GROUPBY,DISTINCT的字段需要添加在索引的后面,形成覆盖索引
  7、正确理解和计算索引字段的区分度,文中有计算规则,区分度高的索引,可以快速得定位数据,区分度太低,无法有效的利用索引,可能需要扫描大量数据页,和不使用索引没什么差别。
  8、正确理解和计算前缀索引的字段长度,文中有判断规则,合适的长度要保证高的区分度和最恰当的索引存储容量,只有达到最佳状态,才是保证高效率的索引。
  9、联合索引注意最左匹配原则:必须按照从左到右的顺序匹配,MySQL会一直向右匹配索引直到遇到范围查询(、、between、like)然后停止匹配。
  如:depno1andempnameandjob1如果建立(depno,empname,job)顺序的索引,job是用不到索引的。
  10、应需而取策略,查询记录的时候,不要一上来就使用,只取需要的数据,可能的话尽量只利用索引覆盖,可以减少回表操作,提升效率。
  11、正确判断是否使用联合索引(上面联合索引的使用那一小节有说明判断规则),也可以进一步分析到索引下推(IPC),减少回表操作,提升效率。
  12、避免索引失效的原则:禁止对索引字段使用函数、运算符操作,会使索引失效。这是实际上就是需要保证索引所对应字段的干净度。
  13、避免非必要的类型转换,字符串字段使用数值进行比较的时候会导致索引无效。
  14、模糊查询value会使索引无效,变为全表扫描,因为无法判断扫描的区间,但是value是可以有效利用索引。
  15、索引覆盖排序字段,这样可以减少排序步骤,提升查询效率
  16、尽量的扩展索引,非必要不新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
  举例子:比如一个品牌表,建立的的索引如下,一个主键索引,一个唯一索引1PRIMARYKEY(id),
  2UNIQUEKEYunibranddefine(appid,defineid)
  当你同事业务代码中的检索语句如下的时候,应该立即警告了,即没有覆盖索引,也没按照最左前缀原则:1selectbrandid,brandnamefromdsbrandsystemwherestatus?anddefineid?andappid?
  建议改成如下:1selectbrandid,brandnamefromdsbrandsystemwhereappid?anddefineid?andstatus?
  约束设计规范
  1、PK应该是有序并且无意义的,由开发人员自定义,尽可能简短,并且是自增序列。
  2、表中除PK以外,还存在唯一性约束的,可以在数据库中创建以uk作为前缀的唯一约束索引。
  3、PK字段不允许更新。
  4、禁止创建外键约束,外键约束由程序控制。
  5、如无特殊需要,所有字段必须添加非空约束,即not。
  6、如无特殊需要,所有字段必须有默认值。
  SQL使用规范select检索的规范性
  1、尽量避免使用select,join语句使用select可能导致只需要访问索引即可完成的查询需要回表取数。
  一种是可能取出很多不需要的数据,对于宽表来说,这是灾难;一种是尽可能避免回表,因为取一些根本不需要的数据而回表导致性能低下,是很不合算。
  2、严禁使用selectfromtname,而不加任何where条件,道理一样,这样会变成全表全字段扫描。
  3、MySQL中的text类型字段存储:
  3。1、不与其他普通字段存放在一起,因为读取效率低,也会影响其他轻量字段存取效率。
  3。2、如果不需要text类型字段,又使用了select,会让该执行消耗大量io,效率也很低下
  4、在取出字段上可以使用相关函数,但应尽可能避免出现now,rand,sysdate等不确定结果的函数,在Where条件中的过滤条件字段上严禁使用任何函数,包括数据类型转换函数。大量的计算和转换会造成效率低下,这个在索引那边也描述过了。
  5、分页查询语句全部都需要带有排序条件,否则很容易引起乱序
  6、用inunion替换or,效率会好一些,并注意in的个数小于300
  7、严禁使用前缀进行模糊前缀查询:如:selecta,b,cfromtnamewherealike‘name’;可以使用模糊后缀查询如:selecta,bfromtnamewherealike‘name’;
  8、避免使用子查询,可以把子查询优化为join操作
  通常子查询在in子句中,且子查询中为简单SQL(不包含union、groupby、orderby、limit从句)时,才可以把子查询转化为关联查询进行优化。
  子查询性能差的原因:
  子查询的结果集无法使用索引,通常子查询的结果集会被存储到临时表中,不论是内存临时表还是磁盘临时表都不会存在索引,所以查询性能会受到一定的影响;
  特别是对于返回结果集比较大的子查询,其对查询性能的影响也就越大;
  由于子查询会产生大量的临时表也没有索引,所以会消耗过多的CPU和IO资源,产生大量的慢查询。
  操作的规范性
  1、禁止使用不含字段列表的INSERT语句
  如:insertintovalues(a,b,c);应使用insertintotname(c1,c2,c3)values(a,b,c);。
  2、大批量写操作(UPDATE、DELETE、INSERT),需要分批多次进行操作
  大批量操作可能会造成严重的主从延迟,特别是主从模式下,大批量操作可能会造成严重的主从延迟,因为需要slave从master的binlog中读取日志来进行数据同步。
  binlog日志为row格式时会产生大量的日志
  程序上的约束
  后续我们团队的目标是研发评审工具对开发同学提交的建库、建表、刷数据、查询的语句进行分析,看看是否符合应有的规范。如果不符合,驳回修改。

沪能驭势无人驾驶车辆研发及制造项目落地洋浦新海南客户端、南海网、南国都市报3月25日消息(记者林文泉)近日,记者从洋浦国际了解到,沪能驭势无人驾驶车辆研发及制造项目落地洋浦,项目总投资5000万元,计划2022年底开始……不文明的乞丐我们的学校正门的旁边有一个不文明的乞丐。上次下午上学的时候,我刚从午托班走出来的时候,拿着一张试卷,就从那个乞丐的前面走过去,只听见纸被揉成一团的声音,一看,发现是那个l……发语音时为什么感觉自己声音好奇怪?题主朋友好像没用过录音机,没用过录音机录放自己的声音。用录音机录音后再播放出来的声音,明显感觉比自己说话直接听到的声音要尖细一些,也就是说,音调高一些。简单的理解,……为什么3D比排列三销量高那么多?3100期左右爱出豹子有规律性中奖率比排三高大家爱玩追豹子的有回报;而排三有时300多期也不会出豹子没规律性最少也是200多期开一期豹子追豹子号的人就不多;其实排三去年销量是和……原材料价格飙升引发新能源车涨价潮多家车企布局产业链以期保供稳中新社上海3月22日电(周卓傲)受原材料价格上涨影响,中国新能源车近期掀起了涨价潮。统计显示,进入3月份以来,已有近20家新能源车企宣布涨价,涉及车型近40款,特斯拉甚至在8天……广汽集团设立专门公司加快布局能源生态中证网讯(记者万宇)广汽集团(601238)近日对外宣布,设立广汽能源生态科技有限公司(暂定名),围绕国家双碳战略目标,构建充换储能源补给生态和电池循环利用生态,搭建智慧高效能……2020最新关于肺炎疫情的三年级作文精选我相信,在这场没有硝烟的战疫情中,我们一定会顺利!下面是小编收集整理的2020最新关于肺炎疫情的三年级作文精选,欢迎阅读参考!2020最新关于肺炎疫情的三年级作文精选1过……特斯拉每辆车研发费用合近1。9万元,是行业平均水平3倍鞭牛士3月25日消息,近日,StockApps。com新发布的一份报告比较了各大汽车厂商平均每辆汽车的研发费用,发现特斯拉的研发费用高于其他汽车厂商。StockApps。……推荐生日的作文1500字四篇在我们平凡的日常里,大家都不可避免地会接触到作文吧,借助作文可以宣泄心中的情感,调节自己的心情。那么,怎么去写作文呢?下面是小编收集整理的生日的作文1500字4篇,仅供参考,欢……比亚迪动力电池业务或将扩大朋友圈,蔚来小米拟搭载弗迪电池记者侯卓铠编辑3月25日,据36氪援引多位知情人士称,比亚迪旗下弗迪电池公司,正在新造车阵营开拓市场,近期正在与蔚来汽车和小米汽车。据知情人士表示,蔚来和弗迪电池的……慈善,如此简单作文600字莎士比亚曾经说过;慈悲不是出于勉强,它是像甘露一样从天上降下尘世;它不但给幸福于受施的人,也同样给幸福于施与的人。慈善是每个人必备的品德,它就在我们身边,如此简单。还记得……音乐的魅力900字作文音乐,如同露珠滑落琴弦,急雨敲击窗棂,手指叩击竹节,生命最初的形态偶尔越界。给平静的现实生活带来阵阵涟漪,让所有人心里都不由咯噔一声,仿佛看见了另一种生命的盛景,危险而美丽。那……
企业如何增效降本?顾名思义,降本,降低成本,增效,增加效益。是企业日常管理中经常使用的减少费用开销的手段。结合笔者多年的顾问经验,要做好降本增效的工作,需要做好以下方面:1、对各项费……浇花小学生日记10篇浇花小学生日记1今天早上,太阳像个大火球高高地挂在瓦蓝的天空。我看见妈妈养的花都垂头丧气地低下了头,仿佛在说:给我喝点水吧,我快渴死了。我想:这么热的天花儿一定很渴,我给……学会感恩,做一个有责任感的好少年作文素材尊敬的老师,同学们:大家早上好!我今天演讲的题目是《学会感恩,做一个有责任感的好少年》。我喜欢我们学校每周举行这样庄严的升旗仪式。面对着冉冉升起的国旗,耳畔回荡着气……精彩的演讲会作文600字2016年3月20日,一场精彩的演讲会在崇德学校拉开了序幕。参加演讲会的有16年级的同学们和老师组成的评委。站在楼道上,老远就望见了矗立在操场北面的旗台,旗台后面还有一面……关于防溺水的作文300夏季来临,气温已逐渐上升,常常有同学因为下水消暑,而导致了意想不到的事。全国每年都有不少学生因溺水身亡,给许多家庭带来巨大的精神伤害和无法弥补的损失。以下是小编为大家整理的关于……目标是成功的前提作文在我们平凡的日常里,大家都经常看到作文的身影吧,作文是由文字组成,经过人的思想考虑,通过语言组织来表达一个主题意义的文体。相信很多朋友都对写作文感到非常苦恼吧,以下是小编收集整……刮台风作文(精选三篇)篇一:这一天凌晨,可怕的橙色预警响起了,10年来未遇的台风海葵来了,而这一天早上我正好要出去针灸。在路上,雨一会儿向这吹,一会儿向那边吹,把我的雨伞吹得像一个头有点……描写大海的段落总汇导语:难忘那清爽的潮湿的带着谈谈的海腥味的海风,吹拂着人的头发、面颊、身体的每一处的感觉。就像艳丽丰盈的女人一样的诱人。以下是小编为大家分享的描写大海的段落总汇,欢迎借鉴!……当优越成了一种习惯高三作文人在顺境中永远体会不到拥有的幸福,只有当你真的一无所有,才会明白自己原来是何等的富裕,就像文中的河马一样,拥有过多的食物反而长不大,当食物减少后,才懂得珍惜仅有的。可见:当优越……高二读后感飞鸟集读后感(三)《飞鸟集》,它是著名诗人泰戈尔的杰作。就在今天我合上了它的最后一页,它一直让我回味无穷。这部伟大的杰作由325首小诗组成,小诗虽然短小,确蕴藏着一丝童趣和深刻的道理。从不……天使的心作文1000字每个人心中都会有天使与恶魔,善良的天使总是指引我们走向正确的道路,但阴险的恶魔总会来搅局,使我们进退维谷。在小学毕业旅行的时候,每一位同学都玩得很快乐,但也花了不少钱,除……小学生写作段落之间过渡的方法初学作文时,有的同学虽然学会了分段。但读起来总感到段与段之间前后脱节,分段变成了分家,使一篇作文变得前后不连贯,气不通,意不顺。这又是怎么回事呢?问题就出在段落与段落之间……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网