mysql数据库的规范有哪些

72次阅读
没有评论

共计 2518 个字符,预计需要花费 7 分钟才能阅读完成。

今天就跟大家聊聊有关 mysql 数据库的规范有哪些,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

基础规范

【建议】使用 InnoDB 存储引擎

【强制】无特殊要求必须使用 UTF8 字符集

【强制】数据表、数据字段必须加入中文注释

【强制】禁止使用存储过程、视图、触发器、Event。特殊情况申请评审

【强制】不在数据库做运算,cpu 计算务必移至业务层

命名规范

【建议】命名使用具有实际意义的英文词汇、词汇缩写,词汇之间使用下划线分隔;

【强制】命名只能使用小写英文字母、数字、下划线,且必须英文字母开头,下划线为分割符,不能超过 32 个字符,数据库对象名尽可能简短。避免使用 MySQL 的保留字

【强制】普通表名命名规则为功能模块前缀_+tablename(login_users);临时表:tmp 前缀 +tablename+ 8 位时间后缀(tmp_users_20170501);备份表:bak 前缀 +tablename+ 8 位时间后缀(bak_users_20170501);归档表命名规则:arch 前缀 +tablename+ 归档规则 (arch _users_2013)【强制】各表之间相同意义的字段必须同名,数据类型、长度、单位必须相同。

【强制】索引以 idx_开头唯一索引以 uq_idx 开头,后面跟索引所在字段名, 多单词组成的列名,取尽可能代表意义的缩写,如 t_user_contacts 表 member_id 和 friend_id 上的组合索引:idx _mid_fid,, 组合索引命名应注意字段顺序。如在字段 member_id 和字段 user_id 上创建组合索引,则可以命名为 idx _uid_mid(userid, member_id)

常用约定:

【建议】序号列字段:以 id 为后缀,如:user_id 表示用户编号

【建议】编码字段:以 code 为后缀,如:cust_code 表示客户编码

【建议】布尔值字段:以“is_”前缀 + 字段描述 + 形容词。如 member 表上表示为 enabled 的会员的列命名为 is_member_enabled。0:否;1:是

【强制】状态字段:以“_status”为后缀,前面加业务逻辑名。如:用户状态可命名为 user_status,订单状态为 order_status 以此类推

表设计规范(***)

【强制】表设计必须有表主键,并且主键不能提供给外部系统,给外部系统的必须使用业务主键,如 user 表的业务主键设计,如下 id 表主键,自增,表主键不能像外部系统提供 xxx_id 为业务主键,使用 IdGenerater(id 生成工具类生成,见附件),可以提供给外部系统,使用 bigint 存储

【强制】表必须有主键,如果使用 auto_increment 作为自增主键,注意导出初始化脚本时不要设置起始值。

【强制】枚举类型使用 tinyint 类型

【强制】单表字段数不要太多,最多不要大于 50 个,且尽可能的少用字符型数据类型

【强制】日期的数据 (不包含时分秒的),使用 int(11) 存储(如,yyyy、yyyyMM、yyyyMMdd),时间的数据((包含时分秒的)),使用 datetime 存储。

【强制】每个表都必须包含两个保留字段:create_time(创建时间),update_time(最后修改时间)creater varchar(50)(创建人),updater varchar(50)(修改人),设置为非空字段属性。这两个字段不包含额外的业务逻辑。

【强制】每个表设置 is_del(0 为未删除,1 为删除)标记位字段,设置为非空,默认为 0 的字段属性,生产环境不允许物理删除。特殊表再议

【强制】表和列定义的时候必须加上 comment,并能精确描述表和列的含义。类型、状态等字段必须明确给出各个值代表的含义;金钱等计量字段必须给出精确的计量单位;外键字段必须明确给出关联的表和字段

【强制】若需要 JOIN 的字段(连接键),字段名称、数据类型、长度和单位必须保持绝对一致,避免隐式转换

【强制】禁止使用 TEXT、BLOB 类型(大文本、大文件、大照片存放在文件系统),可以把文件放到文件服务器中,数据库只存 url

【强制】不推荐使用 enum,set。因为它们浪费空间,且枚举值写死了,变更不方便。推荐使用 tinyint 或 smallint

【强制】如果有业务流转的加字段:业务流水号

【强制】如果一次操作多张表需要查看修改或者回退操作的,加操作流水号

【强制】禁止创建外键约束,外键约束由应用程序控制。外键会导致表与表之间耦合,update 与 delete 操作都会涉及相关联的表,影响 sql 的性能,甚至会造成死锁。

【强制】排序字段都不允许为空,并设置默认值。

字段设计规范

【强制】字符串类型一律使用 VARCHAR 类型,对于明确长度的建议使用 char,如身份证号等

【强制】禁止使用 TEXT、BLOB 类型。会浪费更多的磁盘和内存空间,非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能

【建议】字段定义为 NOT NULL 并且提供默认值。null 的列使索引 / 索引统计 / 值比较都更加复杂,对 MySQL 来说更难优化;需要更多的存储空;只能采用 is null 或 is not null,而不能采用 =、in、= 2017-02-15 — 正确的写法是:SELECT uid FROM t_user WHERE day = xxxfunc (2017-02-15 00:00:00)

【强制】禁止使用 OR 条件。使用 IN 或者 UINON 代替

【强制】禁止大表使用 JOIN 查询,禁止大表使用子查询。极大影响数据库性能

【强制】禁止负向查询,以及 % 开头的模糊查询。a)负向查询条件:NOT、!=、、!、NOT IN、NOT LIKE 等,会导致全表扫描 b)% 开头的模糊查询,会导致全表扫描

【强制】使用 IN 不能超过 200

【建议】UNION ALL 代替 UNION 操作。

【建议】order by 的顺序尽量与索引保持一致

【强制】大批量更新凌晨操作,避开高峰

看完上述内容,你们对 mysql 数据库的规范有哪些有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计2518字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)