当前位置:文档之家› SQL编写规范-高质量-经过多人验证

SQL编写规范-高质量-经过多人验证

SQL编写规范-高质量-经过多人验证
SQL编写规范-高质量-经过多人验证

SQL编码规范

版本历史

版本内容日期备注

V1.0 编码规范2011-12-4 初稿

V1.1 修改主键名长度2012-4-9

1数据库编码命名规范

1.1大小写说明

有关数据库的命名都是用大写。

1.2数据库表命名

数据库表的命名采用如下规则:

1)表名用T_开头,表名长度不能超过30个字符,表名中含有单词要大写。如果表为表之间的关系表采用R_开头。

2)多个单词间用下划线(_)进行连接。若库中有多个系统,表名采用系统名称+单词或多个单词,系统名是开发系统的缩写,如SSO2。

3)表中含有的单词建议用完整的单词。如果导致表名长度超过30个字符,则从最后一个单词开始,依次向前采用该单词的缩写。

例如:SSO2_T_ USER (系统SSO2的用户表)

1.3视图命名

禁止使用视图。

1.4函数/存储过程

任何系统均不能私自使用函数及存储过程,如需要必须经过申请。

1.5字段名命名

以英文名命名

对于多个单词组合的情况,以“_”分隔

单词长度大的使用标准简称

字段名应该在30字母以内

示例:USER_NAME(用户名)

USER_PWD(用户密码)

1.6主键命名

主键的命名采用如下规则:

主键名用pk_开头,后面跟该主键所在的表名(去掉“T_系统编码_”)。主键名长度不能超过18个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。主键名用小写的英文单词来表示。

1.7外键命名

外键的命名采用如下规则:外键用关联表的主键进行命名,pk_。。。。,与关联表主键一致,如果多次关联同一张表,采用pk_***1,pk_***2进行标示。长度不能超过18个字符,同上面主键命名。

1.8索引

索引的命名采用如下规则:

1)索引名用小写的英文字母和数字表示。索引名的长度不能超过30个字符。

2)主键对应的索引和主键同名。

3)每类索引都用_结束。

4)唯一性索引用uni_开头,后面跟表名。一般性索引用idx_开头,后面跟表名。

5)如果索引长度过长,可对表名进行缩写。缩写规则同表名的缩写规则。

1.9表间约束关系

表间约束关系不在数据库层面考虑,通过代码维护数据完整性

2数据库SQL语句格式

2.1大小写说明

SQL语句必须全部用大写字母编写。

2.2INSERT INTO 语句

INSERT INTO 表名(字段1, 字段2, 字段3)

VALUES(值1, 值2, 值3)

注意要求:

第一行为:INSERT INTO 表(表字段)

第二行为:VALUES(字段所对应的值)

“,”后请打一个空格

2.3UPDATE 语句

UPDATE 表名

SET 字段1 = 值1, 字段2 = 值2, 字段3 = 值3

WHERE

条件1

AND(OR) 条件2

AND(OR) 条件3

注意要求:

第一行:UPDATE 表名

SET设置字段值(注:如果太长,请换行)

“=”两头请都打空格

“,”后请打一个空格

若带条件,单独一行写WHERE

空四个空格符,写上第一个条件

若带多个条件,换行,敲两个空格,写AND 条件N

一行只写一个 AND 条件

2.4SELECT 语句

SELECT

字段1,

字段2,

字段3

FROM 表1, 表2, 表3

WHERE

条件1

AND(OR) 条件2

AND(OR) 条件3

ORDER BY 排列字段

GROUP BY 分组字段 HAVING 过滤条件

UNION[ALL]

SELECT ……

或者(SQL标准的关联查询写法):

SELECT

字段1,

字段2

字段3

FROM 表1

INNER(LEFT、RIGHT 、FULL) JOIN 表1 ON 条件

INNER(LEFT、RIGHT 、FULL) JOIN 表2 ON 条件

CROSS JION 表3 (注:交叉查询是不带 ON 条件的)

WHERE 条件1

AND(OR) 条件2

AND(OR) 条件3

ORDER BY 排列字段

GROUP BY 分组字段 HAVING 过滤条件

UNION[ALL]

SELECT ……

注意要求:

请注意以上的两种格式,该换行的请换行、该空格的请空格!建议采用第二种格式写法(相关的链接查询请正确的理解)

知识提醒:

INNER JOIN 表ON 条件

同等于oracle中的 T1.A = T2.A

LEFT JOIN 表1 ON 条件

同等于oracle中的 T1.A = T2.A(+)

RIGHT JOIN 表1 ON 条件

同等于oracle中的 (+)T1.A = T2.A

3查询优化说明

3.1对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引。

3.2应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0

3.3.应尽量避免在where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

3.4.应尽量避免在where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num=10 or num=20

可以这样查询:

select id from t where num=10

union all

select id from t where num=20

3.5in 和not in 也要慎用,否则会导致全表扫描,如:

select id from t where num in(1,2,3)

对于连续的数值,能用between 就不要用in 了:

select id from t where num between 1 and 3

3.6下面的查询也将导致全表扫描:

select id from t where name like '%abc%'

若要提高效率,可以考虑全文检索。

3.7如果在where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化

程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

select id from t where num=@num

可以改为强制查询使用索引:

select id from t with(index(索引名)) where num=@num

3.8应尽量避免在where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where num/2=100

应改为:

select id from t where num=100*2

3.9应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where substring(name,1,3)='abc'--name以abc开头的id

select id from t where datediff(day,createdate,'2005-11-30')=0--…2005-11-30?生成的id

应改为:

select id from t where name like 'abc%'

select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'

3.10不要在where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索

引。

3.11在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时

才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

3.12不要写一些没有意义的查询,如需要生成一个空表结构:

select col1,col2 into #t from t where 1=0

这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:

create table #t(...)

3.13很多时候用exists 代替in 是一个好的选择:

select num from a where num in(select num from b)

用下面的语句替换:

select num from a where exists(select 1 from b where num=a.num)

3.14并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL

查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

3.15索引并不是越多越好,索引固然可以提高相应的select 的效率,但同时也降低了insert 及update 的效

率,因为insert 或update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

3.16应尽可能的避免更新clustered 索引数据列,因为clustered 索引数据列的顺序就是表记录的物理存储顺

序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新clustered 索引数据列,那么需要考虑是否应将该索引建为clustered 索引。

3.17尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会

增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

3.18尽可能的使用varchar/nvarchar 代替char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,

其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

3.19任何地方都不要使用select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

3.20尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

3.21避免频繁创建和删除临时表,以减少系统表资源的消耗。

3.22临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表

中的某个数据集时。但是,对于一次性事件,最好使用导出表。

3.23在新建临时表时,如果一次性插入数据量很大,那么可以使用select into 代替create table,避免造成大

量log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

3.24如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table ,然后drop

table ,这样可以避免系统表的较长时间锁定。

3.25.尽量避免大事务操作,提高系统并发能力。

3.26尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理

SQL书写规范

SQL编程规范 一、sql书写规范: 二、书写优化性能建议 三、其他经验性规则 一、sql书写规范: 1、sql语句的所有表名、字段名全部小写,系统保留字、内置函数名、sql保留字大写。 2、连接符or、in、and、以及=、<=、>=等前后加上一个空格。 3、对较为复杂的sql语句加上注释,说明算法、功能。 注释风格:注释单独成行、放在语句前面。 (1) 应对不易理解的分支条件表达式加注释; (2) 对重要的计算应说明其功能; (3) 过长的函数实现,应将其语句按实现的功能分段加以概括性说明; (4) 每条SQL语句均应有注释说明(表名、字段名)。 (5) 常量及变量注释时,应注释被保存值的含义(必须),合法取值的范围(可选) (6) 可采用单行/多行注释。(-- 或/* */ 方式) 4、SQL语句的缩进风格 (1) 一行有多列,超过80个字符时,基于列对齐原则,采用下行缩进 (2) where子句书写时,每个条件占一行,语句令起一行时,以保留字或者连接符开始,连接符右对齐。 5、多表连接时,使用表的别名来引用列。 6、供别的文件或函数调用的函数,绝不应使用全局变量交换数据; 如例(1)

二、书写优化性能建议 1、避免嵌套连接。例如:A = B and B = C and C = D 2、where条件中尽量减少使用常量比较,改用主机变量 3、系统可能选择基于规则的优化器,所以将结果集返回数据量小的表作为驱动表(from后边最后一个表)。 4、大量的排序操作影响系统性能,所以尽量减少order by和group by排序操作。 如必须使用排序操作,请遵循如下规则: (1) 排序尽量建立在有索引的列上。 (2) 如结果集不需唯一,使用union all代替union。 5、索引的使用。 (1) 尽量避免对索引列进行计算。如对索引列计算较多,请提请系统管理员建立函数索引。 (2) 尽量注意比较值与索引列数据类型的一致性。 (3) 对于复合索引,SQL语句必须使用主索引列 (4) 索引中,尽量避免使用NULL。 (5) 对于索引的比较,尽量避免使用NOT=(!=) (6) 查询列和排序列与索引列次序保持一致 6、尽量避免相同语句由于书写格式的不同,而导致多次语法分析。 7、尽量使用共享的SQL语句。 8、查询的WHERE过滤原则,应使过滤记录数最多的条件放在最前面。 9、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。 10、in、or子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。

SQL编码规范

车联网技术SQL编码规范 1、严谨使用标量子查询(分页可以使用) select (select ... from a where a.id=b.id) from b 2、不要使用INSERT INTO table VALUE(?,?,?,?,?)格式,要指出 具体要赋值的字段,INSERT的效率会有提高。 3、SELECT与FROM语句之间只定义返回的字段名,除非返回所 有的字段,尽量不要使用* ,字段提取要按照“需多少、提多 少”的原则(因为大批量数据的抽取会影响SQL缓存的效率)4、避免使用COUNT(*),因为COUNT(*)会对全字段做聚集,建 议使用COUNT (0)或COUNT(1)这样的查询语句,有主键ID,尽量使用count(id) 5、使用OR 会引起全表扫描,比较影响查询效率,尽可能少用或 不用,实在不行可以用UNION ALL代替。NULL的检索要回避 一下。 6、使用DISTINCT是为了保证在结果集中不出现重复值,但是 DISTINCT会产生一张工作表,并进行排序来删除重复记录, 这会大大增加查询和I/O的操作次数。因此应当避免使用 DISTINCT关键字 7、负逻辑如!=、<>、not in等,都会导致全表扫描来完成查询。 当表较大时,会严重影响系统性能,可以用别的操作来代替。 8、join 与on 必须严格匹配,不允许出现没有on的join 9、Where 子句中的连接顺序:数据库采用自下而上的顺序解析

where子句,根据这个原理,表之间的连接必须写在其他where 条件之前,那些可以过滤掉大量记录的条件必须写在where子句的末尾。如: 低效:select * from emp e where sal>5000 and job = ‘manager’ and 25< (select count (*)from emp where mgr=e.empno); 高效:select * from emp e where 25<(select count(*) from emp where mgr=e.empno) and sal>5000 and job=’manager’; 10、在使用UNION或UNION ALL 的前后的两个SQL需要加( )。 11、避免使用IN和NOT IN ,使用EXIST和NOT EXIST代替。 12、将计算从等号左边移到右边,例如:把a*2>4改为a>4/2;把TO_CHAR(zip) = ‘94002’ 改为zip = TO_NUMBER('94002')。 13、不要使用NOT,如Goods_no != 2,要改为: where Goods_no>2 or Goods_no<2 14、不要使用is null , 如WHERE DEPT_CODE IS NOT NULL 要改为: WHERE DEPT_CODE >=0; 15、尽量把循环的操作封装到SQL写的存储过程里,因为存储过程都在服务端执行,所以没有数据往返的消耗。有机会,将一些查询封装到函数里,而在普通SQL里使用这些函数,同样是很有效的优化。 16、索引列上>= 代替> 如: 高效:select * from emp where deptno >=4

sql规范

Sql规范 一、数据库设计规范 设计阶段可以说是系统性能的关键阶段 1.1、数据库逻辑设计的规范化 遵守数据的设计规范3NF 规定 ?无重复的列 要求表中的每一列只包含一个实例信息 例如: 员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示; 员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。 ?表内的每一行都应该被唯一的标识(有唯一键) 例如: 员工信息表中加上了员工编号(UserId)列,因为每个员工的员工编号是唯一的,因此每个员 工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。 ?表内不应该存储依赖于其他键的非键信息。 要求一个数据库表中不包含其他表中的非主键信息 例如: 一个部门信息表,其中每个部门有部门编号(DeptId)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。 1.2、合理的冗余 没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提 高运行效率,就必须降低范式标准,适当保留冗余数据 例如: 商品的基本表,如下所示“金额”这个字段的存在,表明该表的设计不满足第三范式,因为

“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额” 这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。 1.3、字段规范 字段是数据库最基本的单位,其设计对性能的影响是很大的 一行记录必须表内唯一,表必须有主键 用尽量少的存储空间来存数一个字段的数据. 数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下。 例如 能用int的就不用char或者varchar 能用nvarchar(20)就不用nvarchar(500) 字段必须定义合适的数据类型,以减少使用过程中的数据类型转换 例如 日期类型应用datetime 禁止用nvarchar 尽量不要允许NULL,除非必要,可以用默认值代替 尽量少用TEXT和IMAGE,二进制字段的读写是比较慢的 枚举类型的字段,需要有comment 中文注释 例如 用户表中的用户状态用1、2、需要注释1:正常、2:禁止 1.4、索引规范 在设计阶段,可以根据功能和性能的需求进行初步的索引设计,这里需要根据预计的数据量和查询

PLSQL编写规范v

3. 基本策略 3.1 设计策略 分类拆分数据量大的表。 对于经常使用的表(如某些参数表或代码对照表),由于其使用频率很高,要尽量减少表中的记录数量。例如,银行的户主账表原来设计成一张表,虽然可以方便程序的设计与维护,但经过分析发现,由于数据量太大,会影响数据的迅速定位。如果将户主账表分别设计为活期户主账、定期户主账及对公户主账等,则可以大大提高查询效率。 分区策略 在拥有数500行以上的表时,采用分区策略。 索引设计。 对于大的数据库表,合理的索引能够提高整个数据库的操作效率。在索引设计中,索引字段应挑选重复值较少的字段;在对建有复合索引的字段进行检索时,应注意按照复合索引字段建立的顺序进行。例如,如果对一个5万多条记录的流水表以日期和流水号为序建立复合索引,由于在该表中日期的重复值接近整个表的记录数,用流水号进行查询所用的时间接近3秒;而如果以流水号为索引字段建立索引进行相同的查询,所用时间不到1秒。因此在大型数据库设计中,只有进行合理的索引字段选择,才能有效提高整个数据库的操作效率。 有时候为了提高性能。减少表的关联,恰当的数据冗余是允许的。 索引对新增,删除,更新的性能影响比较大,对相关的表的索引使用要权衡为表和索引建立不同的表空间,禁止在系统表空间中放入非核心oracle系统成分的对象,确保数据表空间和索引表空间位于不同的磁盘磁盘驱动器上。 对于经常发生同时查询或频繁查询的表,最好把他放到不同的磁盘空间上 4. 逻辑设计规范 4.1 范式 如果没有性能上的原因,应该使用关系数据库理论,达到较高的范式,避免数据冗 余。 如果在数据量上与性能上无特别要求,考虑到实现的方便性可以有适当的数据冗 余,但基本上要达到3NF。 4.2 表设计 对于数据量比较大的表,根据表数据的属性进行分区,以得到较好的性能。如果表 按某些字段进行增长,则采用按字段值范围进行范围分区;如果表按某个字段的几

SQL开发规范

SQL开发规范

目录 命名规则 (3) P ASCAL命名 (3) 表名和字段 (3) 存储过程 (3) 视图 (3) 其他 (3) 设计规范 (4) 规范约定 (4) 字段规范 (4) 使用规范 (4) 查询语句 (4) 数据修改 (4) 综合使用 (4)

命名规则 Pascal命名 1.每一个单词的第一个字母大写,例如:B ank N ame 2.常用单词缩写三个字母以下字母都大写,例如:SP、PG 3.常用单词缩写三个字母以上第一个字母大写,例如:Xml 表名和字段 1.使用英文单词或词组作为表名,不得使用汉语拼音 2.如有必要,建立一个中英文对照字典 3.用名词和名词短语作表名 4.不使用复数,除非与数据库保留字冲突 5.用Pascal 命名规则 6.尽量谨慎地使用缩写 7.尽量不要和关键字重合 8.必要时,使用下划线分割单词 示例 ProductName 存储过程 命名规则为TableName_action或前缀_ActionName,作业调度使用Job前缀,action或ActionName为存储过程含义用动词或动词短语来命名 1.使用常见的缩写,尽量不要和关键字重合 2.适当的使用下划线分割过长的名称 3.当操作依赖条件时,结尾使用By+条件 4.过长的SQL语句需要手工折行 示例: AdminUser_ins Job_Dowork 视图 视图的命名采用V_ViewName的格式,其中V_前缀表示视图,ViewName部分表示视图的含义。 1.使用英文单词或词组作为视图名,不得使用汉语拼音 2.用名词和名词短语作视图名 3.不使用复数,除非与数据库保留字冲突 4.用Pascal 命名规则 5.尽量谨慎地使用缩写 6.尽量不要和关键字重合 7.必要时,使用下划线分割单词 视图正确的命名,例如: V_UserInfo 其他 1.使用英文单词或词组作为数据库对象名,不得使用汉语拼音

SQL编写规范分解

湖北电信经营分析与决策支持系统项目 SQL编写规范 2007年3月 本文档及其所含信息为机密材料 并且由湖北电信和NCR共同拥有 本文档中的任何部分都不得以任何手段任何形式进行复制与传播未经湖北电信和NCR书面授权,不得将材料泄露给第三方Copyright ? 2007 Hubei Telecom & NCR版权 保留所有的权利

文档控制文件准备资料 HBDX意见 客户签收

目录 1前言 (2) 1.1边界定义 (2) 1.2原则定义 (2) 2格式编排约定 (3) 2.1基本要求 (3) 2.2编写规范 (3) 2.2.1字段排列要求 (3) 2.2.2字段分割符’,’点书写位置要求 (3) 2.2.3字段别名‘AS’ 语句编写要求 (3) 2.2.4SELECT子句排列要求 (4) 2.2.5运算符前后间隔要求 (4) 2.2.6CASE语句的编写 (4) 2.2.7子查询嵌套编写规范 (5) 2.2.8表别名定义约定 (5) 2.2.9变量引用 (6) 3语法及数据操作约定 (6) 3.1JOIN操作语法要求 (6) 3.2INSERT语句编写规范 (7) 3.3DELETE语句编写规范 (8) 3.4NULL值处理约定 (8) 3.4.1数字型字段NULL值的处理 (8) 3.4.2字符型字段NULL值的处理 (8) 3.4.3提取日期型字段的处理 (8) 3.5除法运算被0除的处理 (8) 3.6比较逻辑运算处理约定 (9) 3.6.1字符型比较的处理 (9) 3.6.2日期型比较的处理 (9) 3.7注释约定 (9) 3.8其它 (10) 4常用Teradata SQL知识介绍 (10) 4.1NOT IN与MINUS (10) 4.2取字符串长度 (11) 4.3多表连接中的条件限制(WHERE AND ON) (11)

SQLserver数据库设计及开发规范

LMS项目数据库设计 及使用规

在本项目中,数据库的设计和使用必须遵循以下原则: 1命名原则 1.1约定: Pascal Casing命名方式: 1.每一个单词的第一个字母大写,例如:B ank N ame。 2.常用单词缩写三个字母以下字母都大写,例如:SP、PG 3.常用单词缩写三个字母以上第一个字母大写,例如:Xml 1.2表名和字段 规则如下: ?使用英文单词或词组作为表名,不得使用汉语拼音,建立一个中英文对照字典。 ?用名词和名词短语作表名 ?不使用复数,除非与数据库保留字冲突 ?用Pascal 命名规则 ?尽量谨慎地使用缩写 ?尽量不要和关键字重合 ?不要用任何名前缀(例如U,B) ?数据库对象名称不使用下划线 正确的命名,例如: Users Order Product 1.3存储过程 规则如下: 命名规则为up_xxx_StoredProcedureName,up表示User Procedure,用来区分它和系统存储过程,xxx表示子系统的名称,由三个字母构成,各个子系统参见下表,StoredProcedureName为存储过程含义 StoredProcedureName规则如下: ?用动词或动词短语来命名,并带有宾语 ?需要符合用Pascal 命名规则。 ?尽量谨慎地使用缩写 ?尽量不要和关键字重合

?不要用任何名前缀(例如U,B) ?StoredProcedureName不使用下划线 ?当操作依赖条件时,一般结尾使用By+条件 存储过程正确的命名,例如: Up_Usr_InsertUser Up_Usr_SearchUserByUserID Up_Usr_DeleteUserByUserID 各个子系统的缩写如下: 1.4视图 规则如下: ?视图的命名采用vw ViewName的格式,其中vw前缀表示视图,ViewName部分表示视图的含义。 ViewName规则如下: ?用名词和名词短语, ?不使用复数 ?用Pascal 命名规则 ?尽量谨慎地使用缩写 ?尽量不要和关键字重合 ?不要用任何名前缀(例如U,B) ?ViewName中不使用下划线 视图正确的命名,例如: vwUser vwUserOrder vwTranscation 视图错误的命名,例如: UserView vw_Transcation_View

SQLServer数据库设计命名规范

SQLServer数据库设计规范 1 相关的设计规范 1.1 采用有意义的字段名 尽可能地把字段描述的清楚些。当然,也别做过头了,比如CustomerShippingAddressStreetLine1 虽然很富有说明性,但没人愿意键入这么长的名字,具体尺度就在你的把握中。每个单词的首个字母要求用大写!!!不要用下划线来连接每个单词。 1.2 遵守3NF 标准3NF 规定: A.表内的每一个值都只能被表达一次。 B.表内的每一行都应该被唯一的标识(有唯一键)。 C.表内不应该存储依赖于其他键的非键信息。 1.3 小心保留词 要保证你的字段名没有保留词、数据库系统或者常用访问方法冲突,比如,写的一个ODBC 连接程序里有个表,其中就用了DESC 作为说明字段名。后果可想而知!DESC 是DESCENDING 缩写后的保留词。表里的一个SELECT *语句倒是能用,但我得到的却是一大堆毫无用处的信息。 1.4 保持字段名和类型的一致性 在命名字段并为其指定数据类型的时候一定要保证一致性。假如字段在某个表中叫做“AgreeMentNumber”,你就别在另一个表里把名字改成“ref1”。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。记住,你干完自己的活了,其他人还要用你的数据库呢。

2 命名规则: 2.1 数据库(Database)的定义 数据库名称= 数据库内容标识(首字大写) 2.2 表(Table)的定义 命名应尽量反映存储的数据内容。 表名前缀:以该表及与该表相关联的一系列表的内容而得到一个代表统一的标识 表名称= 表名前缀+ 表内容标识(首字大写) 如ClientInfo相关联的一系的表以ci作为前缀, 即有表名:ciHistory,ciContact,ciBusiness 2.3 字段(Field)的定义 字段是数据库中的用途最广泛的,它的类型非常多,所以必须加类型前缀来标示它的类型。 字段名称= 字段类型前缀+ 字段内容标识(首字大写) 2.4 视图名 视图的名称= "vw" + 视图内容标识(首字大写) 如vUserPerm 2.5 触发器名 触发类型触发标识 ----------------------------------- Insert i Delete d Update u

MSSQLServer命名及编码规范

MS SQL Server命名及编码规范 文件类型:项目管理(标准/规范/模板) 文件编号: 版本: 1.0 A 版权声明 本文件版权属于XXXXX,保留所有权利。 本文件中包含的信息属于XXXXX的资产及机密,文件中的任何部分未经授权不得以任何形式复制(包括复印及以电子文本的形式传播)。 B 版本历史 C 分发范围 本文档分发范围包括:XXXXXX管理人员、开发人员、项目管理人员。

1编写目的 编写本文档的目的是在使用MS SQL Server数据库的过程中,使用统一的命名和编码规范,使数据库命名及编码风格标准化,以便于阅读、理解和继承。 2适用范围 本规范适用于公司范围内所有以SQL SERVER 2000/2005 作为后台数据库的应用系统和项目开发工作。 3对象命名规范 3.1 通用规则 Pascal 规则 每个单词开头的字母大写(如: TestCounter)。 Camel 规则 除了第一个单词外的其他单词的开头字母大写. 如:testCounter。 Upper 规则 仅用于被广泛认可的缩写命名(一般不超过四个字符,超过四个字符长度应该应用Pascal规则)。如:OLAP、PIN。 3.2 数据库名 数据库名定义为系统名_模块名,如“crm_customer”表示CRM系统的cust omer处理模块数据库。 数据库名全部采用小写。

3.3 数据库文件 数据文件命名采用数据库名+_+文件类型+[文件序号]+文件后缀,[文件序号]为1、2、3…9 等数值,当数据库中某一文件类型的文件有多个时加上文件序号以区别。只有一个时可不加。 文件后缀:主数据文件为.mdf,其它数据文件为.ndf,日志文件为.ldf。 文件名全部采用小写。 比如系统名为“crm_customer”,则数据库数据文件命名为“crm_customer_ data.mdf”,日志文件命名为“crm_customer_log.ldf”。 3.4 表 表命名要遵循以下原则: 直接使用表义名,不使用任何前缀。 整个表名的长度不要超过30 个字符。 表义名需遵循[3.1]表述的规则,尽量以英文命名,也可使用汉语拼音的首字符命名。表义名中汉语拼音均采用小写,且字符间不加分割符;单 词命名的表义名采用名词性质的单词,各单词的首字符大写,其它字符 小写。多个单词间不加任何分割符,如果整个单词太长,则使用完整的 第一音节或经过仔细选择的缩写词。名词全部采用单数形式。 表别名取表义名的前3 个字符加最后一个字符。 如果存在冲突,适当增加字符(如取表义名的前4 个字符加最后一个字符等)。 关联表命名为“Re_表A_表B”形式,Re 是Relative的缩写,表A 和表B均采用其表义名或缩写形式。 3.5 属性(列或字段) 属性命名遵循以下原则: 采用有意义的列名,尽量使用英文,或有实际含义的汉语拼音的首字符,且字符间不加任何分割符。 如果字段为bool型,则使用"IsShow", "IsValid", "HasPassed", "Ha sExamined", "IgnoreCase"这种形式表示。

sql语句书写规范

竭诚为您提供优质文档/双击可除 sql语句书写规范 篇一:标准sql语句的写法 有次面试非得让我写3表连接查询的标准sql语句,可是我不知道,我们一般都是直接写而不考虑是否遵循标准,能用即可的。所以检查了一下。 具体的如下: (https://www.doczj.com/doc/e03096797.html,/u/22313/showart.phpid=21 4419) 一、简单查询 简单的transact-sql查询只包括选择列表、FRom子句和wheRe子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段。 selectnickname,email FRomtesttable wheRename=张三 (一)选择列表

选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。 1、选择所有列 例如,下面语句显示testtable表中所有列的数据: select* FRomtesttable 2、选择部分列并指定它们的显示次序 查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。例如: selectnickname,email FRomtesttable 3、更改列标题 在选择列表中,可重新指定列标题。定义格式为: 列标题=列名 列名列标题 如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:select昵称=nickname,电子邮件=email FRomtesttable 4、删除重复行 select语句中使用all或distinct选项来显示表中符

SQL语句编写与优化规范

SQL语句编写与优化规范 1用SELECT查询用具体字段代替“*”,且尽可能只查询需要的字段。 SELECT * FROM DEMO_TABLE; SELECT FIELD1,FILED2 FROM DEMO_TABLE; 2多表查询时,使用表的别名,就可以减少解析的时间并减少那些由列名歧义引起的语法错误 SELECT FIELD1,FILED2 FROMDEMO_TABLE1,DEMO_TABLE2 WHERE T1_ID=T2_ID; SELECT t1.T1_ID=t2.T2_ID; 3用EXISTS替代IN,用NOT EXISTS替代NOT IN SELECT * FROM EMP ( FROM DEPT WHERE LOC = 'MELB'); SELECT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = 'MELB') 4WHERE条件连接顺序,把表关系写在最前 例如Oracle采用自下而上的顺序解析WHERE子句,表之间的条件连接必须写在其他条件之前,把可以过滤掉大量数据的条件写在WHERE子句的最后,按照过滤记录数量的多少 SELECT * FROM A a, B b WHERE a.num>3000 and b.state=2 AND a.ID=b.ID; SELECT * FROM A a, B b WHERE a.ID=b.ID and b.state=2and a.num>3000 5删除全表时,用TRUNCATE替代DELETE 当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况) 而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.

SQL编写规范

SQL编写规范

**公司ERP组SQL编写规范 Author by DB小组

1.写SQL注意事项 1.1书写规范: 1)S QL语句大小写: 所有数据库关键字和保留字 均使用大写 2)不允许把多个语句写在一行中,一行只写一 条语句 3)避免将复杂的SQL 语句写到同一行,建议要 在关键字和谓词处换行 4)相对独立的程序块之间必须加空行。 5)I NSERT语句中必须指定字段列表,防止表结 构变化导致的错误 1.2命名规范: 1)不要使用数据库关键字和保留字创建对象名 (如select 等) 2)命名中不要使用中文和特殊字符,下划线可以 使用. 3)严禁使用空格给表和字段来命名 4)创建对象时,对象名注意不要加双引号 5)对象名称不要超过30个字符 6)变量命名规定如下:

i.函数或过程中所接收变量名称以P_开头,如 create proc aaa(P_branchid in varchar2) ii.过程中所定义变量以V_开头,如declare v_branchid varchar2(3) 7)E RP数据库对象命名必须加前缀以标识对象类 型,规范如下: 表(table)tb_ 视图(view) vw_ ` 序列(sequence) seq_ 簇(cluster) c_ 触发器(trigger) trg_ 存储过程(procedure) sp_ 函数(function) fun_ 物化视图(materialized view) mv_ 包和包体(package & package body) pkg_ 类和类体(type & type body) typ_ 主键(primary key) pk_ 外键(foreign key) fk_ 唯一索引(unique index) uk_ 普通索引(normal index) ix_ 位图索引(bitmap index) bi_ 同义词(synonym)依据所分配的表所属模块 数据库链接(database link)根据所连接服务器特点指定名称 1.3注释规范: 1)在一般情况下,源程序有效注释量必须在30% 左右,注释不宜太多也不能太少,注释语言需 准确、易懂、简洁、精炼。 2)尽量使用中文进行注释,对内容描述应该准确 完整 3)避免在一行代码中间或表达式中间加入注释

SQL Server数据库规范

数据库设计规范 1.简介 数据库设计是指对一个给定的应用环境,构造最优的数据库模式,建立数据库及其他应用系统,使之能有效地存储数据,满足各种用户的需求。数据库设计过程中命名规范很是重要,命名规范合理的设计能够省去开发人员很多时间去区别数据库实体。 最近也因为工作需要所以整理出了这个word文档,望大家指正。 2数据库设计 数据库规划→需求分析→数据库设计→应用程序设计→实现→测试→运行于维护 2.1数据库规划 定义数据库应用系统的主要目标,定义系统特定任务,包括工作量的估计、使用资源、和需求经费,定义系统的范围以及边界。 2.2需求分析 2.1.1需求分析步骤与成果 涉及人员:用户和分析人员 任务:对现实世界要处理的对象进行详细的调查,收集基础数据及处理方法,在用户调查的基础上通过分析,逐步明确用户对系统的需求,包括信息的要求及处理的要求。 方法与步骤:1.通过与用户的调查,对用户的信息需求进行收集。 2.在收集数据的同时,设计人员要对其进行加工和整理,以数据字典和数据流图的形式描述出来,并以设计人员的角度向用户讲述信息,根据用户的反馈加以修改并确定(该过程是反复的过程) 成果:数据流图,数据字典,各种说明性表格,统计输出表以及系统功能结构图。 2.1.2数据流图基本元素与数据流图 外部实体:存在于软件系统之外的人员或组织(正方形或立方体表示)。 加工:数据处理,表示输入数据在此进行变换,产生输出数据(圆角巨型或圆形表示)。数据流:表示流动着的数据(箭头线表示)。 数据存储:用来表示要存储的数据(开门矩形或两条平行横线表示)。 订单处理系统顶层流程图:

0层数据流图:

sql语句书写规范

sql语句书写规范 篇一:标准Sql语句的写法 有次面试非得让我写3表连接查询的标准SQL语句,可是我不知道,我们一般都是直接写而不考虑是否遵循标准,能用即可的。所以检查了一下。 具体的如下:(22313/?id=214419) 一、简单查询 简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段。 SELECT nickname,email FROM testtable WHERE name='张三' (一) 选择列表 选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变

量)等构成。 1、选择所有列 例如,下面语句显示testtable表中所有列的数据: SELECT * FROM testtable 2、选择部分列并指定它们的显示次序 查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。例如: SELECT nickname,email FROM testtable 3、更改列标题 在选择列表中,可重新指定列标题。定义格式为: 列标题=列名 列名列标题 如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:SELECT 昵称=nickname,电子邮件=email

FROM testtable 4、删除重复行 SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 5、限制返回的行数 使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。 例如: SELECT TOP 2 * FROM testtable SELECT TOP 20 PERCENT * FROM testtable (二)FROM子句 FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之

编程规范(T-SQL)

技术文件 技术文件名称:编码规范-TSQL 技术文件编号:TECH-0002 版本:V0.1 共14 页 (包括封面) 拟制 审核 会签 标准化 批准 互动时代科技有限公司技术部

1. 概述 1.1. 基本原则 以大小写敏感编写SQL语句。 尽量使用Unicode 数据类型。 优先使用连接代替子查询或嵌套查询。 尽量使用参数化SQL查询代替语句拼接SQL查询。 禁止使用[拼音]+[英语]的方式来命名SQL对象或变量。 尽量使用存储过程代替SQL语句。 1.2. 基本规范 建议采用Pascal样式或Camel样式命名数据库对象。 大写T-SQL语言的所有关键字,谓词和系统函数。 2. 命名规范 在一般情况下,采用Pascal样式或Camel样式命名数据库对象,使在开发基于数据库应用程序的时候通过ORM工具生成的数据访问代码不需要调整就符合程序开发语言(比如C #)命名规范。另外,关系型数据库同Xml结合得越来越紧密,规范的命名越来越重要。 在实际数据库开发过程中,如果需求方已经提供数据库设计方案,建议以提供的方案为准;在原有数据库上进行升级开发时,在可行的情况下可适当做出设计调整以符合编程规范。 1.3. 对象命名 1.3.1. 数据库 第一种方式,采用Pascal样式命名,命名格式为[项目英文名称]。 示例:AdventureWorks 第二种方式,采用Pascal样式命名,命名格式为[项目英文名称] + Db。 示例:AdventureWorksDb BizTalkRuleEngineDb 建议采用第一种方式。 1.3. 2. 数据库文件 数据文件:[数据库名称] + _Data.mdf 日志文件:[数据库名称] + _Log.ldf

SQL代码编写指导规范

SQL代码编写指导规范Array SQL代码编写指导规范

目录 1 简介 (2) 1.1 目标 (2) 1.2 范围 (2) 1.3 基本依据 (2) 1.4 使用约定 (2) 1.4.1 规则 (2) 1.4.2 建议 (2) 1.5 术语和缩略语 (2) 1.6 参考 (3) 2 通用规则 (3) 3 配置约定 (3) 4 格式约定 (3) 5 命名约定 (4) 5.1 一般规则 (4) 5.2 命名规则 (4) 5.3 常用规则 (5) 5.4 约定规则 (6) 5.4.1 表名采用前缀+表名的方式,前缀定义如下: (6) 6 注释 (7) 6.1 SQL代码注释 (7) 6.2 对象注释 (7) 7 嵌入式代码 (8)

1 简介 开发小组在进行SQL 编程时常常会忽略所谓的编码标准,但这些标准却是开发小组顺利开展工作的关键工具。这里介绍的编码标准是经整理出来的开发成果。它们当然还没有得到普遍接受,而且不可否认,有些标准带有主观色彩。整理出此规范实际上更多的是为了提高大家的意识,而不是吹捧每个人是SQL 编写方面的仲裁者:最重要的是要建立某些合理的编码标准并遵循这些标准。您在这篇文章中会发现有关SQL 编程的一系列不同的编码标准、技巧和提示。它们并未以任何特定的优先级或重要性顺序列出。 1.1 目标 本主题提供SQL编程语言的命名指南。希望能对下述情况有积极的作用: 避免Errors/Bugs ,特别是难以查询的Errors/Bugs 规范不良的编码习惯 提高程序的可读性、可维护性和可移值性 1.2 范围 规范只针对SQL Server数据库中的SQL编程语言。 1.3 基本依据 本文档主要依据一位具有超过25 年经验的数据库管理员和应用程序开发员Brian Walker 提出的开发成果。 同时也可参考MSDN文档中相应的规范。 1.4 使用约定 1.4.1 规则 本文档表明没有特别的理由必须要遵守的要求。违反规则的编码人员必须至少同有经验的同事商量并取得违反规则的理由共识后才能实施。必须对违反规则的代码进行注解。 1.4.2 建议 正常情况下优先考虑,如果有违反建议的编码,应该同有经验的同事商量并取得违反建议的理由共识后才能实施,推荐对违反建议的代码进行注解。 1.5 术语和缩略语 如下表所示:

MySQL数据库设计SQL规范

MySQL数据库设计SQL规范 1 命名规范 1、库名、表名、字段名必须使用小写字母并采用下划线分割; 2、库名、表名、字段名支持最多32个字符,易于辨识以及减少传输量不要超过32; 3、库名、表名、字段名禁止使用MySQL保留关键字; 4、临时库、临时表名必须以tmp为前缀并以日期为后缀; 5、备份库、备份表名必须以bak为前缀并以日期为后缀; ---------------------------------------------------------------- 2 基本规范 1、使用INNODB存储引擎 5.5以后的默认引擘,支持事务,行级锁,更好的恢复性,高并发下性能更好,对多核,大内存,ssd等硬件支持更好; 2、表字符集使用UTF8 使用utf8字符集,如果是汉字,占3个字节,但ASCII码字符还是1个字节;统一,不会有转换产生乱码风险; 3、所有表都需要添加注释; 4、不在数据库中存储图片、文件等大数据; 5、禁止在线上做数据库压力测试; 6、禁止从测试、开发环境直连线上数据库; ----------------------------------------------------------------- 3 库表设计规范 1、尽量避免使用分区表 MySQL的分区表实际性能不是很好。 2、拆分大字段和访问频率低的字段,分离冷热数据 3、采用合理的分库分表策略,推荐使用HASH进行分表,表名后缀使用十进制数,下标从0开始 首次分表尽量多的分,避免二次分表,二次分表的难度和成本较高 4、按日期时间分表需符合YYYY[MM][DD][HH]格式 5、单表字段数控制在20个以内 6、一条完整的建表语句中应包含必要的字段、主键、合理的索引(综合代码中所有的条件语句创建合理的索引,主键必须要有) ------------------------------------------------------------------- 4 索引设计规范 索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间 1、单张表中索引数量不超过5个; 2、单个索引中的字段数不超过5个;

TSQL命名规则

Transact-SQL编程规范 1. 概述 1.1. 基本原则 以大小写敏感编写SQL语句。 尽量使用Unicode 数据类型。 优先使用连接代替子查询或嵌套查询。 尽量使用参数化SQL查询代替语句拼接SQL查询。 禁止使用[拼音]+[英语]的方式来命名SQL对象或变量。 尽量使用存储过程代替SQL语句。 1.2. 基本规范 建议采用Pascal样式或Camel样式命名数据库对象。 大写T-SQL语言的所有关键字,谓词和系统函数。 2. 命名规范 在一般情况下,采用Pascal样式或Camel样式命名数据库对象,使在开发基于数据库应用程序的时候通过ORM工具生成的数据访问代码不需要调整就符合程序开发语言(比如C#)命名规范。另外,关系型数据库同Xml结合得越来越紧密,规范的命名越来越重要。 在实际数据库开发过程中,如果需求方已经提供数据库设计方案,建议以提供的方案为准;在原有数据库上进行升级开发时,在可行的情况下可适当做出设计调整以符合编程规范。

1.3. 对象命名 1.3.1. 数据库 第一种方式,采用Pascal样式命名,命名格式为[项目英文名称]。 示例:AdventureWorks 第二种方式,采用Pascal样式命名,命名格式为[项目英文名称] + Db。示例:AdventureWorksDb BizTalkRuleEngineDb 建议采用第一种方式。 1.3. 2. 数据库文件 数据文件:[数据库名称] + _Data.mdf 日志文件:[数据库名称] + _Log.ldf 示例:AdventureWorks_Data.mdf AdventureWorks_Log.ldf 1.3.3. 关系型数据仓库 采用Pascal样式命名,命名格式为[项目英文名称] + DW。 示例:AdventureWorksDW 1.3.4. 数据架构 除SQL Server 系统定义的数据架构外,新建架构采用Pascal样式命名,命名格式为[架构名]。 示例:HumanResources Production

依据SQL编写的规范标准说明

SQL编写规范 1.书写格式 示例代码: 存储过程SQL文书写格式例 select c.dealerCode, round(sum(c.submitSubletAmountDLR + c.submitPartsAmountDLR + c.submitLaborAmountDLR) / count(*), 2) as avg, decode(null, 'x', 'xx', 'CNY') from ( select a.dealerCode, a.submitSubletAmountDLR, a.submitPartsAmountDLR, a.submitLaborAmountDLR from SRV_TWC_F a where (to_char(a.ORIGSUBMITTIME, 'yyyy/mm/dd') >= 'Date Range(start)' and to_char(a.ORIGSUBMITTIME, 'yyyy/mm/dd') <= 'Date Range(end)' and nvl(a.deleteflag, '0') <> '1') union all select b.dealerCode, b.submitSubletAmountDLR, b.submitPartsAmountDLR, b.submitLaborAmountDLR from SRV_TWCHistory_F b where (to_char(b.ORIGSUBMITTIME, 'yyyy/mm/dd') >= 'Date Range(start)' and to_char(b.ORIGSUBMITTIME,'yyyy/mm/dd') <= 'Date Range(end)' and nvl(b.deleteflag,'0') <> '1') ) c group by c.dealerCode order by avg desc; Java source里的SQL字符串书写格式例 strSQL = "insert into Snd_FinanceHistory_Tb " + "(DEALERCODE, " + "REQUESTSEQUECE, " + "HANDLETIME, "

相关主题
文本预览
相关文档 最新文档