Oracle数据库开发规范
    ORACLE数据库开发规范
目录
目录	3
1:字符集、字段类型	4
1.1:字符集	4
1.2:字段类型	4
2:命名规范	6
2.1:命名规则表	6
2.2:命名规范:	7
3:书写规范	9
3.1:缩进风格与对齐	9
3.2:语句书写规则	9
3.3:其他	11
4:表	13
5:触发器	14
6:主键和外键:	15
7:索引	16
7.1:建立索引	16
7.2:使用索引	16
8:视图	18
9:存储过程和函数	19
10:注释规范	22
10.1:总则	22
10.2:存储过程、函数头注释	22
10.3:文件注释	23
11:脚本规范	25
12:SQL语句性能优化	27
13:冗余信息	31
14:异常处理	32
附录	33
数据库三个范式	33
1:字符集、字段类型
1.1:字符集
ORACLE的数据库实例有2个字符集设置:数据库字符集和国家字符集。
?	【规则1-1-1】数据库字符集设置为ZHS16GBK,国家字符集设置为AL16UTF16。
?	【规则1-1-2】不要试图修改数据库的字符集。如果需要不同字符集的数据库实例,那只能重新建立一个新的数据库实例。
1.2:字段类型
?	【规则1-2-1】定长文本型字段都要声明char,不定长文本型字段都要声明成varchar2(如果确实需要,也可以使用nvarchar2)类型。
?	例如:
Create table t_test  (name varchar2(10), department nvarchar2(20));
请注意,在ZHS16GBK字符集下,每一个汉字是占用2个字节,而每一个英文字母和符号占用一个字节。上面的name字段可以最多存储5个汉字,或者是10个字母。而department字段可以最多保存20个字符,不论是汉字或者字母。
?	也可以如下声明:
Create table t_test (name varchar2(10 char), department varchar2(20 char));
这样的话,不论是汉字或者是字母,name字段就可以保存最多10个字符,。
?	【规则1-2-1】bool型字段一律定义成char(1)类型,'0 '表示false,'1 '表示true。同时需要在该字段上面加约束,使合法的取值只能是0,1。
?	【规则1-2-2】所有的整型字段都应该声明为 number(n),n为整型字段有效长度。
?	比如
    Create table t_test (age number(3))
字段age能存储从-999 到 999的数字。当然,可以在这个字段上加约束,以约束它只能保存正数。不要如以下的方式定义整型:
Create table t_test (age number)。
因为这样定义等价于:
Create table t_test (age number(38))
很显然,这个字段定义得实在太大太大了。不但没有必要,而且对数据库有负面影响。
?	【规则1-2-3】所有的浮点数定义为:number(p,s),其中的p是表示精度,或者总位数,取1-38中数字。S是小数位数,合法值为:-84--127。
?	比如:
Create table table1 (salary number(8,2))
这个salary字段表示,精确到小数点后面2位,总共最多有8位数字,这样算来,在小数点前面,最多能有6位数字。这个字段能表示的最大正数是999999.99,最大负数是-999999.99。
?	【规则1-2-4】如果一个字段保存的是一系列的编码(枚举型),则该字段必须定义成文本型。字段中保存的是大写字母。
?	举例如下:
Customer表格有一个字段customer_type,该字段对应的是客户的类型编码,字段类型是char(1),其中,'N'表示普通客户,'V'表示VIP客户。同时必须增加约束,以保证枚举选择以外的值不能被插入。
?	【规则1-2-5】如无特殊需求,避免使用大字段(blob, clob, long, text, image 等)。如果需要使用大字段,可以先考虑Blob。
2:命名规范
2.1:命名规则表
对象名	前缀	范例	描叙
数据库实例	无	sale_test	
表空间	ts_	ts_user	
表table	业务模块_	SYS_Customer	表名原则上不超过24个字符
视图view	v_	v_ Customer	视图名原则上不超过24个字符
序列sequence	s_	seq_ t_Customer_id	
约束	ckc_
ckt_	ckc_ t_Customer_id
ckt_ t_Customer	对字段的约束前缀为ckc.
对表的约束前缀为ckt
一般索引	idx_	idx_sample_mid	
唯一索引	unidx_ 	unidx_sample_mid	
分区表本地索引	ln_ 	ln1_system_item_	
分区表全局索引	gn _ 	gn_system_item	
主键	pk_
ak_	pk_ t_Customer
ak_ t_Customer	
存储过程	stp _	stp_InsAgentAccount	
函数	fnc _	fnc_SelMaxData	
包和包体	pkg _	pkg_MngClt	
物化视图	mv _	mv_ Customer	
数据库联接	from_	from_ sale_test	
保存点	spt_	spt_wrp	
变量
自定义记录类型	rec_	Type rec_item is ( item_id varchar2(10));	
游标	cur_	Cursor cur_items is	
局部变量	l_	l_item	
输入变量	i_	i_itme	
输出变量	o_	o_itme	
输入输出变量	io_	io_item	
2.2:命名规范:
?	【规则2-2-1】所有用户自定义的数据库对象名统一使用大写字母。
?	【规则2-2-2】命名尽量采用富有意义的英文词汇,不要采用汉语拼音。
?	示例:以下书写不符合规范
t_wl_item (物料编码表) 
?	应如下命名:
t_mtl_item 
?	【规则2-2-3】所有名称采用英文单数名词或动词,避免出现复数。
?	【规则2-2-4】如果键是主键,用表格名再加前缀pk_的方式命名。如果长度超过30个字符,则对表格名进行缩写。
?	【规则2-2-5】如果键是备选主键,用表格名再加前缀ak_的方式命名。如果长度超过30个字符,则对表格名进行缩写。
?	【规则2-2-6】如果是主键字段,统一命名为:表名(去除业务模块_)+Id;举例如下:
?	用户表SYS_USER;主键则命名为:USERId。
?	【规则2-2-7】存储过程、函数、触发器、程序块中定义的变量和输入、输出参数在命名上有所区分。
?	变量名小写,局部变量名使用“l_”开头。用’i_’ 前缀代表输入参数变量,用’o_’ 前缀代表输出参数变量,用’io_’ 前缀代表输入输出参数变量。
?	【规则2-2-8】当一个单词不能够表达对象的函义时,用词组组合,如果组合太长时,采用简写或缩写,缩写要基本能表达原单词的意义。标识符应当直观且可以拼读,可望文知意。
?	例如,下面的命名就很合适
l_minValue   number;