数据库技术规范
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库技术规范
XXXXXX公司
二零一六年十月
目录
数据库技术规范 (4)
1建表规范 (4)
2使用范围 (4)
3概述 (4)
4书写 (4)
5注释 (5)
6ORACLE、MYSQL、SQL SEVER差异 (5)
7优化 (7)
8索引创建原则 (7)
9函数、表达式使用 (8)
IN/OR子句使用 (8)
!=或<>操作符子句使用 (8)
不要对索引字段进行运算 (8)
不要对索引字段进行格式转换 (8)
不要对索引字段使用函数 (9)
不要对索引字段进行多字段连接 (9)
Like的使用 (9)
10设计 (10)
数据库逻辑设计的规范化 (10)
合理的冗余 (10)
主键的设计 (10)
外键的设计 (10)
字段的设计 (11)
索引的设计 (11)
数据库技术规范
1建表规范
表名:表的命名使用【模块名_子模块】的方式命名,全部大写。
字段名:字段名包含多个单词的,使用下划线分开,全部大写。
日期一律使用varchar。
外键一律不设,交由程序处理控制。
2使用范围
所有需要与数据库交互的应用系统。
3概述
大部分业务系统需要与数据库进行交互,与数据库交互的主要方式就是SQL 语句,编写规范的SQL语句不但利于阅读,而且被数据库重复使用的几率也较大,执行效率相对较高,编写的好的SQL与编写的差的SQL在执行性能上可能会差几倍甚至几千几万倍,因此养成好的SQL编写规范对于提高项目质量及提高开发人员自身素质有着潜在的极大的影响。
4书写
SQL书写遵守如下规范:
◆在同一个项目中,为了最大限度实现SQL的共享,要求书写sql语句时大小
写要一致,为了阅读方便和统一起见,所有SQL语句全部小写(如SQL谓词,字段名,表名等),常量除外,常量可以按需要书写。
举例:下面两个相同的语句除常量外都要统一起来。
1)select name from emp;
2)select ‘NAME’fromemp where emp_no=’QD001’
◆SQL语句尽可能放在一行,若SQL太长放在一行中影响阅读时可分多行,
但要保持缩进一致,缩进可用TAB或者空格,但TAB数和空格数最好一致。
◆SQL语句中,各谓词之间以空格分割的,尽量保持空格数量一致,即若用一
个空格分割,则全部都用一个空格分割,便于数据库能够共享。
◆能使用绑定变量的,尽量使用绑定变量,尤其是在前台程序中.
◆对下面列出的情况,慎重使用绑定变量:
1)列值倾斜严重,如:某一状态列大部分值是‘1’,只有极少数值为’2’,这种情况不宜用绑定变量,而应该用常量,便于数据库使用柱状图统计
信息。
2)日期时间列。
总之:书写SQL的目标是若sql的用途是一样的,则sql应该完全一致,包括空格,大小写。
5注释
1) 对较为复杂的SQL语句加上注释,说明算法、功能。注释风格:注释单独成行、放在语句前面。
2) 应对不易理解的分支条件表达式加注释。
3) 对重要的计算应说明其功能。
4) 过长的函数实现,应将其语句按实现的功能分段加以概括性说明。
5) 常量及变量注释时,应注释被保存值的含义(必须),合法取值的范围(可选)。
6) 可采用单行/多行注释。(-- 或/* */ 方式)。
6Oracle、MySQL、SQL Sever差异
1.类型转换
--Oracle
Selectto_number('123') from dual; --123;
Selecto_char(33) from dual; --33;
Select to_date('2004-11-27','yyyy/mm/dd') from dual; --2004-11-27
--Mysql
Select cast('123' as signed integer); --123
Select cast(33 as char(2)); --33;
Selectto_days('2000-01-01'); --730485
--SqlServer
Select cast('123' as decimal(30,2)); --123.00
select cast(33 as char(2)); --33;
select convert(varchar(12) , getdate(), 120)
2.四舍五入函数区别
--Oracle select round(12.86*10)/10 from dual; --12.9
--Mysql select format(12.89,1); --12.9
--SqlServer select round(12.89,1); --12.9
3.日期时间函数
--Oracle select sysdate from dual; --日期时间
--Mysql select sysdate(); --日期时间 select current_date(); --日期
--SqlServer select getdate(); --日期时间
select datediff(day,'2010-01-01',cast(getdate() as varchar(10))); --日期相差天数