设计表
开发数据库应用系统时,数据库管理员负责规划和建立表空间,而规划和建立表则往往是由应用开发人员完成的。应用开发人员设计表时应考虑以下因素:
<1>在为表、列、索引的视图、同义词、触发器等与表有关的对象命名时,应该使用权有意义的名称,其格式要有利于区分这些对象。
<2>为了给用户和其它人员提供有意义的帮助信息,应该使用权Comment命令描述表、列的作用.
<3>设计表时,应该使用权范式来规划每个表.范式分为第一范式 第二范式 第三范式 范式越高,表的设计越规范.
<4>定义表列时,应该选择合适的数据类型和长度,为了节省存储空间,应该将可以取Null值的列放在后面.
<5>确定表中所需的完整性约束。
<6>在合适的情况下,使用簇表以节省存储空间并提高特定类型的SQL语句的性能.
规划表的类型
在Oracle数据库中,存储用户数据可以使用标准表 索引表 簇表 和分区表.
标准表:数据按堆组织,以无序方式存放在单独表的表段中.这种表是最基础最常用的数据库表类型,是默认情况下创建的表.
索引表:数据是以”B-树”结构存放在主键约束所对应的索引段中.使用索引表时,索引叶子节点不仅包含了键列的数据还包含了其他非键列的数据。
簇表:簇由共享相同数据块的一组表组成.在合适的情况下,使用簇表可以节省存储空间并提高SQL语句的性能.
分区表:数据被划分为更小的部分,并且存储到相应的分区段中,每个分构段可以独立管理和操作.
规划表的位置
如果要在特定表空间上建表,用户必须在该表空间中具有相应的配额或具有Unlimited Tablespace的系统权限
如果建表时不指定TableSpace选项,Oracle会将表建立在用户的默认表空间中.通过指定TableSpace选项,可以将表建立在其他表空间中.
当规划表的存放位置时,应注意以下事项:
System表空间中应该只包含数据字典和Oracle系统对象 . 如果将表建立在System表空间,将会影响数据库性能. 建议DBA给每个用户指定其它的默认表空间.
设计应用系统时,应该规划存放应用系统的表的表空间,不要随意分散地创建到不同的表空间中,这样会使执行某些数据库管理和维护操作.
使用NoLogging选项建表
在创建表的过程中指定nologging子句,避免在创建表过程中产生过多的重做记录,可以节省重做日志文件的存储空间,加快表的创建速度 .一般来说,nologging子句适合时在创建大表时使用.
使用ComPress选项建表
使用Oracle的表压缩特征(Compress)时,Oracle会将同一个数据块行和列的重复灵符据放在数据块的头部,压缩了表数据.
创建大表时的建议
<1>将表和它的索引分享存放 大表所对应的索引通常比较大,将表和它的索引分别存放在不同的表空间中,这样的重建索引的过程中能够更加容易地获取所需的连续存储空间,并且可以提高查询时的I/O效率.
<2>分配足够的临时空间 如果如果应用程序员在访问大表时需要执行规模较大的排序操作,就必须在数据库中具有一个较大的临时段,临时段的存储参数设置取决于临表空间的默认存储参数设置,即Storage子句中的各种参数的设置
预计和规划表的大小
可以对表的大小进行估计,包括对索引 回退段和重做日志文件大小的估计,以决定支持期望的数据库所需的磁盘空间大小.通过这些估计,就可以购买合适的硬件和作其它决定
可以估计单个表的大小,以便更好地管理该表将使用的磁盘空间。创建表时设置合适的存储参数,就可以改善使用该表的应用的I/O性能.