`

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

 
阅读更多

  在以前数据库设计的时候,也有人不用临时表进行这方面的限制,而用实体数据库表来登记相关的信息。如在用户信息表中有一列专门用来记录用户的当前登陆状态。当用户登陆系统后,该用户登陆状态的字段就改为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数据库的临时表处理方法,因为在数据库优化中,相对于硬盘空间来说,数据库运行的性能,要比其重要得多。想扩大硬盘的空间不需要多少成本,但是,想提高数据库的运行性能的话,相对来说,要困难得多。

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

 

分享到:
评论

相关推荐

    主流数据库中临时表的使用

    临时表可以在不同的数据库管理系统中使用,本文将对 MS SQLSERVER、Oracle 和 DB2 中的临时表进行介绍。 MS SQL SERVER 中的临时表 在 MS SQL SERVER 中,临时表是以井号 (#) 或数学符号 (##) 开头的表名。临时表...

    Oracle存储过程中使用临时表

    本篇文章将深入探讨如何在Oracle存储过程中使用临时表,包括会话级临时表和事务级临时表。 ### 会话级临时表 会话级临时表(Session-Level Temporary Tables)只在创建它的会话内可见,并且在会话结束时自动删除。...

    ORACLE中临时表

    需要注意的是,与SQL Server和Sybase等其他数据库系统相比,Oracle中不应在运行时动态创建临时表,而应在应用程序安装时创建。DDL操作(如创建表)开销较大,应尽量避免在运行时执行。 总结来说,Oracle的临时表...

    浅谈SQL数据库中滥用临时表、排序的解决方案

    在SQL数据库中,临时表和排序是两个常见的操作,但过度依赖它们可能会导致性能问题。本文将探讨如何避免滥用临时表和排序,并提供一个具体的案例来阐述解决方案。 首先,临时表在处理大量数据时可以提供便利,但...

    数据库设计原则总结

    基本表是数据库设计的基础,它与中间表、临时表不同,因为它具有四个特性:原子性、原始性、演绎性和稳定性。理解基本表的性质后,在设计数据库时,就能将基本表与中间表、临时表区分开来。 范式标准是数据库设计中...

    在线用户临时表的数据库操作

    在现代网站开发中,为了实时监控并记录用户的在线状态及行为,经常需要设计并实现在线用户临时表的数据库操作。这些操作不仅能够帮助开发者更好地理解用户行为模式,还能够在一定程度上提高用户体验。本文将深入探讨...

    临时表操作详解SQL Server 实例

    在SQL Server中,临时表是一种特殊类型的数据库对象,它们用于存储临时数据,这些数据只在当前会话或特定范围内存在。临时表分为两种类型:本地临时表(Local Temporary Tables)和全局临时表(Global Temporary ...

    HIS数据库表结构详细设计.doc

    24. **门诊收费医保处方临时表 (BM_SFCF00_TEMP00)** 和 **门诊收费医保处方明细临时表 (BM_SFCFMX_TEMP00)**:这两张临时表用于处理医保相关的门诊收费信息,可能用于计算医保报销比例和金额。 25. **(医疗)收费...

    数据库表设计原则技巧

    在数据库设计过程中,理解和处理原始单据与实体之间的关系至关重要。原始单据与实体之间的关系可以是一对一、一对多或者多对多的形式。通常情况下,一张原始单据对应一个实体,但在某些特殊场景下,可能会出现一张...

    方案中的数据库设计原则

    根据给定的信息,我们可以梳理出以下关于“方案中的数据库设计原则”的相关知识点: ### 一、数据库设计原则 #### 1.1 数据库性能优化 ##### 1.1.1 索引的重要性 索引在数据库查询中扮演着至关重要的角色。合理...

    java数据库设计中的14个技巧

    在java数据库设计中,有十四个技巧需要掌握,这些技巧都是通过大量的数据库分析与设计实践逐步总结出来的。这些经验的运用,读者不能生搬硬套,死记硬背,而要消化理解,实事求是,灵活掌握,并逐步做到:在应用中...

    数据库表结构设计

    在数据库设计中,主键与外键的配合至关重要,它们是数据模型的核心。一般来说,非叶节点实体需要定义主键,而叶节点实体即使没有子孙也需要定义外键。 3. 基本表的性质:基本表具有原子性、原始性、演绎性和稳定性...

    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. 数据库...

    JAVA高级关于数据库设计中的14个技巧

    在Java高级开发中,数据库设计是一项至关重要的任务,它直接影响着系统的性能和可维护性。以下是一些关于数据库设计的关键技巧: 1. **原始单据与实体的关系**:设计数据库时,要考虑到原始数据(如业务单据)与...

    MYSQL数据库设计规范.docx

    在不同库或表中,存储相同数据的列名和列类型必须一致** - **级别**: 强制 - **原因**: 保持列名和类型的统一有助于简化关联操作,并提高查询效率。 **8. 表名需明确反映其业务功能** - **级别**: 强制 - **...

    数据库设计规范word文档

    数据库设计规范是指在设计数据库时,遵守的一些规则和标准,以确保数据库的结构合理、数据一致、易于维护和扩展。本文档将总结数据库设计规范的主要内容,包括数据库编码规范、字段设计规定、试图设计规则、索引设计...

    初学者需要掌握的数据库设计词汇对照表.txt(数据库的一些专用词汇都在这,我在网上总结了好久才出来

    在数据库设计中,这些规则被编码到约束、触发器或存储过程中,以确保数据符合业务需求。 ### 12. Candidate Key 候选键是实体关系模型中,可以唯一标识实体实例的属性集。候选键可能有多个,但只能选择一个作为主键...

    Oracle临时表

    在设计应用时,不应将重要数据或需要长期保留的数据存储在临时表中。 - **数据不会备份或恢复**:临时表中的数据不会被备份,也不会在恢复过程中被恢复。这意味着一旦数据丢失,将无法找回。 - **无日志记录**:对...

    如何解决Oracle8i数据库临时表空间满的问题.pdf

    从标题和描述中,我们可以了解到该文档主要讲述了Oracle8i数据库临时表空间满时的解决方案。Oracle8i是甲骨文公司推出的一个关系型数据库管理系统,它是Oracle数据库的一个版本,在业界有着广泛的应用。临时表空间...

    数据库设计的优化策略.pdf

    在《数据库设计的优化策略》这份文档中,深入探讨了多种优化方法和技术,旨在帮助数据库管理员和开发人员提升数据库管理能力,提高数据处理效率。 ### 一、SQL Server的调优 SQL Server作为主流的关系型数据库管理...

Global site tag (gtag.js) - Google Analytics