阿里巴巴开发手册笔记

阿里开发团队发表的java开发规范,下面我在学习了之后做一个简单的总结。此篇为数据库篇。

数据库

(一)建表约定

1.表达是与否的概念的字段,必须使用is_xxx的方式来命名。数据类型是 unsigned tinyint(1 表示是,0 表示否)。
说明:任何字段如果为非负数,必须是 unsigned。
注意:POJO 类中的任何布尔类型的变量,都不要加 is 前缀,所以,需要在设置从 is_xxx 到 Xxx 的映射关系。数据库表示是与否的值,使用 tinyint 类型,坚持is_xxx 的命名方式是为了明确其取值含义与取值范围。
正例:表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除。

2.表名、字段名必须使用小写字母或者数字,禁止出现数字开头,禁止两个下划线之间只出现数字。
说明:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、
表名、字段名,都不允许出现任何大写字母,避免节外生枝。
正例:aliyun_admin,rdc_config,level3_name
反例:AliyunAdmin,rdcConfig,level_3_name

3.表名不使用复数名词。
说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于 DO 类名也是单数
形式,符合表达习惯。

4.禁用保留字,如desc、range、match、delayed等

5.主键索引名为 pk字段名;唯一索引名为 uk字段名;普通索引名则为 idx_字段名。
说明:pk_ 即 primary key;uk_ 即 unique key;idx_ 即 index 的简称。

6.小数类型为 decimal,禁止使用 float 和 double。
说明:float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不
正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。

7.如果存储的字符串长度几乎相等,使用 char 定长字符串类型。

8.varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长
度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索
引效率。

9.表必备三字段:id, gmt_create, gmt_modified。
说明:其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。gmt_create,
gmt_modified 的类型均为 datetime 类型,前者现在时表示主动创建,后者过去分词表示被
动更新。

10.表的命名最好是加上“业务名称_表的作用”。
正例:alipay_task / force_project / trade_config

11.库名与应用名称尽量一致。

12.如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。

(二)索引规范
1.业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。

2.超过三个表禁止join,需要join的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。

3.在varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据
实际文本区分度决定索引长度即可。

4.页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。

5.利用覆盖索引来进行查询操作,避免回表。

(三)SQL语句

1.不要使用 count(列名)或 count(常量)来替代 count(),count()是 SQL92 定义的
标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。

2.count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct
col1, col2) 如果其中一列全为 NULL,那么即使另一列有不同的值,也返回为0.

3.当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果为
NULL,因此使用 sum()时需注意 NPE 问题。

4.使用 ISNULL()来判断是否为 NULL 值。说明:NULL 与任何值的直接比较都为 NULL。

5.在代码中写分页查询逻辑时,若 count 为 0 应直接返回,避免执行后面的分页语句。

6.不得使用外键与级联,一切外键概念必须在应用层解决。

7.禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。

8.数据订正(特别是删除、修改记录操作)时,要先 select,避免出现误删除,确认
无误才能执行更新语句。

9.in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数量,控
制在 1000 个之内。

(四)ORM映射
1.在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。
说明:1)增加查询分析器解析成本。2)增减字段容易与 resultMap 配置不一致。3)无用字
段增加网络消耗,尤其是 text 类型的字段。

2.POJO 类的布尔属性不能加 is,而数据库字段必须加 is_,要求在 resultMap 中进行
字段与属性之间的映射。

3.不要用 resultClass 当返回参数,即使所有类属性名与数据库字段一一对应,也需
要定义;反过来,每一个表也必然有一个 POJO 类与之对应。

4.sql.xml 配置参数使用:#{},#param# ,不要使用${} 此种方式容易出现 SQL 注入。

5.不允许直接拿 HashMap 与 Hashtable 作为查询结果集的输出。

6.修改更新时无需修改无改动的字段。

7.@Transactional 事务不要滥用。事务会影响数据库的 QPS,另外使用事务的地方需
要考虑各方面的回滚方案,包括缓存回滚、搜索引擎回滚、消息补偿、统计修正等。

阿里巴巴开发手册笔记-----数据库篇相关推荐

  1. 阿里巴巴开发手册笔记整理

    长久以来,一直有一个愿望,就是自己能够遵循某种规范进行实践,或者说能找一个比较经得起实践的理论来指导.  直到我们老师给我们推荐了阿里巴巴开发手册,大概看了看目录,嗯 ,  是我想要的.于是,这里就趁 ...

  2. 关于阿里巴巴开发手册不得使用外键与级联,一切外键概念必须在应用层解决的疑惑

    原文地址:http://www.codes51.com/itwd/4517194.html 问题: 关于阿里巴巴开发手册"不得使用外键与级联,一切外键概念必须在应用层解决"的疑惑 ...

  3. 码出高效:Java开发手册笔记(线程池及其源码)

    码出高效:Java开发手册笔记(线程池及其源码) 码出高效:Java开发手册笔记(线程池及其源码) 码出高效:Java开发手册笔记(线程池及其源码) 前言 一.线程池的作用 线程的生命周期 二.线程池 ...

  4. 阿里巴巴开发手册——集合

    阿里开发手册笔记:集合 1.ArrayList的sublist(form,to) 返回父list的一个视图,包含from不包含to,它是ArrayList的内部类,无法强制转换成ArrayList. ...

  5. 阿里巴巴开发手册“泰山”版它来了,1.4.0+终极版+阿里内部PPT

    阿里的<Java开发手册>距离上次发布已经过去了 10 个月了,而这次发布也增加了很多干货内容,比如:新增 34 条规约,修改描述 90 处,其中错误码规则更是第一次提出完整的解决方案,发 ...

  6. 魔法值是什么?(为什么在阿里巴巴开发手册中提到不允许任何魔法值直接出现在代码中)

    在阿里巴巴开发手册中,提到魔法值,是在最开始的常量定义中提到的.即如下图: 那么,魔法值究竟是什么? 在al手册中说是未经预先定义的常量. 其实这样说就已经很明了了,但毕竟是一个不常见的概念,所以我在 ...

  7. 包机制、阿里巴巴开发手册

    公司域名倒置作为包名 com.baidu.www 阿里巴巴开发手册可百度搜索看看

  8. (阿里巴巴开发手册)为什么阿里巴巴推荐内部员工使用StringBuilder?

    今日我在阅读阿里巴巴开发手册泰山版,发现开发手册上有这么一条:[推荐] 循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展. 字符串的三种表示类型 Strin ...

  9. Java阿里巴巴开发手册与JDK1.8API中文版下载

    Java阿里巴巴开发手册 JDK1.8API中文版 链接:https://pan.baidu.com/s/1M3zp31KlRCXDXkBqHSUS6A 提取码:lcmc

最新文章

  1. 最详细的JavaWeb开发基础之java环境搭建(Windows版)
  2. 矩阵乘法的本质是什么
  3. 【机器学习入门笔记4:OpenCV图片的写入和不同图片质量保存】20190203
  4. python封装sql脚本 github_Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码...
  5. 计算机语法分析,电子科技大学-计算机学院-编译原理实验-语法分析.pdf
  6. jQuery高级部分笔记
  7. 解决li在ie,firefox中行高不一致问题
  8. 解决苹果电脑OS X 10.8.5或10.7.5 老版本系统升级问题
  9. 遗传算法应用于XGBoost的调参过程
  10. 苹果电脑如何快速清理废纸篓?
  11. TYVJ1356(腾讯大战360)
  12. jenkins更换清华(国内)插件源不生效的问题
  13. 为Chrome设置代理
  14. 中国石油大学《高等数学二》第二次在线作业
  15. 短信平台API接口demo示例-Node/SMS/Send
  16. 简述计算机基本工作原理以及指令执行步骤,计算机的指令执行过程分为四步请简述它们简述...
  17. AIX(Advanced Interactive eXecutive)操作系统
  18. 【资源】重磅!清华大学网上课程面向全国免费开放!无需登录、注册!在家上清华!...
  19. char *str1 和 char str2[]的详解
  20. 沃云统一开发平台介绍

热门文章

  1. 千种字体包 | 满满的干货
  2. java 线程面试题_50道Java线程面试题分析及答案
  3. FreeRadius 2.1.6的安装
  4. Vue全家桶之组件化开发
  5. Android中的蓝牙知识
  6. POJ3602解题报告
  7. 4.1 在霍格沃茨找零钱
  8. 【Hadoop】hive中beeline的使用方法
  9. 安卓底层开发学习经验第一期
  10. TopK问题的必会解法