Oracle开发规范.docx
- 文档编号:12591964
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:26
- 大小:94.35KB
Oracle开发规范.docx
《Oracle开发规范.docx》由会员分享,可在线阅读,更多相关《Oracle开发规范.docx(26页珍藏版)》请在冰点文库上搜索。
Oracle开发规范
*********数据库设计规范
V00.01.000
历史版本
版本
类型
日期
作者
说明
V00.00.001
新建
2012-8-1
苏寒
集合项目现状,参考部分资料编写成稿
Oracle开发规范
1数据库命名约定
1.1规则
⏹命名富有意义英文词汇,多个单词组成的,中间以下划线分割。
⏹除数据库名称长度为1-8个字符,其余为1-30个字符,Databaselink名称也不要超过30个字符。
⏹命名只能使用英文字母,数字和下划线。
⏹避免使用Oracle的保留字如level、关键字如type。
1.2项目模块
编号
名称
英文
缩写
1.
系统管理
System
SYS
2.
产品管理
ProductManagement
PM
3.
营销活动管理
MarketingActivity
MA
4.
仓储管理
WarehouseManagement
WM
5.
物流管理
LogisticsMangement
LM
6.
渠道管理
ChannelsManagement
CM
7.
8.
9.
系统监管
SystemMonitorManagement
MM
注意:
判别某类对象属于哪个模块,通常考虑数据的生成所属的模块、模块对该对象的访问频度及该对象的用途几个因素。
1.3表名
大写,以子系统和模块名的缩写命名。
命名时参照需求分析和系统词汇表。
如:
产品管理的合约计划管理contractplanmanage
可以命名为PM_CONTRACT_PLAN或者PM_CPM。
大写,命名时参照需求分析和系统词汇表。
多个单词组成一个字段用下划线分开,可以简写。
1.4列名
大写,命名时参照需求分析和系统词汇表。
多个单词组成一个字段用下划线分开,可以简写,
如下:
工作计划管理Workplanmanage
可以命名为WORK_PLAN_MANAGE或者WORK_PLAN_M。
1.5视图名
大写,以V作为前缀。
然后加上子系统和模块名的缩写命名,命名应尽量体现各视图的功能。
如:
V_PM_CPM_VALIDE
1.6触发器名
大写,以TRI作为前缀,然后加上表名,再加上出发的动作。
Insert:
I,update:
U,deleteD.
TRI_PM_CPM_IU或者TRI_PM_CPM_IUD
1.7存储过程名
大写,以P作为前缀,然后加上子系统和模块名的缩写命名,再加上功能说明。
后续部分主要以动宾形式构成,并用下划线分割各个组成部分。
注意要尽量描述存储过程的功能。
常用动词缩写:
Search-SCH
Update-UPT
Get–GET
如:
P_PM_UPT_WP
1.8函数名称
大写,以FN作为前缀,后续部分主要以动宾形式构成,并用下划线分割各个组成部分。
注意要尽量描述其功能。
如FN_PARTSTR_COMPANY(分解公司名称字符串).
1.9变量名
变量V_
参数P_
如P_CUST_ID
1.10自定义数据类型、默认、规则命名原则
自定义数据类型:
UD_
默认:
DF_,对于非绑定的默认可取系统默认的名字
规则:
RU_,对于非绑定规则(约束)可取系统默认的名字
1.11主键、外键关系、索引命名原则
主键:
PK_表名
外键关系:
FK_主表_从表
索引:
IDX_表名_列名,符合索引列名间用_隔开
1.12序列命名原则
SEQ_表名
1.13命名中其他注意事项
以上命名都不得超过30个字符的系统限制。
变量名的长度限制为29。
1.14字段NULL值强制默认一览表
数据类型
默认值
Bigint
0
Binary
null
Bit
0
Char
‘’
datetime
“1900-01-01”
decimal
0
Float
0
Image
‘’
Int
0
Money
0
Nchar
‘’
numeric
0
nvarchar
0
Real
0
smallmoney
0
sql_variant
Null
Text
‘’
timestamp
Tinyint
0
varbinary
‘’
Varchar
(2)
‘’
2SQL书写格式
2.1注释
⏹注释以中文为主。
⏹注释尽可能详细、全面,并且将注释放在实现代码的前面,不要集中放在对象的开始。
每一数据对象的前面,应具体描述该对象的功能和用途。
传入参数的含义应该有所说明。
如果取值范围确定,也应该一并说明。
取值有特定含义的变量(如boolean类型变量和枚举型变量),应给出每个值的含义。
⏹注释语法包含两种情况:
单行注释、多行注释
⏹注释简洁,同时应描述清晰。
注释举例:
编写函数、触发器、存储过程以及其他数据对象时,必须为每个对象增加适当注释。
该注释以多行注释为主,主要结构如下(作者可以适当增减):
2.2排版
⏹程序块要采用缩进风格编写,缩进的空格可根据实际情况进行调整,总的原则是使代码清晰可读。
示例:
⏹相对独立的程序块之间、变量说明之后必须加空行。
⏹较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符或关键字放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
示例:
⏹循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符或关键字放在新行之首。
示例:
参考规则1-1的示例。
⏹若函数或过程中的参数较长,则要进行适当的划分。
示例:
⏹只使用空格键,不要使用TAB键。
说明:
以免用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐。
3事务处理
⏹事务是SQL语句的一个序列,对事务的改变通过COMMIT语句成为永久的变化,部分或全部事务可以由ROLLBACK语句撤消。
任何一个事务在运行过程中都要消耗一定的系统资源,如内存、回滚空间、磁盘空间等。
在开发数据库应用软件的过程中,要注意正确估算相关事务的大小,对过大的事务操作采取必要的措施。
⏹明确事务的时间长短,要求事务在该时间内完成。
⏹明确对事务的要求高低:
如果对事务要求较高,对commit语句要判断执行是否正确,发现commit语句执行不正确,进行提示或记录。
如果对事务要求较底,对commit语句不要判断执行是否正确,因为执行不正确也没有解决方法。
对roolback都不用判断。
⏹明确事务书写的规则:
事务和存储过程的关系:
存储过程中包含事务,还是事务中包含存储过程。
同样要明确:
事务和中间件的关系、事务和函数的关系。
⏹明确是否使用事务嵌套:
有的数据库支持事务嵌套,有的数据库不支持事务嵌套。
在设计是要明确整个系统是否使用事务嵌套。
⏹某些复杂的事务提交需要同涉及文件系统的某过程同时提交,此时,需要分析事务与过程的关系,决定提交的次序和错误恢复的策略。
4安全性设计
⏹数据库用户一定要通过操作系统,网络服务,或数据库进行身份确认。
⏹如果用户是通过数据库进行用户身份的确认,那么建议使用密码加密的方式与数据库进行连接。
⏹数据库开发者不能将数据库登陆密码直接写在其开发源代码中。
5优化设计
下面的情况针对的是大数据量的情况下。
在数据量小的时候,下面的约定没有必要,例如,小表扫描比使用索引消耗的资源还小些。
为了SQL语句执行的速度,减少阻塞和死锁,提高请求的响应时间,请遵照如下约定:
5.1索引的使用
在SQL的写法中,所有在大范围数据里搜索记录,必须有合适的索引来配匹,否则引起长时间的表扫描锁定。
这是所有系统性能低下的最基本的根源。
请为每一个SQL语句设计合适的索引,当系统开始设计时没有索引时请向项目经理申请增加。
⏹对于取值不能重复的、经常作为查询条件的字段,应该建立唯一索引:
uniqueindex
示例:
createuniqueindexmy_unique_idxonmyTable(id);
⏹对于经常作为查询条件的字段,其值可以不是唯一,则应该建立可重复索引:
index
示例:
createindexmy_dup_idxonmyTable(name);
⏹尽量避免以索引的一部分作为查询的条件:
示例:
某表的建立SQL为:
createtablemyTable(idint,namechar(8),ageint,
primarykey(id,name))
即表myExample是以id和name共同组成PrimaryKey。
则下面方式的查询语句效率很好:
select...frommyTablewhereid=....andname=....
而如果仅仅以primarykey的一部分作为条件,则没有起到key的作用。
如下面两条SQL查询效率很低:
select...frommyTablewhereid=....
select...frommyTablewherename=...
以上两条SQL,数据库系统将会使用顺序扫描,从而导致效率低下。
⏹组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。
⏹经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
⏹有大量重复值、且经常有范围查询(between,>,<,>=,<=)和orderby
、groupby发生的列,可考虑建立群集索引;
5.2严禁使用的SQL
在大范围的数据情况下,下面的用法,坚决杜绝使用。
1、光标:
大数据范围的循环,Oracle不能很好的支持。
会造成系统性能严重下降。
2、函数:
函数同光标一样一行行的执行,效率也非常低。
3、"!
=","!
>","!
<","NOT","NOTEXISTS","NOTIN","NOTLIKE",like‘%aaa%’等比较运算。
他们都不会做索引。
坚决反对使用。
4、不得建没有作用的事物:
事物的启动需要一定的资源,请不要乱用例如产生报表时。
5、SelectInto创建表:
请使用显示定义Createtable。
特别的是不要在事物里创建表和临时表。
6、在Where字句中,Oracle的函数和字段一定的分离。
坚决不得使用如下的写法:
whereConvert(varchar(10),fdate,112)=‘2003-09-06’或者
whereSubstring(PNO,4,3)=‘001’
他们都是表完全扫描。
5.3需要慎重使用的SQL
下面这些语句容易对服务器造成额外的负担,例如Orderby消耗了大量的CPU资源。
所以要避免采用它,当然不是说不用他们。
有时需要将结果集排序显示就一定要用到Orderby,但不要用多余的Orderby.
⏹OrderBy:
消耗了内存和CPU,在Temp中完成操作。
⏹GroupBy:
同OrderBY
⏹Having:
同OrderBY
⏹Distinct:
同OrderBY
⏹Union(尽量用UnionAll):
同OrderBY
⏹in:
没有Between快。
⏹视图:
尽量少用。
⏹SELECTCOUNT(*):
用Exists更好
5.4大量装载数据的注意事项:
⏹大批量装载数据的时候,如果有可能,尽量把数据库设置为非日志方式。
装载数据完成以后,再把数据库恢复成原先的方式
⏹大批量装载数据的时候,尽量把内存参数、数据同步的参数设大。
⏹大批量装载数据的时候,避免使用insert语句,而应该使用数据库提供的装载工具或者采用游标insert方式来实现。
5.5尽量减少多表连接的操作。
说明:
多表连接的操作一般效率较差,在联机事务处理(OLTP)的应用中,应该尽量避免多表连接的操作,尽量避免建立多表的关系。
示例:
5.6SQL语句优化
说明:
SQL语句编写的好坏,直接影响到系统性能及增加数据库的负荷。
SQL优化的实质就是在结果正确的前提下,用优化器可以识别的语句,充份利用索引,减少表扫描的I/O次数,尽量避免表搜索的发生。
⏹任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
⏹in、or子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。
⏹多条件查询时候,根据最优化原则,指定要应用的索引,屏蔽非索引字段。
SELECT/*+INDEX(DF_ACCOUNTS,IND_JS_CNJ)*/CNJ,ZJEFROMDF_ACCOUNTS
WHEREQH=FQHANDSH=FSHANDYF=C.YFANDYHBH=C.YHBHANDGDH||’’=C.GDH;
5.7建表、索引及关键字时参数的使用
新建表、索引及关键字时,应带相关参数(具体详解见文档:
ORACLE建表参数解释.DOC):
createtableDF_CSDFYB
(
QHVARCHAR2
(2),
SHVARCHAR2(4),
SFDVARCHAR2(4),
YFVARCHAR2(6),
CSHSNUMBER(14))
PCTFREE20
INITRANS2
MAXTRANS255
TABLESPACEGZYD
STORAGE(INITIAL1MNEXT5MMINEXTENTS1MAXEXTENTS2048PCTINCREASE0BUFFER_POOLDEFAULT)
LOGGING
1、建议PCTINCREASE参数设置为0,可使碎片最小化,使每一个Extent都相同(等于NEXT值)。
2、如果一个表无频繁删除,修改操作,建议PCTFREE参数适当设低,如有频繁删除,修改操作可适当调高,如以上格式。
3、根据表数据量的大小及将来的扩充将STORAGE中INITIAL、NEXT合理设置,保证该表数据尽量保持在同一块区,保证查询速度,减少I/O资源损耗。
4、建立索引和关键字时候,指定特定专用的表空间,这样在处理数据时就可以充分利用磁盘I/O,使数据和索引在不同的I/O上进行,以提高访问速度。
6PowerDesigner格式
说明:
由于现在数据库建设为分开小组建立,集中管理,为能够顺利集中,并保持统一格式,所以要求在设计时按如下规范实行:
1、一个模块实体表尽量要求在一个PAGE中画完,便于查阅及交流;
2、表、字段字体要求统一为宋体9号字体;
3、要求表CODE字段为英文名称,NAME字段值为CODE的中文名称+CODE。
4、画布背景色采用白色,子系统独立使用的实体表,背景色设为浅绿色;本子系统使用的系统公共表,背景色设为黄色;子系统内部不同图表层间的引用,背景色设为桔红色。
如下图:
5、要求每个字段、每个表必须在注释中添加说明。
7附录
7.1ORCLE关键字列表
access,add,all,alter,and,any,as,asc,audit
between,bfile,blob,by
char,char,check,clob,cluster,column,comment,compress,connect,count,create,current
date,date,decimal,decimal,default,delete,desc,distinct,drop
else,exclusive,exists
file,float,for,from
grant,group,grouping
having
identified,immediate,in,increment,index,initial,insert,integer,integer,intersect,into,is
level,like,lock,long
maxextents,minus,mlslabel,mode,modify
noaudit,nocompress,not,nowait,null,number,number
of,offline,on,online,option,or,order
pctfree,prior,privileges,public
raw,rename,resource,revoke,row,rowid,rownum,rows
select,session,set,share,size,smallint,start,successful,sum,synonym,sysdate
table,then,to,trigger,type
uid,union,unique,update,user
validate,values,varchar,varchar2,varchar2,varchar,view
whenever,where,with
7.2过程描述规则
--过程名Pro_name:
Pro_子系统缩写_功能点,名称尽量简洁、易懂。
如Pro_Ec_Charge。
--函数名Fun_NameFun_子系统缩写_功能点,类似
--包名Pack_NamePack_子系统缩写_功能点,类似
CREATEORREPLACEPROCEDUREPro_Name(pi_name1INVARCHAR2,--参数说明1传入参数以pi_开头
po_name2OUTNUMBER,--参数说明2返回参数以po_开头
pio_name3INOUTNUMBER--参数说明3传入返回参数以pio_开头
)AS
/*必须有简要的日志说明
日期:
20080101
作者:
存储
内容:
完成数据操作。
--
日期:
20080201
作者:
过程
内容:
修改了部分语句,提高速度。
--
日期:
20080301
作者:
演示
内容:
统一编写风格。
*/
--游标说明
CURSORc_name1IS
SELECTfield1,field2
FROMtable1
WHEREfield3='1';
CURSORc_name2(p_name1CHAR)IS
SELECTfield1,field2
FROMtable2
WHEREfield3=p_name1;
v_name1VARCHAR2(100);--变量说明1普通变量以v_开头
v_name22NUMBER(10);--变量说明1
v_name3NUMBER;
vc_name1c_name1%ROWTYPE;--游标变量以vc_开头
BEGIN
v_name1:
='1';--变量赋值说明1
v_name22:
=2;--变量赋值说明2
FORvc_name1INc_name1LOOP
--游标、循环注释
IF1=1THEN
--条件注释1
NULL;
ELSIF2=2THEN
--条件注释2
NULL;
ENDIF;
ENDLOOP;
FORvc_name1INc_name2(pi_name1)LOOP
CASEv_name3
WHEN1THEN
NULL;
WHEN2THEN
NULL;
ELSE
NULL;
ENDCASE;
SELECTseq_name.NEXTVAL
INTOv_name3
FROMdual;
ENDLOOP;
BEGIN
--特殊情况下,再使用指定索引。
SELECT/*+index(Table1,IDX_Table11)*/
field1,field2,field1,field2,field1,field2,field1,field2,field1,field2,field1,field2
INTOv_name1,v_name3,v_name1,v_name3,v_name1,v_name3,v_name1,v_name3,v_name1,v_name3,v_name1,
v_name3
FROMtable1
WHEREfield3=v_name22
ANDfield4=v_name22;
INSERTINTOtable2
(field1,field2)
VALUES
(v_name1,v_name3);
/*
日期:
20080301
作者:
A君
内容:
取消原来的删除,改为更新。
DELETE
FROMtable3
WHEREfield1=v_name22
ANDfield2=v_name22;
*/
UPDATE/*+index(Table4,IDX_Table41)*/table4
SETfield1=v_name22,
field2=v_name22
WHERE(field3=v_name22ORfield4=v_name22)
ANDfield=1;
EXCEPTION
WHENOTHERSTHEN
NULL;
END;
EXCEPTION
WHENOTHERSTHEN
pro_name2(pi_name1,pio_name3);
ENDpro_name;
/
7.3数据库设计文档格式
表
⏹表名
⏹说明
用途:
是否为关键表:
原系统表名:
重复和冲突:
数据来源:
数据保密性描述:
区域限制和权限限制
可能的修改:
⏹字段
#
字段名称
字段意义
数据类型
可空
默认值
1.
2.
3.
4.
5.
6.
⏹关键字
#
字段名称
关键字类型
关联表
说明
1.
2.
⏹字段说明
#
字段名称
说明
1.
2.
⏹搜索字段
#
字段名称
说明
⏹索引
#
名称
字段
说明
1.
2.
3.
⏹触发器
#
名称
对应文件
说明
1.
2.
3.
⏹数据量
估计每日数据量:
估计最大数据量:
数据量太大引起的问题和处理办法:
⏹备注
视图
#
名称
对应文件
说明
1.
2.
3.
存储过程
#
名称
对应文件
说明
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 开发 规范