最近涉及数据库相关操作较多,公司现有规范也不是太全面,就根据网上各路大神的相关规范,整理了一些自用的规范用法,万望指正 。
文章插图
数据库环境dev: 开发环境开发可读写,可修改表结构 。开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事 。
test: 测试环境开发可读写,开发人员可以通过工具修改表结构 。
online: 线上环境开发人员不允许直接在线上环境进行数据库操作,如果需要操作必须找DBA进行操作并进行相应记录,禁止进行压力测试 。关注公众号互联网架构师,回复关键字2T,获取最新架构视频
重点的问题,各个环境的MySQL服务器对应的用户权限,一定要做到权限划分明确,有辨识度,能具体区分业务场景等 。
命名规范基本命名规则
- 使用有意义的英文词汇,词汇中间以下划线分隔 。(不要用拼音)
- 只能使用英文字母,数字,下划线,并以英文字母开头 。
- 库、表、字段全部采用小写,不要使用驼峰式命名 。
- 避免用ORACLE、MySQL的保留字,如desc,关键字如index 。
- 命名禁止超过32个字符,须见名之意,建议使用名词不是动词
- 数据库,数据表一律使用前缀
- 临时库、表名必须以tmp为前缀,并以日期为后缀
- 备份库、表必须以bak为前缀,并以日期为后缀
- windows下是不区分大小写的 。
- linux下大小写规则
- 数据库名与表名是严格区分大小写的;
- 表的别名是严格区分大小写的;
- 列名与列的别名在所有的情况下均是忽略大小写的;
- 变量名也是严格区分大小写的;关注公众号互联网架构师,回复关键字2T,获取最新架构视频
- 如果已经设置了驼峰式的命名如何解决?需要在MySQL的配置文件my.ini中增加 lower_case_table_names = 1即可 。
字段命名
- 表达其实际含义的英文单词或简写 。布尔意义的字段以is_作为前缀,后接动词过去分词 。
- 各表之间相同意义的字段应同名 。各表之间相同意义的字段,以去掉模块前缀的表名_字段名命名 。
- 外键字段用表名_字段名表示其关联关系 。
- 表的主键一般都约定成为id,自增类型,是别的表的外键均使用xxx_id的方式来表明 。
- 非唯一索引必须按照“idx_字段名称_字段名称[_字段名]”进行命名
- 唯一索引必须按照“uniq_字段名称_字段名称[_字段名]”进行命名
- 主键约束:pk_表名称 。
- 唯一约束:uk_表名称_字段名 。(应用中需要同时有唯一性检查逻辑 。)
默认使用utf8mb4字符集,数据库排序规则使用utf8mb4_general_ci,(由于数据库定义使用了默认,数据表可以不再定义,但为保险起见,建议都写上
为什么字符集不选择utf8,排序规则不使用utf8_general_ci采用utf8编码的MySQL无法保存占位是4个字节的Emoji表情 。为了使后端的项目,全面支持客户端输入的Emoji表情,升级编码为utf8mb4是最佳解决方案 。对于JDBC连接串设置了characterEncoding为utf8或者做了上述配置仍旧无法正常插入emoji数据的情况,需要在代码中指定连接的字符集为utf8mb4 。
所有表、字段均应用 comment 列属性来描述此表、字段所代表的真正含义,如枚举值则建议将该字段中使用的内容都定义出来 。
如无说明,表中的第一个id字段一定是主键且为自动增长,禁止在非事务内作为上下文作为条件进行数据传递 。禁止使用varchar类型作为主键语句设计 。
如无说明,表必须包含create_time和modify_time字段,即表必须包含记录创建时间和修改时间的字段
如无说明,表必须包含is_del,用来标示数据是否被删除,原则上数据库数据不允许物理删除 。
- 用尽量少的存储空间来存数一个字段的数据
- 能用int的就不用char或者varchar
- 能用tinyint的就不用int
推荐阅读
- 靠接外包的程序员,能生活的下去吗
- 「PHP编程」为什么使用composer下载的包,不需要再include?
- 下雪的季节 注意事项
- 淘宝卖家动态评分为什么会自动下降 淘宝动态评分一直下降
- |玩和田玉的人最好不要有这种心理,你知道原因吗?一起来探讨下
- 高端茶价格纷纷下挫,礼品茶难销平民茶走俏
- RSS|在流量大厂的围攻下 有人希望20多岁老掉牙的技术复活
- 男性春季养生调养身体的方法
- 淘宝拍下付款后怎么取消订单 淘宝拍卖可以取消订单吗
- 电力公司桌游玩法简介