开发规范——MYSQL数据库
数据库规范
这里主要针对mysql数据库,其他数据库也可以借鉴
表
1、统一使用表命名规范
表名规范:分层+项目名缩写+实体名(小写)【+下划线+实体名+rel】
例子
表名:bc_user
分层:
- 基础服务:b
- 综合服务:s
- webapp服务:a
表的种类:
- 映射实体的表:前缀_实体名(多个单词用下划线隔开)
- 关系表:前缀_实体名1_实体名2_后缀(多个单词用下划线隔开)
2、统一使用Innodb引擎
3、【推荐】表名不要关联其他表名的信息
表名含义项目范围独立
索引
1、业务上具有唯一特性的字段,即使是组合字段,必须使用唯一索引。
如果没有添加唯一索引,即使在应用层做了非常完善的校验和验证,也无法避免脏数据的产生。
2、唯一索引命名:uk_字段名 普通索引命名:idx_字段名
3、禁止对text定义索引
如果有对这类字段搜索的需求,可以通过全文索引方法来实现功能。
4、【推荐】varchar定义索引长度。长度统一10的倍数,不超过50;
一般有搜索的话,用户也不会输入太多字
字段
1、主键禁止使用自增。
不同库同步数据的时候,会出问题。
2、字段全部禁止为空。
为空的话,很容易在使用的时候出现npe异常
3、禁止使用外键,只能在概念和应用层次使用外键
影响插入性能
4、禁止使用枚举、集合类型
5、禁止在数据库使用blog存文件。
数据库只存相对的url路径
6、类型使用规范
- 布尔:bit
- 时间(精确到天):date
- 时间(精确到秒):datetime
- 浮点:deciaml
- 字符串(长度小于10或者长度大于10但是长度相同):char
- 字符串(长度为10~5000,长度不等):varchar
- 字符串(富文本):text
7、必有字段
- 主键
- 创建时间
- 修改时间
- 假删状态
8、【推荐】可以审核添加冗余数据,这样可以快速查询数据。
冗余类型:
+ 技术器、计分器等统计数据
+ 一旦成功不会修改的数据
9、【推荐】字段顺序:自描述-》关联其他表的描述-》功能性-》必有字段
注释
1、表名或者字段注释的格式:直译【(补充说明)】
2、禁止带“表”、“数据”等多余的字眼
3、如果类型字段,有变更,同步注释
sql
1、禁止使用select *
数据库查看执行时间性能没有影响。但是返回的数据量会变大,对网络开销有影响,最终还是影响性能,而且会影响数据库的二进制日志
2、使用select count(*)
select count(name)不记录null的行数,而且官方澄清count(*)不影响性能
3、使用sum函数时,必须使用IFNULL(sum(),0)
如果sum函数没有查询结果返回null,容易出npe
4、禁止出现or。可以使用in或者unit all来替换
5、order by的场景,创建索引时order by后面的字段也必须是组合索引的一部分,并且放在索引顺序的最后,避免file_sort
6、创建组合索引时,区分度最高的放在最左边
where a=? and b=? 如果a几乎接近唯一,那么只要建idx_a即可。
7、【推荐】禁止更新表的所有字段,必须制定更新的字段
开发规范——MYSQL数据库的更多相关文章
- Swift3.0服务端开发(四) MySQL数据库的连接与操作
本篇博客我们来聊聊MySQL数据库的连接与操作.如果你本地没有MySQL数据库的话,需要你先安装MySQL数据库.在Mac OS中使用brew包管理器进行MySQL的安装是及其方便的.安装MySQL的 ...
- Go语言学习之10 Web开发与Mysql数据库
本节主要内容: 1. http编程2. mysql使用 1. http编程 (1)http编程分析 Go原生支持http,import(“net/http”) Go的http服务性能和nginx比较接 ...
- 【Python全栈-后端开发】MySQL数据库-练习题
MySQL数据库-练习题 一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号 ...
- Python全栈开发之---mysql数据库
1.数据库的安装和连接 #数据库安装 pip install PyMySQL #数据库操作 import pymysql db = pymysql.connect("数据库ip", ...
- SSH或者SSM开发web,mysql数据库,数据库配置文件配置不当~数据库读写数据乱码问题解决办法。
相信,大家都有遇到过在传入一个中文string,debug自己的每一行代码时,都发现始终是没有乱码的(即:排除了,源码文件的编码格式是没问题的),但是数据进入数据库之后就是乱掉了. 那么很明显问题就出 ...
- Java Web程序开发链接MySQL数据库
显示错误:Access denied for user ''@'localhost' (using password: YES) 保证URL中没有空格 尝试用MySQL本地命令行登陆 显示错误:The ...
- MySQL架构设计谈:从开发规范、选型、拆分到减压(转)
作者介绍 李辉,原新浪爱彩票运维负责人,常用网名:门牙没了.曾主导新浪爱彩票的MySQL运维工作.培训合伙人.资深讲师,中国科学院大学在读研究生(大数据方向),擅长大型项目的关系型数据库运维和管理,现 ...
- 关于mysql数据库涉及的一些规范
tips:如果本文对你有用,请爱心点个赞,提高排名,让这篇文章帮助更多的人.谢谢大家!比心❤~ 如果解决不了,可以在文末加我微信,进群交流. 设计规范,在分工协作的工作场景中尤其重要,否则团队之间互相 ...
- MySQL数据库基本规范整理
此篇文章是学习MySQL技术整理的,不足之处还望指教,不胜感激. 数据库基本规范涉及数据库命名规范.数据库索引设计规范.数据库基本设计规范.数据库字段设计规范.数据库SQL开发规范.数据库操作行为规范 ...
随机推荐
- noi.ac #44 链表+树状数组+思维
\(des\) 给出长度为 \(n\) 的序列,全局变量 \(t\),\(m\) 次询问,询问区间 \([l, r]\) 内出现次数为 \(t\) 的数的个数 \(sol\) 弱化问题:求区间 \([ ...
- sudo与用户权限
sudo,以root的身份另起新进程 注意:cd是shell内置的,不会另起新进程,故sudo cd会提示找不到命令 sudo使用当前用户密码,su使用切换用户的密码,默认切换为root sudo通常 ...
- 2017.10.5 国庆清北 D5T1 拼不出的数
题目描述 3 个元素的集合{5,1,2}的所有子集的和分别是0,1,2,3,5,6,7,8.发现最小的不能由该集合子集拼出的数字是4. 现在给你一个n个元素的集合,问你最小的不能由该集合子集拼出的数字 ...
- LibreOJ #6191. 「美团 CodeM 复赛」配对游戏
二次联通门 : LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 /* LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 概率dp */ #include <cs ...
- leetcode 838
我发现我非常不擅长解决这种 ummm充满了各种逻辑判断的问题 orz! 因为总是漏少几种情况(很绝望orz) 这道题我是这么判断的 temp为更改后的字符串,dominoes为原字符串 对于原字符串, ...
- Java 冒泡排序算法
public class StringSampleDemo { public static void main(String[] args) { int[] arr = {1, 2, -20, 20, ...
- Hadoop 压缩
压缩的好处 文件压缩的好处:减少文件存储锁需要的磁盘空间,加速数据在网络和磁盘上的传输. 常见的压缩格式 压缩格式 工具 算法 文件扩展名 是否可以切分 DELATE 无 DEFLATE .d ...
- STP生成树算法
生成树算法第一:决定谁是“根网桥”对比各个网桥ID,先对比ID中的优先级,优先级相同的时候对比网桥MAC地址,对比依据是谁的值最小,谁是“根网桥” 第二:决定哪些是“根端口”窍门——每个非根网桥上都有 ...
- mysql小白入门
mysql简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅 ...
- postgresql大数据查询加索引和不加索引耗时总结
1.创建测试表 CREATE TABLE big_data( id character varying(50) NOT NULL, name character varying(50), dat ...