ORACLE设计规范
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORACLE设计规范1、数据库模型设计方法规范
1.1、数据建模原则性规范
1.2、实体型之间关系认定规范
1.3、范式化1NF的规范
1.4、范式化2NF的规范
1.5、范式化3NF的规范
1.6、反范式化冗余字段使用规范
1.7、数据库对象命名基本规范
第一:长度规范:凡是需要命名的对象其标识符均不能超过30
个字符,也即:Oracle中的表名、字段名,函数名,过程名,触
发器名,序列名,视图名的长度均不能超过30个字符;
第二:构成规范:数据库各种名称必须以字母开头,但严禁使用
SYS开头;名称只能含有字母,数字和下划线“_”三类字符,“_”
用于间隔名称中的各语义字段;不要使用DUAL作表名;
第三:大小写规范:构成Oracle数据库中的各种名称(表明,字段名,过程名,视图名等等)的所有字符,必须使用大写,也
就是不能在脚本中,对任何名称添加双引号“”来设定字符的大
小写形式,只要不采用“”限制,Oracle自动会将各名称转化成
大写。
2、表的设计规范
2.1、表的主键规范
遵循如下三点原则:第一:有无原则:除临时表和外部表,以及流水表,日志表外,其他表都要建立主键;第二:构成原则:主键不能使用含有实际语义的列,应该增加一个xx_id字段做主键,类型为number,取值来自序列sequence;第三:创建原则:对于500万以上的表,请数据组参与设计实施,采用先建唯一索引再添加主键约束的方式来创建主键;
2.2、表的主键列规范
对于实体表,主键就是一列,就是没有任何语义的自增的NUMBER列,对于关系表,主键就是相关实体表主键形成的复合主键,是多列;2.3、使用注释的规范
2.4、一个表所含字段总长度的规范
2.5、一个表所含字段访问频繁度的规范
2.6、一个表所含数据量的规范
2.7、大对象字段(BLOB,CLOB)使用规范
2.8、增量同步表的设计规范
字典信息表和需要使用增量同步的表必须增加如下属性:
2.9、表的表空间使用规范
2.10、索引的表空间使用规范
3、设计分区表的规范3.1、RANGE分区的规范
3.2、LIST分区的规范
3.3、HASH分区的规范
3.4、RANGE-LIST分区的规范
3.5、RANGE-HASH分区的规范
4、索引的设计规范4.1、主键索引的规范
4.2、唯一约束索引的规范
4.3、外键列索引的规范
4.4、复合索引的规范
4.5、函数索引的规范
4.6、位图索引的规范
4.7、反向索引的规范
4.8、分区索引的规范
4.9、索引重建的规范
5、SQL访问规范
5.1、避免SELECT *
程序中不能出现SELECT*,即使是选择全部选择项,也需要全部指明,这主要出于如下原因:第一:使用*相对比较慢,因为Oracle 需要遍历更多的内部字典信息;第二:为避免以后相关表增加字段造成程序错误,比如INSERT INTO SELECT和SELECT INTO语句会报错;
5.2、避免笛卡尔运算
多表关联查询不能出现笛卡尔积,如果在报表中为集聚表(或称中间表)生成多个维度组成的复合主键需要使用迪克尔积的,必须请数据组确认性能。
5.3、使用CTAS备份
在进行DML操作(INSERT,UPDATE,DELETE)之前,必须对数据进行备份,使用如下语句:
方法一:表数据全部备份:
CREATETABLE TAB_NAME_BAK AS SELECT * FROM TAB_NAME;
方法二:部分备份:对大表仅备份将要修改的数据:
CREATE TABLE TAB_NAME_BAK
AS SELECT * FROM TAB_NAME WHERE [选择出被操作数据的条件];
5.4、INSERT时需写全列名
代码中INSERT语句必须写出全部列名,以保证表增加字段后语句执行不受影响:
如:INSERT INTO TAB(COL1,COL2)VALUES(COL1_VAL,COL2_VAL);
再如:
INSERT INTO TAB(COL1,COL2)
SELECT COL1_VAL,COL2_VAL FROM TAB_BB;
不能将COL1,COL2和COL1_VAL,COL2_VAL省略;
5.5、大数据量的DML
DML操作涉及到大数据量时,请分解为多次执行;
对于UPDATE和DELETE每次涉及数据量在1万条左右,并且每次执行完就提交;
对于INSERT INTO SELECT如果采用提示(/*+ append parallel */)可以处理百万级别的数据量。
5.6、完成事务及时commit
对于一个完成了的事务,请用commit显示提交,这是避免锁争用的锁等待的需要,特别是对DML操作频繁的表;
5.7、java的变量绑定
使用“变量绑定”来处理一条SQL带不同常量多次执行的情况,动态绑定可以大大优化SQL的执行效率,还可以优化Oracle的内存使用。
在Java中,结合使用setXXX系列方法,可以为不同数据类型的绑定变量进行赋值,从而大大优化了SQL语句的性能。
JAVA情况下的动态绑定示例如下:
String v_id = 'xxxxx';
String v_sql = 'select name from tb_a where id = ? ';
stmt = con.prepareStatement( v_sql );
stmt.setString(1, v_id ); //为绑定变量赋值
stmt.executeQuery();
5.8、perl的变量绑定
使用“变量绑定”来处理一条SQL带不同常量多次执行的情况,动态绑定可以大大优化SQL的执行效率,还可以优化Oracle的内存使用。