为了达到更好的数据库开发效率,养成良好的数据设计习惯,逐步提高数据库编程水平:

1.【强制】数据库结构修改

原则上只允许项目经理进行数据库结构的修改,如其他项目组成员需要修改,则需告知项目经理或取得项目经理的许可;

2.【强制】数据库建表必要属性

序号属性类型长度是否为空注释
1IDVARCHAR264主键非空主键ID
2NOTEVARCHAR24000备注
3ATTRIBUTE_01VARCHAR2200预留01
4ATTRIBUTE_02VARCHAR2200预留02
5ATTRIBUTE_03VARCHAR2200预留03
6CREATE_BYVARCHAR264非空创建者
7CREATE_DATEDATE7非空创建时间
8UPDATE_BYVARCHAR264非空更新者
9UPDATE_DATEDATE7非空更新时间
9UPDATE_IPVARCHAR264非空更新IP
10REMARKSVARCHAR2225备注信息
11DEL_FLAGCHAR1非空删除标记

3.【强制】Mapper中SQL编写建议

禁止在mapper.xml中编写复杂的sql(2张以上表关联),如果需要,建议使用试图代替。

4.【推荐】根据项目开发经验,禁止在数据库设置任何外键(根据通用设计规约,在设计具有强关联的多表时,一般需要添加外键进行约束。但根据项目开发及实施情况,添加外键往往会导致数据处理繁琐,具体使用还需进一步讨论)

4.【强制】SQL变量类型必须与表字段类型一致

5.【强制】SQL如要使用索引 过滤条件应禁止应用函数或计算

正例:

deal_time between to_date(:B1,'yyyy-mm-dd') and to_date(:B1,'yyyy-mm-dd')
deal_time > :B1-1

反例:

to_char(deal_time,'yyyy-mm-dd')=:B1
deal_time +1 >:B1

3.【强制】禁止使用select * from ,需按查询字段

4.【强制】insert必须列出字段名

5.【强制】尽量避免条件写在having子句中 如可能写在where子句中

正例:

select a,count(*) from A 
where a=1 or a=2
group by a

反例:

select a,count(*) from A group by a 
having a=1 or a=2

6.【推荐】在业务含义一致的前提下 使用union all 代替union

说明:union会进行去重操作 业务一致的前提下union all效率更高

7.【推荐】尽量使用多表关联替代子查询

8.【推荐】若子查询无法避免 优先使用EXISTS/NOT EXISTS替代IN/NOT IN

9.【推荐】少量固定值或子查询结果集少的时候可以用IN(通常10个内) 否则建议使用多表关联

10.【推荐】使用union 替换or(or条件字段均为索引时)

正例:

select id,parent from agent where id=:b0
union
select id,parent from agent where parent=:b1

反例:

select id,parent from agent where id=:b0 or parent=:b1

12.【推荐】尽量使用关联查询改写标量子查询

正例:

select a.id,b.name from t2 a,t1 b where a.owner = b.name

反例:

select a.id,(select b.name from t1 b where a.owner = b.name) from t2 a

13.【推荐】正确使用聚合函数count sum

count(col)计算col不为null的条数
count(distinct col)计算不为null且不重复的条数

sum()函数可能返回null
可以nvl(sum(qty),0)避免返回null

14.ORM框架使用

1.【强制】使用#{} 不使用¥{}

2.【强制】禁止使用where 1=1

作者:梁新  创建时间:2024-06-21 14:18
最后编辑:梁新  更新时间:2024-06-26 16:33