1.  建表规约

1)   表中字段名称

a)    表达是否概念的字段,必须使用is_xxx的方式命名,数据类型是bit

b)    小数类型为decimal,禁止使用float和double。

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

c)   字段允许适当的冗余,以提高性能,但是必须考虑数据同步的情况

冗余字段应遵循:

n  不是频繁修改的字段。

n  不是varchar超长字段,更不能是text字段

2)   主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名。

说明:pk_即primary key,uk_即unique key;idx_即index的简称。

2.  SQL规约

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

说明:count(*)会统计值为NULL的行,而count(列名)不会统计此列为NULL值的行。

2)   使用ISNULL()来判断是否为NULL值。

注意:NULL与任何值的直接比较都为 NULL。

说明:

1)NULL<>NULL 的返回结果是NULL,而不是false。

2)NULL=NULL 的返回结果是NULL,而不是true。

3)NULL<>1 的返回结果是NULL,而不是true。

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

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

说明:学生表中的student_id是主键,那么成绩表中的student_id则为外键。如果更新学生表中的student_id,同时触发成绩表中的student_id更新,则为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

4)   避免使用存储过程,存储过程难以调试和扩展,更没有移植性。

5)   数据订正时,删除和修改记录时,要先select,避免出现误删除,确认无误才能执行更新语句。

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

7)   TRUNCATE TABLE比DELETE速度快,且使用的系统和事务日志资源少,但TRUNCATE无事务且不触发trigger,有可能造成事故,故不建议在开发代码中使用此语句。

说明:DELETE语句必须带条件where,删除全表也可加where 1=1。

8)   在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。

9)   不要写一个大而全的数据更新接口,不管是不是自己的目标更新字段,都进行update这是不对的。执行 SQL 时,尽量不要更新无改动的字段,一是易出错;二是效率低。

最新文章

  1. 键盘按钮keyCode大全
  2. [转]C#反射-Assembly.Load、LoadFrom与LoadFile进阶
  3. struct 类型重定义
  4. Another app is currently holding the yum lock; waiting for it to exit...
  5. (转)如何学好C语言,一个成功人士的心得!
  6. ANDROID_MARS学习笔记_S01原始版_005_RadioGroup\CheckBox\Toast
  7. .net转php laraval框架学习系列(一) 环境搭建
  8. 跟我一起学extjs5(16--各种Grid列的自己定义渲染)
  9. Java 得到磁盘以及内存信息
  10. Reminders在电商推荐中的价值
  11. Django2文档-入门概览
  12. .NetCore 资料分享
  13. HTML学习笔记Day9
  14. (Set){A} + {B} hdu1412
  15. 各种浏览器下的页面元素xpath获取方法
  16. linux-安装jdk以及tomcat
  17. Mongodb集群搭建之 Replica Set
  18. TOMCAT内存溢出及大小调整的实现方法
  19. SQL Server 默认跟踪(Default Trace)获取某个Trace跟踪了哪些Event和column
  20. appium架构分析

热门文章

  1. RabbitMQ开启SSL与SpringBoot连接测试
  2. JSch Algorithm negotiation fail
  3. 单元测试 报错 org.junit.runners.model.InvalidTestClassError: Invalid test class &#39;com.example.xxx&#39; 解决
  4. vue3.0+vue-cli3.0项目搭建
  5. java之类的抽取与对象的创建
  6. RT-Thread移植到stm32
  7. VAE变分自编码器
  8. 论文解读GALA《Symmetric Graph Convolutional Autoencoder for Unsupervised Graph Representation Learning》
  9. golang中channel讲解
  10. python21day