基本规范
为了达到更好的数据库开发效率,养成良好的数据设计习惯,逐步提高数据库编程水平:
1.【强制】数据库结构修改
原则上只允许项目经理进行数据库结构的修改,如其他项目组成员需要修改,则需告知项目经理或取得项目经理的许可;
2.【强制】数据库建表必要属性
序号 | 属性 | 类型 | 长度 | 是否为空 | 注释 |
---|---|---|---|---|---|
1 | ID | VARCHAR2 | 64 | 主键非空 | 主键ID |
2 | NOTE | VARCHAR2 | 4000 | 备注 | |
3 | ATTRIBUTE_01 | VARCHAR2 | 200 | 预留01 | |
4 | ATTRIBUTE_02 | VARCHAR2 | 200 | 预留02 | |
5 | ATTRIBUTE_03 | VARCHAR2 | 200 | 预留03 | |
6 | CREATE_BY | VARCHAR2 | 64 | 非空 | 创建者 |
7 | CREATE_DATE | DATE | 7 | 非空 | 创建时间 |
8 | UPDATE_BY | VARCHAR2 | 64 | 非空 | 更新者 |
9 | UPDATE_DATE | DATE | 7 | 非空 | 更新时间 |
9 | UPDATE_IP | VARCHAR2 | 64 | 非空 | 更新IP |
10 | REMARKS | VARCHAR2 | 225 | 备注信息 | |
11 | DEL_FLAG | CHAR | 1 | 非空 | 删除标记 |
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-26 16:33