ORACLE设计规范

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的内存使用。

相关文档
最新文档