`

临时表在不同数据库设计中的作用

 
阅读更多

  在以前数据库设计的时候,也有人不用临时表进行这方面的限制,而用实体数据库表来登记相关的信息。如在用户信息表中有一列专门用来记录用户的当前登陆状态。当用户登陆系统后,该用户登陆状态的字段就改为Y,而当用户退出系统能后,该字段的内容又改为N。这个方案看起来是可行的,但是,其在实际应用中,有一个非常大的漏洞。若用户登陆到系统后,终端因为各种原因,如病毒、断电等突然状况,发生死机的话,此时,用户虽然没有登陆到系统中去,但是,因为其退出系统的时候,没有正常退出,这就导致在财务管理系统中的用户信息表中,显示该用户的登陆状态仍然为Y。此时,用户尝试登陆到财务管理系统中去的话,就会被系统拒绝,系统会认为该用户已经登陆了系统,不能重复登陆。

  所以说,利用实体表来记录用户登陆的信息,存在着管理上的漏洞。

  利用临时表实现用户重新登陆的限制:

  后来,数据库设计师们想,能否把该用户登陆信息记录在一张临时性的表中呢?当用户结束会话,无论是正常的退出还是因为意外情况的退出,只要用户结束一个会话后,那么 该临时表中的内容就会清空。

  若跟这个需求结合的话,数据库设计师就希望能够实现如下功能。

  当用户登陆系统开始一个会话后,数据库系统就建立一张临时表,该表中至少有一个内容,就是用户的帐号(或者该帐号对应的ID)。当有其他用户登陆到系统的时候,系统会先从这张临时表中查询,是否有相同的用户记录。若有的话,就会拒绝用户的登陆,警告用户已经有相同的用户登陆了。当用户正常退出系统或者因为以外情况退出系统结束当前会话的时候,那么数据库系统就会清除这张表的内容。如此,当用户下次登陆系统的话,即使是在意外情况下登陆系统的,也可以正常的登陆。

  可见,数据库的临时表在企业实际应用中有着举足轻重的作用。

  在ORACLE数据库与SQL SERVER数据库中,都实现了临时表的功能。不过两者实现的方式有差异。而不同的实现方式又赋予了其不同的特点,这是我们在数据库选型中不得不重视的一方面内容。

  两个数据库临时表实现方式的异同:

  SQL SERVER临时表跟ORACLE数据库临时表的差异,可以利用一句话来概括。SQL SERVER 临时表是在需要用到的时候创建;而ORACLE 数据库的临时表,则是在数据库初始化中就开始创建,在具体的会话或者事务开始后进行操作,结束一个会话或者结束一个事务后该数据库的内容就会被清空。

1、 在创建时的异同。

  SQL SERVER 数据库的临时表,是在实际需要时创建的。具体的来说,可以利用SELECT语句与CREAT语句创建临时表。如可以利用SELECT * INTO #USER_TEMP FROM USER;通过这条语句就可以在需要的时间创建一张临时表。除此之外,还可以利用CREATE语句,在需要的时候创建临时表。

  而ORACLE数据库,是在数据库系统初始化的过程中,就需要建立临时表。也就是在用户安装财务管理软件系统时,初始化数据库系统时,系统就会创建临时表。而不是在临时表需要用到的时候,才被创建。故,ORACLE数据库的临时表创建方式只有一种,在数据库初始化的时候,利用CREATE创建数据库临时表。所以,ORACLE数据库临时表,又有另一种说法。我们一般称ORACLE数据库的临时表是永久性的,只是临时表的内容是临时的,在需要用到临时表时,只要直接调用即可,而不用临时创建。这不像SQL SERVER数据库那样,只有在用到时,才创建该临时表;当结束会话时,不仅表中的数据被清空了,而且该表也被删除了。

  笔者评论:

  笔者还是比较喜欢ORACLE数据库临时表的实现方式。为什么呢?因为我们都知道,数据库定义语言,如CREATE等,比较占用系统资源。若在数据库SQL SERVER数据库系统设计的过程中,前台程序频繁的使用CREATE等数据库定义语言创建临时表的话,会对SQL server数据库系统的运行效率产生很大的不利影响;而且,每次运行的话,都会有类似的不利影响,因为每次运行都会有一个创建临时表的过程。而ORCLE数据库中,则是在系统初始化的时候才利用CREATE语句,所以,只是在系统初始化的时候,可能性能会受到影响,而在以后的数据库运行中,就不会为这个老是运行CREATE语句而困饶。所以,我个人还是比较喜欢采用ORACLE系统的临时表处理方案。

  2、 数据释放时的异同。

  SQL SERVER数据库系统有两种临时表,一种是本地临时表,一种是全局临时表。本地临时表只在当前会话中可以查找到。也就是说,某个用户创建了一个临时表,只有本人可以查询得到,而其他用户是查询不到这张临时表的。第二种是全局临时表,这张表无论是谁创建的,只要该表的会话没有结束,即该临时表只要存在与数据库中,则任何登陆该数据库的用户都可以查询到该临时表的内容。无论是采取哪种表,只要创建该临时表的用户结束该对话时,则该表就会被自动删除。如要实现上面所讲的用户帐户重复登陆的问题,需要用到全局临时表。当一个系统用户登陆时,就新建一张以该用户名命名的临时表;当另外一个用户也试图想以这个用户名登陆时,系统就会查到以该用户名为名字的临时表已经存在,如此,就会拒绝该用户名的再次登陆。而当该用户退出时,或者意外中断该会话时,则该临时表就会被系统删除。该帐户名下次登陆时,就可以正常使用。

  ORACLE数据库系统的临时表也有两种,一种是事务型临时表,一种是会话型临时表。事物型临时表是当一个事物结束时清空临时表的内容;而会话型临时表就当一个会话中断或者被重新连接时数据表的内容就会清空了。从中,我们可以看到在数据清空方面,两个数据库处理方式的两个重大区别。一是ORACLE 数据库在清除临时表是,只清楚数据,而不清楚临时表的本身。二是从功能上来讲,ORACLE还提供了一种更加细分的事务型临时表。一个会话中,可能有多个事务。也就是说,ORACLE 清空临时型数据表的时间更加细腻,可以根据同一个会话中的不同事务来清空临时表。

  另外还要说明的一点就是,ORACLE的会话型临时中的内容对于各个用户来说,内容都是独立的。具体的说,就是各个用户在会话的过程中,都可以往一张临时表中存储数据;但是用户查询临时表中的数据的时候,只能够查询到自己所创建的内容,而不能看到其他用户所增加的记录。这对于临时表的安全性来说,是非常有保障的。

  笔者评论:

  ORACLE的临时表跟SQL SERVER数据库的临时表比起来,有优点也有缺点。如ORACLE数据库的临时表支持事务型的临时表,可以把一个会话分割成几个独立的事务,以事务的级别来管理临时表,这对于我们来说,处理起来比较方便。

  而缺点就是,ORACLE数据库的临时表,出于数据库本身性能的考虑,在某些方面,作了一些限制。如在默认情况下,ORACLE数据库的临时表不能采用外键;也不支持LOB对象。确实,若临时表中存在外键或者LOB对象的话,会对临时表的性能产生很大的影响。但是,在实际工作中,有时候确实需要在临时表上采用外键或者LOB对象。此时,我们只能够采用一些变通的方式加以解决。

  3、 表存储时的异同。

  上面我已经简要介绍过两个数据库对于表处理时的异同。下面再对此相关的内容进行一下总结。

  SQL SERVER在结束一个会话后,就会把用户所创建的临时表删除。而ORACLE在结束一个会话或者一个事务时,删除的只是表的内容,表的结构仍然会存在。ORACLE就是凭借牺牲一点表结构的存储空间,来达到提高ORACLE 数据库临时表处理性能的目的。

  笔者评论:

  个人比较钟情于ORACLE数据库的临时表处理方法,因为在数据库优化中,相对于硬盘空间来说,数据库运行的性能,要比其重要得多。想扩大硬盘的空间不需要多少成本,但是,想提高数据库的运行性能的话,相对来说,要困难得多。

  以上是我对两个数据库临时表处理方式的分析,这些个人的观点仅供大家在数据库选型中参考。或许评论中有些主观偏见,还望谅解。

 

分享到:
评论

相关推荐

    ORACLE中临时表

    Oracle 临时表功能介绍: Oracle中的临时表是全局的,需要在数据库设计时创建完成,而不是程序使用时。每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的。

    1数据库设计文档.doc

    数据库设计文档 目录 1. 数据库物理设计原则 5 1.1. 数据库环境配置原则 5 1.1.1. 操作系统环境 5 1.1.2. 内存要求 5 1.1.3. 交换区设计 5 1.1.4. 其他 6 1.2. 数据库设计原则 6 1.2.1. 数据库SID 6 1.2.2. 数据库...

    数据库设计说明书模板

    数据库设计说明书 版本:V1.0 文 档 编 号 保 密 等 级 作 者 最后修改日期 审 核 人 最后审批日期 批 准 人 最后批准日期 修订记录 日期 版本 修订说明 修订人 目 ...

    oracle数据库表设计.pptx

    基本表的性质 基本表与中间表、临时表不同,因为它具有如下四个特性: (1) 原子性。基本表中的字段是不可再分解的。 (2) 原始性。基本表中的记录是原始数据(基础数据)的记录。 (3) 演绎性。由基本表与代码表中...

    数据库表结构设计.doc

    在数据库设计中,为了更好地应 用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准 确的理解): 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF...

    数据库设计思路.doc

    要善于识别与正确处理多对多的关系 中间表、报表和临时表 防止数据库设计打补丁的方法是"三少原则" 2.数据库设计的基本步骤 需求收集 对用户的使用的收集,能及最后系统能达到用户的使用要求。 概念设计 对收集到地...

    数据库设计原则.docx

    在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解): 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF是...

    数据库设计思想.docx

    完整性约束表现在三个方面 域的完整性:用Check来实现约束,在数据库设计工具中,对字段的取值范围进行定义时,有个 数据库设计思想全文共4页,当前为第3页。数据库设计思想全文共4页,当前为第3页。 数据库设计...

    mysql数据库设计规范.docx

    所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,并且最后不要超过32个...

    数据库设计准则及方法论.docx

    表通常分为很多种,除了基本表外,还有临时表、多维表、分区表、范围集群表、物化视图表等。不同的表有不同的用途,如果错误使用的话,也会对性能有比较大的影响。比如在不需要物化视图的地方使用的物化视图表,...

    快递系统数据库设计.doc

    系统功能和数据库设计 目 录 第1章 项目概述 1 目的 1 对象 1 范围 1 第2章 业务需求 1 业务描述 1 业务流程 2 第3章 需求分析 2 业务需求 2 系统需求 18 第4章 数据字典 19 单据分发表 19 单据明细表 19 货运单主表...

    数据库设计的黄金经验.txt

    视图技术在数据库设计中很有用 与基本表、代码表、中间表不同,视图是一种虚表,它依赖数据源的实表而存在。视图是供程序员使用数据库的一个窗口,是基表数据综合的一种形式, 是数据处理的一种方法,是用户数据保密...

    数据库物理设计.docx

    在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解): 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF是...

    数据库设计技巧.doc

    在数据库设计中,为了更好地应 用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准 确的理解): 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF...

    数据库设计作业智能停车场管理系统数据库设计完整版.docx

    数据库设计作业智能停车场管理系统数据库设计完整版 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】 数据库设计作业智能停车场管理系统...

    mysql数据库设计为表连接设计索引

    表的连接方及表的访问顺序对索引影响很大。在一个连接查询中有两类谓词:本地谓词和...合并扫描:以临时表的方式替代回表随机读; 哈希连接:哈希连接本质上是用哈希算法代替排序算法的合并扫描连接,加快了排序过程;

    数据库设计作业智能停车场管理系统数据库设计.docx

    北京邮电大学 数据库应用技术 期末作业 题目:智能停车场管理系统 学院:电子工程学院 学号: 姓名: 电话: 数据库设计作业智能停车场管理系统数据库设计全文共16页,当前为第1页。2014年12月28日 数据库设计作业...

    数据库设计原则(1).pdf

    在数据库设计中,为了更好地应⽤三个范式,就必须通俗地理解 三个范式(通俗地理解是够⽤的理解,并不是最科学最准确的理解): 第⼀范式:1NF是对属性的原⼦性约束,要求属性具有原⼦性,不可再分解; 第⼆范式:2NF...

    交通文书管理系统数据库设计.doc

    二、数据库主要数据表设计 本系统中的所有数据表都保存在数据库roadmanage中,数据表主要包括处罚管理、案 件处理、员工管理、路政巡查管理、清障排障管理、用户管理等表格,另外在处理时可 能会产生临时表。...

    Access 2000数据库系统设计(PDF)---025

    834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中直接创建一个表 ...

Global site tag (gtag.js) - Google Analytics