oracle 数据库 设计 规范

1.  先建立逻辑模型,也就是ER图  ,再映射为物理模型。

2. 关于范式, 标准化数据模型一般都不是最终的结果,但他始终是建模最好的起点。

键,完整的键,除了键没有其他东西。

3. 关于数据类型的选择。

由于oracle在数据类型的物理存储上采用非常灵活的方式,因此从存储和性能考虑,使用限制性很强的数据类型或者精度 并没有优势。

选择数据类型时,要注意以下方面:

1.大部分情况下,不管你如何限制数据类型,Oracle内部都会使用大范围高精度的浮点方式进行存储,针对于数字和日期。

就算你给一个数字指定了精度,这个精度更多的意义在于约束数据或定义文档,而不是为了优化性能。

也有例外的情况,就是精度能够减少数据的长度,就会有利于性能的提高。

2.固定长度的字符串都会占用一个固定长度的存储空间。 采用固定长度可以降低碎片,但是可能会导致较大的平均行长,导致全表扫描开销加大。

因此,除非你十分确定字符串的长度是确定的,比如MAC地址,否则你就应该选择变长字符串类型。

3 varchar在11g之后全部用varchar2替代,现阶段 2者是一样的。

4. 对于大文件,推荐使用 lob类型。  Blob   二进制, Clob  文本,bfile   外部储存。

三 关于人造建:

人造键通常会比自然键带来更好的性能。

他通常由一个数字类型构成。

相比自然键,会减少表连接的开销和索引查询的开销。

逻辑模型不要一对一映射到物理模型,逻辑主要考虑功能的实现,物理 主要考虑 性能和储存方式,,这样可以大大节约以后调优的时间。!!

四  关于表类型的选择

后谈

五  关于null 值

普通索引不要存null,null不会走索引,只能全表扫。

 组合索引 和位图索引可以储存null。

采用null可以降低行的平均长度,从而一定程度上提高全表扫描的性能。

将查询null 更改为查询一个默认值,就是为了走索引。!!

null值的储存需要一个字节的储存空间。

六 列的顺序

访问靠后的列,比靠前的列 需要额外消耗少量的CPU资源。 基于此,把经常访问的列放到前面会带来少量的性能提升。

七 反规范化

1. 复制列值

主要为了避免使用表连接进行查询。

三  物理方面

物理存储方案

1. 当往表中插入新纪录的时候,oracle需要扫描空闲数据块链表。 ASSM 能够自动的很好的完成 空闲数据快链表 以避免 链表争用。针对对插入事务频繁的表。

2. 通过合理设置pctfree 来避免行迁移。数据走,留指针。

3. 在一个事务更改一个块的时候,会获得事务槽,如果事务槽无法自动增加分配,那么事务将会等待。

4,数据压缩,基本都是说的能够提高全表扫描的性能,我的理解是对于范围扫描,也可以提高性能。 字符串的压缩率大于数字类型,对磁盘中数据的压缩收益要大于对内存中数据的压缩。

5 关于lob

一般储存超过4000字节的数据,否则用varchar2来储存。 通常情况下,Lob数据不会跟同一行记录的其他列储存在相同的数据块中,只有lob对象不到4000 ,才inline储存。

控制方式: enable/disable storage in row。

如果LOB字段是经常需要访问的字段,那么建议还是采用inline储存。因为访问外部储存 的lob需要额外的IO。

请设置db_securefile参数, 可以将新的lob列的默认储存方式设置为 secure file。

6 关于分区

分区主要在与2点, 分区消除,便于管理历史分区数据而不影响当前分区。

关于设计原则,就是以上内容,转载:http://blog.csdn.net/familyrun/article/details/47037393

关于细节规范:

  1. 如果开发过程中需要建立索引,需要提交书面的更改请求,说明所需索引的定义(名称、字段列表、顺序、索引类型)以及建立的理由。数据库管理员统一维护索引并将提交的请求更改。
  2. 数据库各表的初始数据(包含各代码表、配置表)需要提交给数据库管理员。
  3. 不得使用触发器。
  4. 涉及到数据库多表数据的更改(Insert/Delete/Update)必须使用数据库事务进行控制,并且必须有完整事务开始和提交/回滚机制。不能使用范围事务
  5. 尽量避免Union操作的使用,需要使用时,请向数据库管理员咨询使用Union操作的影响。
  6. SQL语句和存储过程,尽量使用PL/SQL Develper的代码美化器美化。
  7. 属于ORACLE的关键字大小,表名、列名等小写。

猜你喜欢

转载自my.oschina.net/u/3489292/blog/1583277
今日推荐