ORACLE数据库中,表是最基本的内容。可以说,表设计的好坏直接跟数据库的性能相关。所以,在设计表的时候,除了要遵循其固有的数据库准则之外,还需要看个人的数据库管理经验。下面我就把这些经验分享一下,或许对大家有所帮助。
一、 表该存放在哪里?
我们都知道,在ORACLE数据库中,使利用空间这个概念来管理表对象的。在数据库创建的时候,数据库中已经建立了一些表空间。那么当我们新建立表的时候,这个新表的位置该放在什么地方呢?这就好像吃饭时的坐的位置一样,是有讲究的。一般来说,我们在新建表的时候,至少要遵循如下建议:
一是在数据库创建的时候,在数据库中已经有了一个SYSTEM的表空间。一般情况下,这个表空间中,只包含数据字典及Oracle系统对象。如果我们将我们的表建立在这个空间上的话,那是要降低数据库的性能的。所以,一般我们是不建议用户把表格建立在这个空间上。但是,若我们不只一个人维护数据库,如有八个人共同设计数据库系统时,如何才能保证其他用户不在SYSTEM表空间中建立数据库表格呢?最好的办法就是通过权限控制。如我们可以给每个数据库设计人员指定一个默认的表空间,让他们只能在这个表空间中建立表格。如此的话,就能防止他们在SYSTEM表空间中建立自己的数据表格,从而对数据库的运行性能产生不良影响。所以,若给每个用户设置默认表空间的话,那么用户在建立具体的表时,不用具体指定表空间了。
二是我们在为某个应用设计数据库的时候,最好先对表的空间进行规划。一般情况下,不要把数据表随意的分散到不同的表空间中去。如我们在为一个ERP系统设计数据库的时候,若把采购部门相关的表跟销售部门相关的表放到两个不同的表空间中去,这是不明智的做法。这么处理的话,会降低某些数据库管理和维护操作的效率,如数据的备份与恢复操作;而且,也无法集中管理属于某个特定应用的数据。所以,我们一般建议,在规划数据库表空间的时候,把相同应用的表放在同一个表空间中去。如果要区分不同部门或者不同模块的表的话,我们可以在表的命名上动脑子。如我们在设计ERP系统的数据库中,可以根据其应用模块的不同,在前面加上前缀来进行识别。如跟系统基本配置相关的表,我们可以用AD为前缀;而跟销售部门相关的表,我们可以加上SA前缀等等。如此的话,这些表具体是属于哪个模块的,就一清二楚了。完全没有必要为此设置不同的表空间。这是ORACLE数据库初学者经常会犯的错误。主要是对ORACLE表空间的定义不是很熟悉所导致的。
二、 对预计存储数量比较大的表时,要给与额外的重视。
有些表非常的大。我们这边说的大,不一定是说结构复杂,而是指在这个表格中,预期会存储比较多的数据。为了提高对这个表格的处理效率,我们在事先要做出一定的安排。否则的话,后续对这些大表进行查询、插入等操作的话,速度会很慢。所以,我们就有必要在数据库设计的时候,先预先估计一下表的数据存储量,把一些数据量大的表格,做一些额外的设置。如在ERP软件的数据库设置中,一般来说,产品数据与物料清单数据这两个表的数据量会比较大;而从长远看的话,销售订单、采购订单、生产订单、记账凭证等这种单据类相关的表格其数据量也会比较大。一年两年可能感觉不出来,但是,到十年后,这个纪录数量就会很庞大。而像ERP系统这种大型的信息化管理项目,用个几十年时很正常的事情。而且,为了记录的完整性,也不建议用户把以前的数据删除。所以,为这种应用进行数据库设计的时候,要充分考虑这些大表的性能问题。
具体的来说,设计大表的时候,可以考虑遵循如下的建议。
一是不要为大表设置存储的限制。在ORACLE数据库中,可以为每张表格设置存储配额限制。如此的话,表最大容量就不能超过这个限制。对于一些数据容量比较小的表格,这么设置时合理的,可以提高空间的利用率。但是,若数据量比较大的话,就不建议事先设置表的存储空间了。如ERP系统的销售订单表,其刚开始可能记录量很小,第一年预计只有1G的记录容量,但是,估计在十年后,这个记录容量就会达到10G了。在这种情况下,我们怎么来给其设置存储空间呢?一开就设置10G空间,这也是不合理的。而且,设置存储空间,就意味着有可能产生存储碎片,从而影响到数据查询的效率。所以,在数据库表的设计过程中,若某些应用的表可能会有比较大的数据容量时,建议不要对其存储空间做出任何的限制。
二是要为这大表分配足够的临时空间。如我们使用ERP系统时,要查询产品资料信息。我们都知道,产品信息的话,有些企业这个纪录数非常的庞大。而且在查询时,我们还会经常的进行排序操作。如有时候会按照产品编码对查询出来的数据进行排序。当记录少的话,还好;但是,当记录多的话,这个排序动作,要求具有比较大的临时存储空间。所以,当某个表预计会有很大的记录数量的时候,我们就要给其分配足够多的临时空间。临时空间的存储参数设置取决于临时表空间的默认储存参数设置。我们可以更改这些参数,以达到我们对要求。若没有给大表分配足够多的临时空间的话,则排序的动作将会很慢,而且很可能不成功。
三是要考虑将表与表的索引分离存放。大表所对应的索引通常也比较大。一般来说,索引的数量是随着表记录的数量增加而增加,两者是接近于一个正比例的关系。所以,通常表的记录容量大的时候,索引数量也会很庞大。针对这种情况,我们考虑突破我们上面讲的表空间的规则定义。而考虑把表和他的索引分别存储于不同的表空间中,甚至在条件允许的情况下,分别存储于不同的硬盘中。这么做的好处是什么呢?最大的好处是让索引比较容易的获得所需要的连续的存储空间,从而提高输入输入的效率。通俗的说,就是可以提高数据的查询效率。如不这么处理的话,查询大容量的记录的话,数据库可能需要花费30秒;而如此设计的话,就可能把时间缩短为10秒。这是一个很明显的性能改善。
三、 如何给表命名?
上面我在讲如何为表分配存储空间的时候,已经讲到过这方面的问题。下面,我就将对这个问题进行详细的描述,以帮助数据库管理员掌握一套好的数据库命名规则。
首先,毋庸置疑的,在为标命名的时候,要遵循ORACLE数据库的基本命名规则,如不能以数字开头为表命名,如不能利用数据库的关键字为表命名,如表的名字不能重复等等。这些是最基本的要求,就不用我多费口舌了。除了要遵循这些基本的命名规则外,在实际工作中,为了数据库后续的维护等方面出发,我们还是要遵循一些额外的规则。这些规则跟ORACLE定义的规则不同。我们所讲的规则没有约束力,可以说,只是业界的一些共识而已。你若不怎么处理,ORACLE数据库也不会说你错误,只是后续维护的时候,会比较麻烦而已。
一是在对数据库命名的时候,最好能跟体现表的分类关系。如最常见的,我们在设计数据库的时候,表都是按系统的具体模块来区分的,如根据前端系统要求的不同,数据库的表大致可以分为系统基本配置表、销售模块表、采购模块表、报表模块表等等。我们可以根据这些模块的不同,分别给与不同的前缀来区分。这么做的好处是很明显的。如一看到表最大名字,就可以知道这个表是属于哪个应用的、哪个模块的,这无疑可以提高数据库设计与前台软件开发的效率。同时,数据库中默认的排序规则是按名字来排序的,所以,为表格设置类别前缀的话,可以把同一类的表格排在一起,方便我们察看。
二是对表格命名的时候,要考虑可读性,而不能随便阿狗阿猫的乱取名字。最常见的是,那些刚学数据库的人,在表命名的时候,如要建几张测试表,就会随便命名如TEST1,TEST2之类的。虽然这只是测试,但是,也不符合我们的命名过则。要做测试的话,那就以TEST开头,然后后面加上具体要测试的内容。如此的话,我们才可以通过表的名字知道该表具体的用途。而不用打开表去看里面具体的结构或者注释才能知道我们需要的信息。所以,在设计表的名字的时候,还要关注一下其的可读性。
分享到:
相关推荐
管理好ORACLE数据表的几个建议,管理好ORACLE数据表的几个建议
在Oracle数据库管理中,数据导入是一项常见的操作,用于...综上所述,Oracle数据导入涉及到多个步骤,包括控制文件的编写、批处理文件的创建以及导入过程的监控。理解这些细节有助于更有效地管理和维护数据库中的数据。
本文将详细介绍如何通过直接拷贝数据文件来实现在新服务器上的Oracle数据迁移。 首先,我们需要了解迁移的背景。假设你因为服务器更换需要迁移一个已经在192.168.1.15运行的Oracle数据库到新的服务器192.168.1.18。...
虽然可以在这个表空间中存储用户数据,但从性能和管理的角度来看,通常建议将用户数据放在非系统表空间中。 - **非系统表空间**:这类表空间可以由数据库管理员根据需要创建,用于存储用户数据、索引、还原段和...
综上所述,Oracle数据仓库技术方案建议书v1详细阐述了如何构建一个全面、高效、安全的数据仓库系统,旨在为×××提供强大的数据管理和分析能力,从而支持更精准的业务决策和优化运营。通过采用Oracle的先进技术和...
Oracle分区表中的Hash分区是一种基于哈希算法的分区策略,适用于处理无法清晰定义分区范围的大型数据表。这种分区方式通过计算分区键的哈希值来决定数据存储在哪个分区,以此达到数据分散和负载均衡的目的。Hash分区...
- **表空间**: 表空间是Oracle数据库中逻辑存储单元的集合,用于组织和管理数据。它具有以下特性: - 控制数据库数据的磁盘分配。 - 可以限制用户在特定表空间中使用的磁盘大小。 - 表空间可以设置为离线...
Oracle 数据导入工具是数据库管理员和开发人员用于高效地将大量数据加载到Oracle数据库中的利器。在Oracle环境中,SQL*Loader是这样一个强大的工具,它允许用户快速地从外部数据文件批量导入数据,而无需编写复杂的...
在Oracle数据库系统中,表空间(Tablespace...通过学习和实践,你可以更好地理解和管理Oracle数据库中的表空间资源。在4.0Y2ORACLE第1章.SQL这个文件中,可能包含了上述操作的示例脚本,建议仔细阅读和运行以加深理解。
Oracle 数据库是一个强大的关系型数据库管理系统,其用户管理和表空间机制是数据库管理和操作的基础。本文主要探讨了 Oracle 用户(user)和表空间(tablespace)的相关概念、创建、配置、修改以及删除等核心操作,...
Oracle数据库是业界广泛使用的数据库管理系统之一,为了确保数据库性能与可用性,合理地管理表空间是非常重要的一个环节。本文将详细介绍如何在Linux操作系统下通过命令行方式增加Oracle数据库的表空间以及创建新...
### Oracle 数据泵备份详解 #### 一、Oracle 数据泵备份概念与作用 Oracle 数据泵(Data Pump)是一种高效的数据迁移工具,它通过 ...掌握好数据泵备份的操作流程和技巧,对于日常数据库管理工作来说是非常有益的。
在Oracle数据库管理中,全表扫描(Full Table Scan,简称FTS)是指查询语句对整个表的数据进行读取的一种操作方式。当索引选择性较差或者表较小的时候,Oracle可能会选择全表扫描而非索引扫描。全表扫描虽然能够快速...
在Java编程环境中,导出Oracle数据通常涉及到数据库操作和文件处理。`SyncExpImpUtil` 类在提供的代码中,实现了从Oracle数据库导出和导入数据的功能。以下是对这个类及其方法的详细解释: 1. **类结构**: `...
通过上述解析可以看出,Oracle数据分析岗位面试题涵盖了数据库基础知识、Oracle特定语言和工具的应用、数据管理与优化等多个方面,不仅考察应聘者的理论知识掌握情况,还关注其解决实际问题的能力和经验。
- **建议不存放用户数据**:为了避免系统表空间中出现数据碎片,建议不要在其中存放用户数据。通常会创建一个独立的表空间来存放用户数据。 ##### 2. 辅助表空间(SYSAUX Tablespace) SYSAUX表空间是随数据库创建...
"使用PLSQL导入导出oracle数据" PL/SQL 是 Oracle 数据库管理系统中的一个过程语言,能够实现数据的导入和导出。下面我们将详细介绍使用 PL/SQL 导入导出 Oracle 数据的几种方式。 Oracle 导出方式 使用 Oracle ...
通过以上步骤,我们可以在Apache Tomcat环境中轻松地配置Oracle数据源,从而简化数据库连接管理的工作。这种方法不仅能够提高开发效率,还能降低出错率,对于Java Web开发者来说是一项非常实用的技术。希望本文对你...