数据库表结构设计(精选12篇)
数据库表结构设计 第1篇
1 基于SQL数据库的查询处理步骤概述
SQL (结构化查询语言) 是数据库中信息获取的一种标准语言, 任何一个开发者或爱好者都应该了解其查询语言的结构以及其逻辑关系, 下面介绍下其查询处理流程:
数据库查询处理过程一般可分为四个阶段:查询分析、查询检查、查询优化和查询执行, 如图1所示。
以上是SQL查询语句的基本处理流程, 经过发展, 面向查询出现了各种优化处理措施, 无论是索引优化还是面向对象的优化方式都是针对高层次的开发人员而言, 面向学生必须从底层设计的基础查询语句开始, 在SOL数据库中, SELECT语句是一个最基本和最重要的语句, 其功能是实现选择查询其中在学校普遍教授的基本查询方法是联接查询方法和子查询方法。
2 基于子查询与连接查询的组合查询的实例设计与实现
2.1 查询方法概述
首先子查询和连接查询各有优缺点, 所谓子查询即内部查询, 也就是包含在其他SQL语句中的Select语句。如果此内部查询语句得到的值还作为查询条件, 则外部嵌套的查询语句就称为外部查询。嵌套子查询语句遵循的查询原则是先内后外, 层层查询。当子查询作为外部查询条件时有两种情况, 第一是子查询返回结果是单一值;第二返回的是一行数据信息。这两种结果都可以作为查询的基础条件继续查询数据库数据。
与子查询并列的属于连接查询, 它在关系型数据库中, 当给定的查询条件关系到两个表时, 称此查询为关系查询。而连接查询从查询方式上可以分为五种类型:左外连接、右外连接、内连接、完整外部连接以及交叉连接, 连接查询适用于多表查询。下面从实例中介绍两种查询方式的具体操作。
组合查询是基于子查询和连接查询的混合查询方法, 在SQL查询语言上更简洁、更有效。组合查询应被课堂教学方法的一个重点, 面对一个SQL查询问题, 其复杂程度很低、执行效率很高, 是集子查询和连接查询之精髓。
2.2 组合查询实现原理及实例比较设计
组合查询是对子查询和连接查询的一个深度数据挖掘, 将两种查询的优点集中起来进行关键性描述, 完成SQL表的查询功能。
2.2.1 组合查询方法实现原理
组合查询也是多种查询中的一种, 是基于子查询和连接查询设计实现, 其基本的表达式也是通过SQL中的一个SELECT语句来完成, 那么一个标准的select语句的语法如下:
而组合查询的实现则需要包含两个或两个以上的SELECT语句, 经过层层筛选后, 返回查询的结果集。SQL语言实现组合查询的方法是执行主查询 (外部连接查询) 和子查询 (内部查询) 。子查询是在另一个查询之中的查询, 这种查询的结合形式也称为嵌套查询。通过利用子查询的嵌套模式和连接查询的关联性质, 实现组合式查询。组合查询的工作流程是:首先执行内部查询, 它查询出来的结果并不被显示, 而是传递给外部查询作为外部查询的查询条件或操作对象来使用, 外部查询依赖于子查询的求值结果。
使用子查询和连接查询实现组合查询的语法如下:
使用连接查询和子查询的组合查询中, 子查询可以多层嵌套, 连接查询也可以联接多个数据库表通过关键连接信息。
根据组合查询方法设计原理, 通过实例进行三种查询方法对比, 下面通过SQL数据库建立三个数据库表信息, 具体设计如下:在SQL数据库中构建一个学籍管理库, 在一个DB文件中设定三个表, 分别为教师信息数据表、课程信息数据表、教学数据表。每个表中有相对应的字段。具体见下表:
根据所建表信息, 我们提出一个查询问题:查询课程名为数据库的代课老师姓名和所属院系;根据实例表信息, 我们从三个查询方式入手进行解题。
2.2.2 连接查询和子查询实例分析
第一个解题思路:老师姓名和所属院系信息在教师表中, “数据库”在课程信息数据表中为课程名, 如果想通过课程名直接获取代课老师的姓名等信息, 就必须通过课程名获取课程编号, 再有课程编号从教学信息表中获取代课教师姓名, 再根据教师名获取其所属院系, 最终解答第一个问题。通过分析, 采用子查询和连接查询都可解答此问题。子查询和连接查询实现方法分别如下:
连接查询语句为:
Select Teacher.TName, Dept from Teache rcross join Teach Information cross join Course Where Teach Information.TName=Te acher.TName and Teach Information.Cnomber=Course.CNomberand CNam e='数据库'
子查询语句为:
Select TName, Dept from Teacherwhere TName in (Select Teach Information where CNomberin (Select CNomber from Course where CNam e='数据库') )
从上述两种查询语句可以看出, 第一种的连接查询语句使用了多个逻辑与表达式, 导致查询效率降低。而且在查询语句中, 第一个Select后面的表定位必须受到限制, 即要指明是Teacher表中的字段, 否则会出错;同时子查询涉及到两层嵌套, 程序比较麻烦, 查询效率也很低。
2.2.3 组合查询实现方法
组合查询是基于子查询和连接查询实现, 集成了子查询的关键字功能及连接查询的联接表功能。有效的精简了Select语句表达式, 同时可对多表进行多条件查询, 针对上述问题1做如下实例设计实现。
解题思路:从建立的表中可以看出所有获取的信息分别在两个表中, 但这两个表可以通过另外一个表进行关联, 完成信息的定位查询。采用子查询方法将Teacher表和Course表进行关联, 再通过其返回教师名来查询其所属院系。查询语句如下:
Select TName, Dept
from Teacher
where TName in (Select TName from Teach Information cross join Course where CName=’数据库’)
从上述查询表达式来看, 其语言简洁, 思路明确, 有效的结合了子查询和连接查询, 从表达式上分析, 为了提供查询语句的执行效率, 减少了连接查询中And多张表的操作, 同时也降低了子查询嵌套层数。我们采用了CORSSjoin形成组合查询, 降低了多表操作和子查询嵌套, 这样降低了语句的复杂性和简化了语句。让广大学生更易理解和记忆, 书写也不易出错。
2.2.4 组合查询效率对比
组合查询有效的提高了查询效率, 组合查询的效率通过查询分析器可以看出其运行效率比单个子查询操作和连接查询操作的效率高出10%。下图为采用组合查询方法下的查询分析器效果图。
由上分析可知, 组合查询方法的应用具有以下三个方面的优点:查询效率高、语句简洁、查询成本低。
2.2.5 组合查询实现意义
根据第三节所介绍的组合查询方法, 以及实例设计分析, 以上三种查询方法前两种针对第一个问题的查询效率都很低, 而且语句过于繁琐和复杂, 学生一般很难掌握和理解, 书写起来也很麻烦, 不利于学生学习。在教学过程中所有的老师都可能按上述思路进行解题, 但绝大部分的学生是无法理解和记忆的, 但第三种查询方法却可以有效快速的帮助学生掌握SQL语句中的查询, 可通过子查询与连接查询的组合, 优化查询语句, 简化查询逻辑, 同时更适合教学, 通过使用组合查询, 嵌套的层数减少。而且程序变得简洁, 从学生的练习中可以看出。
3 结语
本文从查询语言的处理步骤到查询方式的介绍, 设计了一种语言简化、运行效果高、查询成本低组合查询, 组合查询有效的结合了子查询与连接查询的优点, 提高了查询语句的分析处理效率, 改变了SQL查询教学方式, 已有教学存在的方式, 是一种有效的SQL查询教学方法。通过实例证明, 此种查询结合了子查询和连接查询的优点, 方便学生学习应用。组合查询作为一种查询方式, 其在开发界早已出现, 但在课堂教学应作为重点, 这样更方便学生拓展思路同时更好的掌握和应用SQL查询语言。
摘要:随着软件行业的发展, 数据存储和查询变的越来越重要, 因此数据库语言的学习应从基础抓起。但在SQL教学过程中, 基于多表的查询语言相对比较复杂和难记, 导致很多学生无法掌握, 学习效果差。为更好的教学、便于学生理解, 本文着重提出一种基于连接和子查询的组合查询设计方法, 通过组合方式优化查询语句和逻辑关系, 运用此查询, 语句更简单化、易教学化;实践证明, 该查询方法有利于学生的记忆和理解, 更优化了查询效率, 提高了教学质量。
关键词:SQL,组合查询,查询方式,查询设计
参考文献
[1]计算机职业教育联盟.SQLserver数据库基础教程[M].北京:清华大学出版社, 2004.
[2]史嘉权等译.数据库系统基础教程[M].清华大学出版社.
[3]严蔚敏, 吴伟民.数据结构 (C语言版) [M].清华大学出版社.
[4]专家精讲:SQL Server Transact-SQL/杨志强.电子工业出版社, 2008.
数据库设计中英文术语表 第2篇
正文
1.2.3.4.5.Access method(访问方法):此步骤包括从文件中存储和检索记录。Alias(别名):某属性的另一个名字。在SQL中,可以用别名替换表名。Alternate keys(备用键,ER/关系模型):在实体/表中没有被选为主健的候选键。Anomalies(异常)参见更新异常(update anomalies)Application design(应用程序设计):数据库应用程序生命周期的一个阶段,包括设计用户界面以及使用和处理数据库的应用程序。
6.Attribute(属性)(关系模型):属性是关系中命名的列。
7.Attribute(属性)(ER模型):实体或关系中的一个性质。
8.Attribute inheritance(属性继承):子类成员可以拥有其特有的属性,并且继承那些与超类有关的属性的过程。
9.Base table(基本表):一个命名的表,其记录物理的存储在数据库中。
10.Binary relationship(二元关系):一个ER术语,用于描述两个实体间的关系。例如,panch Has Staff。
11.Bottom-up approach(自底向上方法):用于数据库设计,一种设计方法学,他从标识每个设计组建开始,然后将这些组件聚合成一个大的单元。在数据库设计中,可以从表示属性开始底层设计,然后将这些属性组合在一起构成代表实体和关系的表。
12.Business rules(业务规则):由用户或数据库的管理者指定的附加规则。
13.Candidate key(候选键,ER关系模型):仅包含唯一标识实体所必须得最小数量的属性/列的超键。
14.Cardinality(基数):描述每个参与实体的可能的关系数目。
15.Centralized approach(集中化方法,用于数据库设计):将每个用户试图的需求合并成新数据库应用程序的一个需求集合16.Chasm trap(深坑陷阱):假设实体间存在一根,但某些实体间不存在通路。
17.Client(客户端):向一个或多个服务器请求服务的软件应用程序。
18.Clustering field(群集字段):记录总的任何用于群集(集合)航记录的非键字段,这些行在这个字段上有相同的值。
19.Clustering index(群集索引):在文件的群集字段上定义的索引。一个文件最多有一个主索引或一个群集索引。
20.Column(列):参加属性(attribute)。
21.Complex relationship(复杂关系):度数大于2的关系。
22.Composite attribute(复合属性):由多个简单组件组成的属性。
23.Composite key(复合键):包含多个列的主健。
24.Concurrency control(并发控制):在多用户环境下同时执行多个十五并保证数据完整性的一个DBMS服务。
25.Constraint(约束):数据库不允许包含错误数据的一致性规则。
26.Data conversion and loading(数据转换和加载):数据库应用生命周期重的一个阶段,包括转换现有数据到新数据库中以及酱下耨应用程序转换到新的数据库上运行。
27.Data dictionary(数据字典):参见系统目录(system catalog)。
28.Data independence(数据独立性):使用数据的应用程序的数据描述部分。这意味着,如果将新的数据结构添加到数据库中,或者数据库中现有的结构被修改了,那么使用此数据库的就会受到影响,除非应用程序不直接依赖于被修改的部分。
29.Data model(数据模型):描述数据、数据间关系以及数据的约束的概念的一个集成的集合。
30.Data redundancy(数据冗余):参见冗余数据(redundant data)。
31.Data security(数据安全):包括对数据库对象(如表和视图)的访问和使用以及用
户可以在这些对象上实施的操作。
32.Database(数据库):是逻辑上相关的数据(以及这些数据的描述)的一个共享的集
合,用于解决公司对信息的需求。
33.Database design(数据库设计):数据库应用生命周期中的一个阶段,包括创建一个
支持公司的操作和目标的数据库的设计。
34.Database integrity(数据库完整性):指存储数据的正确定和一致性。完整性通常用
约束来表达。
35.Database Management System,DBMS(数据库管理系统):一个能够让用户定义、创建和维护数据库并控制对数据库的访问的软件系统。
36.Database planning(数据库规划):能尽可能有效的实现数据库应用的各阶段的管理
活动。
37.Database server(数据库服务器):同服务器。
38.DBMS engine(DBMS引擎):同服务器。
39.DBMS selection(DBMS选择):数据库应用生命周期中的一个阶段,包括选择一个
合适的DBMS来支持数据库应用。
40.Degree of a relationship(关系的度):一个关系中参与的实体的个数。
41.Denormalization(反规范化):形式上,这个术语指的是对基本表结构的修改,这样
新的表比原始的表的规范化程度要低。但也可以用此属于更宽泛地形容将两个表和并成一个新表的情形,而这个新表与原来的表具有相同的范式,但比原表包含更多的空值。
42.Derived attribute(派生属性):表示其值可以从一个相关属性和属性集的值派生得
到的属性,这个属性在实体中不是必须的。
43.Design methodology(设计方法学):一种结构化的方法,它使用过程、工具和文档
来支持和简化设计过程。
44.Disjoint constraint(无连接约束):描述子类的成员间的关系,并指明超类某个成员
是否有可能成为一个或多个子类的成员。
45.Domain(域):一个或多个属性的取值范围。
46.Entity(实体):具有相同性质的对象的集合,它是由用户或公司标识并可独立存在的。
47.Entity integrity(实体完整性):在一个基本表中,主健列的值不能为空。
48.Entity occurrence(实体出现):实体中的一个唯一可标识的对象。
49.Entity-Relationship model(实体关系模型):公司的实体、属性和关系的详细逻辑表
示。
50.Fact-finding(事实发现):使用诸如面谈和提问等技术收集关于系统的事实、需求和
性能的形式化过程。
51.Fan trap(扇形陷阱):但从第三个实体扇出的两个实体有1:*关系时出现扇形陷阱,但这两个实体在他们之间应该有直接关系以提供必要的信息。
52.Field(字段):同元组(Tuple)。
53.File(文件):存储在副主存储器中的相关记录的一个命名集合。
54.File-based system(基于文件的系统):一个文件集合,用来管理(创建、插入、删
除、更新和检索)一个或多个文件中的数据,并产生基于这些文件中的数据的应用(通常是报表)。
55.File organization(文件组织):当文件存储在磁盘上时,对文件中的记录的安排方式。
56.First normal form(1NF,第一范式):表中的每个列的交叉处以及记录包含切进包含
一个值的表。
57.Foreign key(外健):一个表中的一个列或者多个列的集合,这些列匹配某些其他(也
可能是同一个)表中的候选键。
58.4GL, Fourth-Generation Language(第四代语言):一种非过程化语言,比如SQL,他
只需要用户定义必须完成什么操作,4GL负责将所进行的操作翻译成如何实现这些操作。
59.Full functional dependency(完全函数依赖):一个列在功能上依赖于复合主健,但
不依赖于主健的任何一个子集的条件。
60.Functional dependency(函数依赖):描述表中列之间的关系。
61.Generalization(泛化):通过标识实体间的公共特征使实体间差别最小化的过程。
62.Generalization hierarchy(泛化层次结构):同类型层次(type hierarchy)。
63.Global data model(全局数据模型):代表整个公司(和被模型化的公司的一部分)的数据模型。
64.Implementation(实现):数据库应用生命周期中的一个阶段,包括数据库和应用程
序设计的物理实现。
65.Index(索引):一种允许DBMS将特定的记录更快的放置到文件中,从而加快对用
户查询的响应的数据结构。
66.Infomation system(信息系统):能够在整个公司范围内收集、管理、控制和分发数
据/信息的资源。
67.Inheritance(继承):参见属性继承(attribute inheritance)。
68.Integrity constaints(完整性约束):防止出现数据库中的数据不一致的约束。
69.IS-A hierarchy(IS-A层次结构):同类型层次结构(type hierarchy)。
70.Local logical data model(局部逻辑数据模型):代表特定用户视图或用户视图的组合的数据模型。
71.Logical database design(逻辑数据库设计):基于特定的数据模型构建公司的数据的模型的过程,但不依赖于特定的DBMS以及其他的物理条件。
72.Meta-data(元数据):关于数据的数据,参见系统目录(system catalog)。
73.Mision objective(使命目标):标识数据库必须支持的特定任务。
74.Mission statement(使命语句):定义数据库应用程序的主要目标。
75.Multiplicity(多样性):定义与某个相关实体的一次出现有关的实体的出现数目。
76.Multi-valued attribute(多值属性):为一个实体的出现保存多个值的属性。
77.Nonkey attribute/column(非键属性/列):不是键的一部分的属性/列。
78.Normal forms(范式):规范化过程的一个阶段。前三个范式分别为第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。
79.Normalization(规范化):一种产生带有需要的特性的技术,这种特性能支持用户和
公司的需求。
80.Null(空值):表示当前不知道或对于这条记录来说不可使用的一个列的值。
81.Operational maintenance(操作维护):数据库应用生命周期的一个阶段,包括监视
和维护系统安装后的运行。
82.Participation constraint(参与约束,EER模型):确定超类中的每个出现是否必须作
为子类的一个成员进行参与。
83.Participation constraint(参与约束,ER模型):确定是否所有或者仅仅是某些实体出
现参与到关系中。
84.Physical database design(物理数据库设计):在二级存储上产生数据库实现的描述的过程,它描述基本表、文件的组织、用于获得有效访问的索引以及所有与完整性约束和安全性限制有关的说明。
85.Primary index(主索引):在文件的有序键字段上构建的索引。一个文件最多可以有
一个主索引或一个群集索引。
86.Primary key(主健,ER模型):用来标识每个实体的出现的候选键。
87.Primary key(主健,关系模型):在一个表中用来标识记录唯一性的候选键。
88.Privileges(权限):允许用户在给定基本表和视图上执行的操作。
89.Prototyping(原型):数据库的应用程序生命周期的一个阶段,包括勾践数据库应用
程序的工作模型。
90.Query-by-Example(QBE):一种用于关系型DBMS的非过程化的数据库语言。QBE
是一个图形化的“点-按”查询数据库的方法。
91.RDBMS:关系型DBMS。
92.Record(记录):同元组(Tuple)。
93.Recovery control(恢复控制):当时百事,将数据库还原到正确状态的过程。
94.Rcursive relationship(递归关系):一种关系,挡同一个实体在不同的角色中参与多
次时就会出现递归关系。例如Staff Supervises Staff。
95.redundant data(冗余数据):在多个表中存储的重复数据。
96.Referential integrity(参照完整性):如果一个表中存在外健,则外健值必须匹配主
表中的某些记录的候选键的值。
97.Relation(关系):一个关系是一张表,它也有列和行。
98.Relational model(关系模型):以表(或关系)的形式表示数据的数据模型。
99.Relational database(关系数据库):规范化表的集合。
100.Relation(关系):实体间有意义的关系。
101.Relationship occurrence(关系出现):两个实体出现之间的唯一可标识的联系。102.Requirements collection and analysis(需求收集于分析):数据库应用程序生命周期的一个阶段,包括收集和分析数据库应用程序所要支持的关于公司的信息,并使用这些信息来标识新的数据库应用需求。
103.Row(行):同元组(Tuple)。
104.Second normal form(第二范式):一个已经是第一范式的表,同时满足所有的非主
健列只能从构成主健的全部列中获得。
105.Secondary index(二级索引):在数据文件的非有序字段上定义的索引。
106.Security(安全):指防止数据库被非授权的用户访问,包括有意的和无意的。RDBMS
通常提供两种类型的安全:数据安全和系统安全。
107.Server(服务器):为发出请求的客户提供服务的软件应用程序。参见两层/三层客
户端-服务器体系结构。
108.Simple attribute(简单属性):只有一个组件的属性。
109.Single-valued attribute(单值属性):对于一个实体出现只有一个值的属性。
110.Specialization(特化):通过标识用来区分实体间成员的特征来最大花实体间成员的差别的过程。
111.Specialization hierarchy(特化层次结构):同类型层次结构(Type hierarchy)。112.SQL(Structured Query Language,结构化查询语言):一种用于RDBMS的非过程化
数据库语言。换言之,你只需要指定你需要那些信息,而不需要指定如何得到这些信息。SQL已经被国际标准化组织(ISO)标准化了,因此SQL是定义和操纵RDBMS的正式和实际上的标准语言。
113.Strong entity(强实体):一个不依赖于其他实体的主健的存在而存在的实体。114.Subclass(子类):为(超类)实体中的某些出现并保持特定属性和关系并有不同角
色的实体
115.Superclass(超类):为实体中的所有出现保存公共属性和关系的实体。可参见特化
和泛化。
116.Superkey(超键,ER模型):一个属性或属性集,诶译的标识了每个实体地出现。117.Superkey(超键,关系模型):一个列或者列集,唯一的标识了表中地一个记录。118.System catalog(系统目录):保存关于数据库地结构、用户、应用程序等信息地数
据。
119.System definition(系统定义):数据库应用声明周期重的一个阶段,包括定义数据
库应用程序以及他的主要用户视图地范围和边界。
120.System security(系统安全):在系统级保护数据库地访问和使用,不如用户名和密
码。
121.Table(表):同关系(relation)。
122.Ternary relationship(三元关系):三个实体间的关系。例如panch,staff和member
之间的Registers关系。
123.Testing(测试):数据库应用生命周期的一个阶段,包括执行应用程序并有意地发
现错误。
124.Third normal form,3NF(第三范式):一个已经是1NF和2NF的表,同时满足所有的非主健的列的值仅能从主健列得到,而不能从其他列得到。
125.3GL, Third-Generation Language(第三代语言):一种过程化的语言,比如COBOL、C、C++,它需要用户(通常是程序员)指定必须要干什么事情以及如何干这些事情。
126.Three-tier client-server architecture(三层客户端-服务器体系结构):由处理用户
界面的客户和处理业务逻辑的应用程序服务器以及数据处理曾组成,而数据库服务器是用来来运行DBMS的。
127.Top-down approach(自顶向下方法,用于数据库设计):一种设计方法,此种方法
从定义系统的主要结构开始,然后将这些结构逐步细分成更小的单元。在数据库设计中,通过标识实体和数据间的关系开始这个顶层的步骤,然后逐步添加细节,比如你希望保存的关于实体和关系的信息(成为属性)以及在实体、关系和属性上的所有约束。
128.Transaction(事务):由用户和应用程序执行的一个动作或一系列动作,这些动作
访问或修改数据库的内容。
129.Transaction Processing Monitor,TPM(事务处理监视器):控制数据在客户端和服
务器键转换的程序,以便为联机事务处理(OLTP)提供一个一致的环境。
130.Transitive dependency(传递依赖):假设A、B、C是表中的列,如果B依赖于A
(A-->B),并且C依赖于B(B-->C),则C通过B传递而依赖于A(假设A不
依赖于B或C)。如果在主健上存在一个传递依赖,则此表就不是3NF的。必须从表中去掉传递依赖以达到3NF的要求。
131.Tuple(元组):关系中的一行记录。
132.Two-tier client-server architecture(两层客户端-服务器体系结构):由处理主要业
务和数据处理逻辑以及与用户的接口的客户端应用程序和管理和控制数据库访问的服务器程序组成。
133.Type hierarchy(类型层次结构):一个是提以及它的子类和他们的超类,等等。134.UML(Unified Modeling Language,统一建模语言):在20世纪80年代和90年代
引入的诸多面向对象分析与设计方法重的一种较新的方法。
135.Update anomalies(更新异常):当用户视图更新一个包含冗余数据的标识可能引
起的不一致。有三种类型的异常:插入、删除和更新。
136.User view(用户视图):从特定的作业(比如经理或管理者)角度或业务应用领域
(比如市场、职员或库存控制)定义的数据库应用的需求。
137.View(视图):一个“虚拟底表”,它不实际存在数据库中,但他由 DBMS从现有底
它所涉及的基本表中产生。
138.View integration approach(视图综合法,用于数据库设计):每个用户视图的需求,用来构建代表用户试图底独立数据模型。在数据库设计阶段,结果数据库模型被合并成一个更大的模型。
参考资源
《Database Solution-A Step by Step Guide to Building Database》
一种修改表数据的简单方法 第3篇
关键词:表;数据;SQL Server
1引言
20世纪90年代使用数据库的人都知道,FOXPRO通过BROWSE命令调出一个数据集窗口,用户在这个窗口中可以完成记录的增加、修改、删除等操作,非常方便、直观。
进入21世纪后,像FOXPRO这样的小数据库被淘汰了,取而代之的是像SQL Server这样的大型数据库。若要查看、添加、修改与删除表中的记录,通常直接在客户端执行后台的SQLServer的SE-LECT、INSERT、UPDATE与DELETE命令来查看、添加、修改与删除表中的数据,或者使用客户端开发工具所创建的控制界面来做此操作。比如,使用DELPHI设计一个窗体(Form)让用户查看、添加、修改或删除后台SQL Server数据库表中的数据。
但在实际工作中,有时在创建一个表以后,需要立即向表中添加一些记录,以便能够进行一些测试工作。有没有一种类似FOXPRO中的数据操作窗口呢?答案是肯定的。最简单的方法就是通过企业管理器进行添加记录、修改记录与删除记录。
2实现方法
启动企业管理器,建立与SQL Server的连接,展开需要进行操作的表所在的数据库,单击“表”节点,则右侧窗口将出现此数据库所包含的所有表。用鼠标右键单击需要操作的表,在弹出的快捷菜单中选择“打开表”->“返回所有行”命令,则弹出图1所示的窗口。
用户在此界面中可进行插入记录、修改记录和删除记录操作。点击工具栏中的“显示/隐藏SQL窗格”按钮,可以在打开的SQL窗格中输写SQL命令,之后,点击工具栏中的“运行”按钮执行命令。
(1)插入记录
插入记录是将新记录添加在表尾。用户可以向表中插入多条记录,方法是:将光标定位在当前表尾的下一行,然后逐列输入字段的值。每输入完一个字段的值,按回车键(或按光标右移键),光标将跳到下一字段,即可接着输入。若当前是表的最后一个字段,则该字段编辑完后按下回车键,光标将跳到下一行的第一列,此时便可增加下一行。
若表的某个字段不允许为空值,则必须为该列输入值。例如,表ZY_BRXXK的b1h字段中必须输入数据。而若字段允许为空值,则不输入该字段值,在表中将显示
(2)修改记录
将光标定位在要修改的记录字段,然后对该字段值进行修改。用户可以通过光标移动键进行修改,或通过鼠标定位到任何要修改的字段进行修改。如果输入的数据不合法,系统将不允许进入下一个字段继续操作。
(3)删除记录
当表中的某些记录用户不再需要时,可以将其删除。在操作表数据的窗口中将当前光标定位在要被删除的记录行上,此行最前面有一个三角指示符,此时该行反向显示。单击鼠标右键,在弹出的快捷菜单上选择“删除”命令项,此时将出现确认对话框,见图2。单击“是”按钮将删除所选择的记录,选择“否”将不删除该记录。删除时也可以通过按“Shift”键选择多条记录来同时删除多条记录。
3结论
数据库表结构设计 第4篇
1 基本认识
1.1 表空间
MIS数据库中的数据都是存储在表空间中。 MIS数据库可以从逻辑上有小的空间组成, 这些小的空间就是表空间[1]。一个表空间在同一时刻只能归属一个数据库之中。 并且在每个表空间中, 还可以包含多个操作系统中的文件, 也就是组成系统操作的数据文件[2,3,4]。 一个表空间可以有0 个或者多个段 (segment) 。 在数据库运行的时候表空间可以被挂起上线。 处system和有活动回退段的表空间外, 表空间可以离线, 离开数据库的运行。 表空间可以在读写状态和只读状态间切换
1.2 数据文件
每个MIS数据库拥有一个或者多个数据文件。 这些物理结构是由MIS服务器的操作系统来保证的。 数据文件只能属于一个表空间[5]。 MIS服务器通过分配一定数量的磁盘空间加上少量额外空间, 为一个表空间创建数据文件。 数据库管理员可以在数据文件创建以后改变其大小或者指定数据文件在表空间中对象增长的时候动态增长[6]。
2 MIS数据库的设计需求
MIS (管理信息系统) 作为数据库及专用软件基础, 以人为主导进行设计, 可以综合利用计算机硬件技术、 软件技术以及网络设备通信技术等, 进行收集、 传输数据库信息, 并实现对于数据库中信息的储存、 更新与维护操作, 集成化实现MIS系统。 MIS中数据库架构设计中, 优化数据库架构, 可保证MIS成功, 提升MIS性能[7,8]。 MIS数据库架构设计中, 把MIS系统中的大量数据, 能够按一定模型规则来进行组织, 并可为数据库用户人员提供信息存储、 维护以及检索有用数据的服务功能, 提升该系统在应用过程中的服务性能, 方便、及时获取所需的数据库信息[9]。 同时, 也可以将业务对象转换成表以及视图, 确保在数据库对象实现过程中, 可以构架出最优的MIS数据库模式, 满足各种MIS用户的信息处理应用需求。
3 表空间和数据文件下的MIS数据库架构
3.1 MIS数据库
对于MIS中数据库架构设计之中, 可以确保在MIS中物理上表空间是一个磁盘数据文件形式, 并且对于每一个表空间, 也可以由一个或者是多个数据文件来组成; 在一个数据文件中, 也只能和一个表空间进行联系, 构成数据库中表空间与数据文件在逻辑、 物理上的统一, 提升MIS数据库运行性能。 如图1 所示。
3.2 表空间及数据文件
在MIS数据库架构设计中, 对于表空间与数据文件之间, 在逻辑上由表空间来组成, 表空间中可包含多个数据文件。如图2 所示。
在MIS中数据库架构的表空间设计中, 可以给表以及索引表分别创建两个不同的表空间, 在表中可以存放用户数据, 是一个数据表空间; 在索引表中存放表的相关索引, 是一个索引表空间。 同时, 对于表空间设计中, 还可以根据MIS中数据量大小, 以及数据库内数据的性质因素, 能够在数据表空间中多添加几个数据文件, 提升数据库系统处理表空间效率。 创建表空间之时, 可以将较大表以及索引分配到单独的一个表空间中; 并且将高频率Insert表对象分成一组中, 可以存在与之相对应的TABLESPACE; 将表操作中的增、 删、 改对象也可分成单独的一组, 将其存在对应的TABLESPACE之中; 同时, 也将表与索引存于不同的TABLESPAC之中。
对于MIS中, 其数据库的数据文件是依附表空间的, 可以将大小相当的表放在一个表空间之中; 设置一个表空间存储参数, 避免跨范围存放数据文件, 也可显著提升数据库性能。
3.3 完善MIS数据库的命名规则
对MIS中数据库对象, 在进行命名时可实施规则约束。确保MIS数据库所有对象, 均可以按照规则进行命名。 同时, 为了便于MIS数据库维护, 应该遵从表命名中在模块、 业务当面的明细规则, 保证数据文件与表空间在数据库中的规范管理, 简化数据库管理难度。
3.4 设计数据库表
可以根据MIS系统需求分析结果, 设计优化数据库中的表。 在进行表设计中, 一定要确保表空间数据的完整性, 同时通过运用主键、 外键以及检查约束的手段, 来保证MIS数据库中的数据一致性。 实现数据库中的表规范化管理过程, 基于数据库文件模型化基础, 其目的是能够有效消除数据库中的数据冗余, 并且可以避免非规范化的数据更新异常, 简化MIS数据库执行完整性约束的条件。 并且对表数据冗余进行控制和调整, 减少数据冗余, 节约存储空间, 提高数据库操作效率, 可以满足应用的需求。 如表1、 表2 所示。
查看MIS数据库中表空间信息命令, 其部分查询语句如下:
3.5 优化数据库架构
在MIS中, 进行数据库构架之时, 能够尽量地在同一时间内, 分散开数据库系统磁盘中的读写操作。 就如更新一个表中的数据时, 可以在MIS数据库中同时读取出该表数据及索引信息, 并且将数据信息与索引信息可以放在一个相同的数据文件之中, 但是这样会造成数据库运行速度变慢。 因此, 优化设计数据库架构之中, 能够将数据信息、 索引信息有区别的放在不同的两个磁盘数据文件中, 这样在MIS数据库进行数据文件读写操作过程中, 就可以在两个磁盘上进行, 相应的MIS数据库运行速度也得到显著的提高。
4 效益研究
对于设计MIS中的数据库架构方法, 基于运用表空间、数据文件技术, 不仅可以减少操作失误与繁琐程度, 还可以有效降低数据库管理成本, 提升数据库运行效益, 提升12.0%。 运用表空间和数据文件技术, 设计MIS数据库架构, 实现数据库表空间扩容, 确保MIS系统运行稳定, 发挥积极应用效益。
5 结语
对于MIS数据库架构设计中, 基于表空间和数据文件进行数据库架构优化, 不仅节省数据库处理时间, 也可以降低数据库架构成本, 提升MIS数据库处理效率, 发挥积极影响, 可在实际中推广该技术。 主要研究基于表空间和数据文件探讨MIS中数据库架构设计问题。 对于MIS设计中, 对于其数据库架构方面, 传统MIS数据库架构中, 多采用SQLplus等命令行工具书写SQL命令, 降低处理速度, 基于表空间和数据文件技术, 分析其设计需求, 确保可以提升数据库运行效率。 结果证实, 在设计MIS数据库架构中, 运用表空间和数据文件技术, 不仅可以减少操作失误与繁琐程度, 还可以有效降低数据库管理成本, 提升数据库运行效益, 提升12.0%。结论表明, 基于表空间和数据文件优化设计MIS中数据库架构, 发挥积极应用价值, 可在实际MIS数据库设计中推广应用该技术。
摘要:在数据化技术发展环境下, 基于表空间及数据文件实现MIS中数据库的架构设计, 能够显著提高实际应用效益。在从表空间及数据文件角度分析MIS中数据域的架构设计。
关键词:表空间,数据文件,MIS,数据库,架构设计
参考文献
[1]季宇, 曾银龙, 张荣, 等.Oracle数据库中地形数据存储的优化实践[J].地理空间信息, 2011, 09 (1) :50-52.
[2]李衎.Oracle数据库常见表空间故障恢复方案[J].中国金融电脑, 2010, (7) :66-69.
[3]宋义秋, 唐玉琦.MIS中数据库关键技术及构架设计[J].制造业自动化, 2010, 32 (8) :194-197.
[4]卢友娥.ORACLE数据库损坏回滚数据文件的恢复方法[C].2006.
[5]李莹莹.三维地质空间数据库系统模型的研究[D].中国地质大学 (武汉) , 2011.
[6]苏国磊.利用RMAN实现Oracle数据库的备份与恢复[J].电脑知识与技术 (学术交流) , 2007, 1 (2) :325-326.
[7]魏晓.基于状态监测与故障诊断大型数据库的设计开发[D].大连理工大学, 2005.
北邮数据结构实验报告 单链表 第5篇
实验名称: 实验一
线性表 学生姓名:
班
级:
班内序号:
学
号:
日
期: 2014年1月3日
实验目的
熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 学习指针、模板类、异常处理的使用 掌握线性表的操作的实现方法 学习使用线性表解决实际问题的能力 实验内容
2.1题目1 根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。
线性表存储结构(五选一):
1、带头结点的单链表
2、不带头结点的单链表
3、循环链表
4、双链表
5、静态链表
线性表的基本功能:
1、构造:使用头插法、尾插法两种方法
2、插入:要求建立的链表按照关键字从小到大有序
3、删除
4、查找
5、获取链表长度
6、销毁
7、其他:可自行定义
编写测试main()函数测试线性表的正确性。程序分析
3.1 存储结构 单链表的存储结构:
3.2 关键算法分析
一、关键算法 1.头插法
自然语言描述:a.在堆中建立新结点
b.将a[i]写入到新结点的数据域
c.修改新结点的指针域
d.修改头结点的指针域,将新结点加入链表中 代码描述: template
front = new Node
}
} s->next = front->next;front->next = s;时间复杂度:O(n)
2.尾插法
自然语言描述:a.在堆中建立新结点
b.将a[i]写入到新结点的数据域
c.将新结点加入到链表中
d.修改修改尾指针 代码描述: template
front = new Node
}
} s->data = a[i];s->next = r->next;r->next= s;r=s;时间复杂度:O(n)
3.析构函数
自然语言描述:a.新建立一个指针,指向头结点
b.移动a中建立的指针
c.逐个释放指针
代码描述: template
Node
} } delete front;4.按位查找函数
自然语言描述: a.初始化工作指针p和计数器j,p指向第一个结点,j=1
b.循环以下操作,直到p为空或者j等于1
b1:p指向下一个结点
b2:j加1
c.若p为空,说明第i个元素不存在,抛出异常
d.否则,说明p指向的元素就是所查找的元素,返回元素地址
代码描述: template
Node
if(j
} else break;p = p->next;j++;
} if(!p)throw“查找位置非法”;else
return p;} 时间复杂度:O(n)
5.按值查找函数
自然语言描述:a.初始化工作指针p和计数器j,p指向第一个结点,j=1
b.循环以下操作,找到这个元素或者p指向最后一个结点
b1.判断p指向的结点是不是要查找的值,如果是,返回j;
b2.否则p指向下一个结点,并且j的值加一
c.如果找到最后一个结点还没有找到要查找的元素,返回查找失败信息
代码描述: template
Node
} return-1;if(p->data == x)return j;else { p = p->next;
j++;} } 时间复杂度:O(n)6.插入函数
自然语言描述: a.在堆中建立新结点
b.将要插入的结点的数据写入到新结点的数据域
c.修改新结点的指针域
d.修改前一个指针的指针域,使其指向新插入的结点的位置
代码描述: template
Node
} else throw“插入位置非法”;Node
自然语言描述:a.从第一个结点开始,查找要删除的位数i前一个位置i-1的结点
b.设q指向第i个元素
c.将q元素从链表中删除
d.保存q元素的数据
e.释放q元素 代码描述: template
T x=q->data;
} p->next = q->next;delete q;return x;
8.遍历打印函数
自然语言描述: a.判断该链表是否为空链表,如果是,报错
b.如果不是空链表,新建立一个temp指针
c.将temp指针指向头结点
d.打印temp指针的data域
e.逐个往后移动temp指针,直到temp指针的指向的指针的next域为空
代码描述: template
} Node
} cout<
自然语言描述: a.判断该链表是否为空链表,如果是,输出长度0
b.如果不是空链表,新建立一个temp指针,初始化整形数n为0
c.将temp指针指向头结点
d.判断temp指针指向的结点的next域是否为空,如果不是,n加一,否则return n
e.使temp指针逐个后移,重复d操作,直到temp指针指向的结点的next域为0,返回n 代码描述: template
} Node
} return i-1;p = p->next;i++;4 程序运行结果
4.1主函数流程图
4.2程序运行框图
实验心得
1.调试时出现的问题及解决的方法
在编写按值查找函数时,由于没有处理好指针类型的原因,导致指针无法正常返回,屡屡报错。最后意识到c++没有指针强制类型的转换机制,经过细致检查后才改正错误使得程序正常运行。2.心得体会
了解了单链表的基本的操作函数实现,对链式存储结构有了较好的认识 3.下一步的改进
可以增加完善报错机制,增强程序的健壮性
完整源代码
#include
template
};
template
};
//template
Node
template
}
template
}
template
} front = p;p = p->next;delete front;front = new Node } Node } Node } Node } cout< template } template } Node } return-1;if(p->data == x)return j;else { } p = p->next; j++;Node } if(!p)throw“查找位置非法”;else return p;if(j } else break;p = p->next;j++; template } template } template } void main(){ Node } return i-1;p = p->next;i++;Node } else throw“插入位置非法”;Node T x=q->data; 【关键词】排序;筛选;分类汇总;数据透视表;数据处理 很多中职学生都认为Excel是计算机基础这一学科中比较难学习的操作软件,对于如何学习Excel却无路可循。针对学生的这些问题,本文中只是选取了排序、筛选、分类汇总、数据透视表这几个常用操作进行探讨学习。 一、排序 相对而言,排序是比较容易掌握的操作之一,同时也是数据处理中的经常性工作。对数据表格中的内容,要求有标题行,数据不能有空行或空列,可以有空格,不能有合并单元格。在排序时,常用的方法有以下几种。 (一)快速排序 如果我们希望对销售产品资料按某列属性(如“销售金额”由高到低)进行排列,可以这样操作:选中“销售金额”列任意一个单元格(如G3),然后按一下“常用”工具栏上的“降序排序”按钮即可。 (二)多条件排序 如果我们需要按“姓名、产品、销售金额”对数据进行排序,可以这样操作:选中数据表格中任意一个单元格,执行“数据→排序”命令,打开“排序”对话框,将“主要关键词、次要关键词、第三关键词”分别设置为“姓名、产品、销售金额”,并设置好排序方式(“升序”或“降序”),再按下“确定”按钮就行了。 (三)按笔划排序 例如对“姓名”进行排序时,中国人喜欢按“姓氏笔划”来进行:选中姓名列任意一个单元格,执行“数据→排序”命令,打开“排序”对话框,单击其中的“选项”按钮,打开“排序选项”对话框,选中其中的“笔划排序”选项,确定返回到“排序”对话框,再按下“确定”按钮即可。 二、筛选 Excel中提供了两种数据的筛选操作,即“自动筛选”和“高级筛选”。 “自动筛选”一般用于简单的条件筛选,筛选时将不满足条件的数据暂时隐藏起来,只显示符合条件的数据。 若要筛选的多个条件间是“或”的关系,或需要将筛选的结果在新的位置显示出来那只有用“高级筛选”来实现了。“高级筛选”一般用于条件较复杂的筛选操作,其筛选的结果可显示在原数据表格中,不符合条件的记录被隐藏起来;也可以在新的位置显示筛选结果,不符合的条件的记录同时保留在数据表中而不会被隐藏起来,这样就更加便于进行数据的比对了。 筛选对数据的要求: (1)必须有标题行,即数据区域的第一行为标题 (2)数据区域内不能有空行或空列,个别的空格无所谓。如果有空行或空列,Excel会认为不是同一个数据区域。 三、分类汇总 各种报表处理中最常用的就是分类汇总。例如会计核算,需按照科目将明细账分类汇总。 (一)分类依据 1、在进行分类汇总操作之前,首先要确定分类的依据。 2、在确定了分类依据以后,还不能直接进行分类汇总,还必须按照选定的分类依据先将数据清单排序。否则可能会造成分类汇总的错误。排序操作的基本步骤前面已经提到过,排序后整个数据清单都按照类别排好顺序,就可以进行分类汇总操作了。 (二)分类汇总操作 分类汇总操作的基本步骤如下: 1、如果当前单元格不在数据清单中,选定数据清单中的任一单元格。 2、单击数据菜单中的分类汇总命令。这时将弹出分类汇总对话框。 分类字段:下拉框中选定;汇总方式:下拉框中选定;选定汇总项:下拉框中中选定,可复选;根据需要决定是否选定汇总结果显示在数据下方选项,如果不选定该项,则汇总结果显示在数据上方。最后单击确定。 四、数据透视表 (一)数据透视表对数据源的要求 若要创建数据透视表,要求数据源必须是比较规则的数据,也只有比较大量的数据才能体现数据透视表的优势。 1、表格的第一行是字段名称,字段名称不能为空。 2、数据记录中最好不要有空白单元格或合并单元格。 3、一个字段只能包含一个信息。 4、每个字段中数据的数据类型必须一致(如“出生日期”字段的值如果既有日期型数据又有文本型数据,则无法按照“出生日期”字段进行组)。 数据越规则,数据透视表使用起来越方便。 (二)创建数据透视表 数据透视表的功能非常强大,但创建的过程却非常简单。首先选定数据源中任意一个有内容的单元格,然后选择“插入”→“数据透视表”命令。在弹出的对话框根据具体需要进行设置后即可创建数据透视表。至于如何设置报表筛选、行标签、列标签、数值等,本文就不进行详细讲述。 通过前面针对排序、筛选、分类汇总、数据透视表这几种操作的简单介绍,可以发现这些数据操作有某些共通点。 1、为更方便的应用这些功能,对数据源的格式有一定的要求,都是要求有标题行,不能出现空行、空列或合并单元格。 2、在实现数据处理过程中,均可以在数据源中选择任意一个有内容的单元格,然后直接点击排序、筛选、分类汇总或者插入数据透视表等操作按钮就可以了。 其实Excel还有其他一些处理数据的应用,如果数据表格是规则的,同样可以选择任意一个有内容的单元格而不用去选取区域,如插入图表。 使用这样的操作方法优点和缺点都很明显。优点是操作方便快捷,容易掌握,操作过程也容易发现数据源是否有误,在数据量较大的情况下,这种优势更为明显。缺点是如果数据表格不规则,则需要重新整理格式或者采用选取区域的方式进行操作,同时也会容易因表格的不规则而进行错误操作。 Excel的操作无论是数据处理还是公式应用,都有其规律性,如果掌握了这些规律,Excel的学习就会事半功倍。 参考文献: [1]周南岳.计算机应用基础[M].高等教育出版社.2013 [2]新夫 任利军 范晓静.计算机应用基础(高职高专)[M].海洋出版社.2006 内存数据库(MMDB:main memory database)是一种现代数据库技术,它在数据规模上无法和传统硬盘数据库相比,但在某些特定专业领域,如:电力和电信网络、金融、集成办公系统等很多实时性要求高的行业中,内存数据库系统发挥的作用已经越来越重要。随着内存价格的不断下降和内存容量的不断增长,尤其是64位操作系统的出现,使内存数据库从规模和技术上都将得到充分的发展和提升。内存数据库的理论研究已经进行了二十多年,但对内存数据库的定义却存在着多种观点,典型的观点有以下几种: (1)整个数据库全部常驻内存,存取数据时没有I/O操作。 (2)内存不必足够大到容纳整个数据库,但数据被存取时,先进入内存,数据库的存取在内存进行。 (3)数据库常驻磁盘,在事务执行前,将所需要的数据集中调入内存,提交时所有对数据库的修改必须写回磁盘。 (4)数据库常驻磁盘,但内存有很大的缓冲区或高速缓存,因而使数据库的大部分乃至全部驻留内存,通过适当的缓冲区处理以减少内外存I/O操作。 在国内,对内存数据库比较权威的定义如下: 定义:设有数据库系统DBS,DB为DBS中的数据库,DBM(t)为在时刻t,DB在内存的数据集,DBM哿DB。TS为DBS中所有可能事务的集合,AT(t)为在时刻t处于活动状态的事务集,AT(t)哿TS。Dt(T)为事务T在t时刻所操作的数据集,Dt(T)哿DB,若任意时刻t,均有: 坌T∈AT(t),Dt(T)哿DBM(t) 成立,则称DBS为一个内存数据库系统(Main Memory Database System),简写为MMDBS,DB为一个内存数据库,记为MMDB。 对于这个定义,用直观的话说,内存数据库系统就是数据库的“工作版本”常驻内存的数据库系统。 2 索引与数据组织 内存数据库的物理组织是其总体设计目标(使内存和CPU的利用率尽可能高)的实现基础,其存储结构、索引结构、中间数据存储结构都必须考虑内存的直接存取这一特征,本文采用了桶散布Hashing的方式来实现物理数据组织。 创建索引可以大大提高应用的系统性能,可以加快数据检索速度,可以加速表与表之间的连接,可以减少分组和排序的时间。虽然MMDB速度比硬盘数据库(DRDB,Disk Resident Database)快得多,但是为了减少数据访问时的比较次数,最大化的提高MMDB性能,MMDB也都采用了索引技术。索引结构是MMDB使用最广泛的组织方式,索引结构可以分两大类,一类是树结构,一类是Hash结构。B树和B+树是磁盘数据库中广泛使用的索引技术,能最大化的减少I/O,但空间的利用率仅为60%左右,其较低的空间利用率不适合于内存数据库。目前研究的内存数据库索引技术还有T树索引、AVL树索引、SB树索引、CSS树、BD树等树结构索引技术,而Hash的缺点在于它不支持范围索引。各种索引优缺点不同,在不同的情况下使用。 针对移动垃圾短信监控系统的特性,由于所有的数据分析是基于源手机号码,那么也就是说存储数据库记录时,只基于存储源号码的数据分析结果进行存储,不用对号码范围进行检索,也就屏蔽了Hash不支持范围索引的缺点,所以本文采用了Hash+链表的索引结构。内存数据库的索引中并不存储真实的属性值,而仅仅存储指向元组的指针,当需要的时候通过这些指针能够得到属性值。 3 垃圾短信监控系统中链接桶哈希索引的设计 Hash技术在信息系统的数据存储与访问中占有重要的地位,是信息系统中广泛使用的数据存储和访问技术。数据库中广泛使用的哈希索引有链接桶哈希(chained bucket hashing)、可扩展哈希(extendible hashing)、线性哈希(linear hashing),其中链接桶的哈希使用静态结构处理冲突,速度很快,但不适合动态环境。基于等值的比较,哈希技术能够快速的访问数据库,且易于实现,但不支持范围检索。而垃圾短信监控系统数据库不涉及范围的检索,数据的更新非常频繁,因此,系统采用了链接桶哈希索引,并且针对系统的实际情况做了相应的改动。 由于系统中针对每个数据分析模块都建立相应的数据结构,并且所有的数据访问都通过指针来进行,所以系统为内存数据库的链接桶哈希索引建立一个索引空间-即模值空间inthash_t和一个节点空间inthash_node_t。模值空间是Hash索引的入口,该空间不存储任何实际记录数据,仅仅存储一个指向节点链表首地址的指针。节点空间存储具体的记录数据和一个指向下个节点的指针,该指针用来指向一个经哈希函数计算产生冲突的下一节点,用指针方式可形成一个节点冲突链表。 模值空间即Hash索引入口是个散列桶,它的初始大小是一个固定的值。而节点空间是不固定的,每增加一个节点都在内存中申请相应大小的空间,利用指针链接到相应链表中来。 哈希索引入口数据结构如下: 4 垃圾短信监控系统中链接桶哈希的算法 4.1 初始化哈希入口空间 初始化一个哈希入口空间表的算法如下: 输入inthash_t*tptr/*指向一个Hash入口空间的指针*/ int buckets/*用于定义入口空间桶数的参数,取数=2的N次方*/ 步骤如下: 这里把tptr->size与参数buckets做比较,当tptr->size 为入口空间桶分配内存。 4.2 查找记录 查找记录的算法如下: 4.3 插入记录 插入记录的算法如下: 4.4 删除记录 插入记录的算法如下: 4.5 哈希表空间的扩展 当记录数达到桶数的时候,索引空间必须要扩展,这里通过哈希表的重建函数,实现了桶哈希的空间扩展。扩展算法如下: 5 结论 根据移动短信监控系统中内存数据库的特点,设计了用于内存数据库的HASH+链表索引,并应用于内存数据库系统中。基于内存数据库技术实现的移动公司垃圾短信监控平台,满足了系统在性能、业务、灵活、实时方面的要求。 摘要:文章研究了内存数据库管理系统的原理和关键技术,根据移动短信监控系统中内存数据库的特点,设计和实现了一个基于Hash+链表索引的专用型内存数据库系统,用于解决垃圾短信分析系统中海量短信的存取问题。 关键词:垃圾短信系统,内存数据库,HASH索引 参考文献 [1]刘云生.现代数据库技术[M].北京:国防工业出版社,2001:238-314. [2]杨武军,张继荣,屈军锁.内存数据库技术综述[J].西安邮电学院学报,2005,10(3):95-98. [3]阳国贵,王升,张火炬,等.内存数据库系统与技术[J].软件学报,1994,5(3):22-28. [4]Phil Bernstein,Michael Brodie,Stefano Ceri,et al..The Asilomar Reporton Database Research[J].ACMSigmod Recorf,1998,27(4):74-80. [5]David J DeWitt,Randy H Katz,Frank Olken,et al.I,mplementationtechniques for main memory database systems[C].Proc,ACMSIGMODConf,1984:1-8. [6]Tobin J.Lehman,Michael J.Carey,A Study of Index Structures for MainMemory Database Management Systems[C].Proceedings of the TwelfthInternational Conference on Very Large databases,Kyoto,August,1986:294-303. [7]实时数据库技术[EB/OL].http://www.tongji.edu.cn/~yangdy/research.html.杨东援教授个人主页. 1 插入排序的算法思路 插入排序算法思想是: 对于待排序的n个记录 (R1, R2, … , Rn) , 假设第一个记录R1有序, 然后从第二个记录R2开始依次将其插入到前面的有序序列中。 每插入一个记录, 就在前面的有序序列中找到其合适的插入位置, 然后将其插入到该位置中, 而有序序列中的记录个数也就增加一个。 反复进行n-1 次插入, 使得整个序列完全有序。 插入排序的基本操作为:比较两个关键字和移动记录。如排序以升序为基准, 且初始关键字递增有序 (即正序) , 则每个记录的插入只需要一次关键字比较, 总的比较次数达到最小值n-1次。若初始关键字以非递增有序 (即逆序) , 则第i趟插入中关键字的比较次数为i。总的比较次数达到最大值。因此, 插入排序的时间复杂度为O (n2) , 且是稳定的。当n较小时, 排序的效率较高。 2 单向链表实现插入排序算法的原理 通过单向链表实现插入排序, 在关键字的比较次数上与顺序存储结构是一致的, 但在插入数据时不需要移动大量的结点, 而是通过对关键字所在结点进行删除、 插入操作, 来达到排序的目的。 而根据单向链表的特点, 其插入与删除操作均需要记住其前趋结点。 因此, 在每个新结点插入到有序序列中时, 需要注意以下5 点: (1) 要用指针记住有序序列的首结点和尾结点, 这是待插入记录的比较范围。 初始化时, 有序序列的首结点和尾结点均为第一个有效结点 (如果是含头结点的单向链表, 其第一个结点为无效结点) 。 (2) 在寻找新记录插入位置时, 从有序序列的首结点开始逐个比较, 直到找到合适的位置或者到有序序列的尾结点时结束。 但在每一次比较过程中需要记住其前趋结点, 因为当待插入结点插入到指定位置时, 需要用到其前趋结点。 (3) 每个即将插入的结点就是有序序列尾结点的后继结点。 因此, 待插入结点的前趋结点就是有序序列的尾结点 (在删除待插入结点时需要用到) 。 (4) 单向链表实现插入排序时, 要看链表是否是带头结点的单向链表, 如果是带头结点单向链表, 其有序序列的第一个结点是头结点之后的结点而非头结点。 其优点是在插入新结点时不需要考虑所插入结点是否为新的头结点。 (5) 当有序序列的尾结点的后继结点为空时, 排序结束。 3 单向链表对插入排序的实现 设链表的结点结构为: 3.1 不带头结点的单向链表实现插入排序 如图1 所示。 在本排序方法中, head为有序序列的首结点, tail为有序序列的尾结点。 v是待插入的新结点。 p, q为在有序序列中寻找v的插入位置时的指针, 其中p为寻找v的插入位置而进行顺序比较的结点, 而q则为其前趋结点。 3.2 带头结点的单向链表实现插入排序 如图2 所示, 在本排序方法中, head->next为有序序列的首结点, tail为有序序列的尾结点。 v是待插入的新结点。 p, q为在有序序列中寻找v的插入位置时的指针, 其中p为寻找v的插入位置而进行顺序比较的结点, 而q则为其前趋结点。本排序方法中单向链表含有一个无效首结点, 较前一种方法, 在插入新的结点时不需要考虑新插入结点位置是否为首结点。对于每个新结点的插入简化了1 次比较的次数, 所以对于待排序的n个记录, 共减少了n-1 次比较。 3.3 组装式插入排序方法 通过对前面两种插入排序方法的分析, 发现其排序过程的实现均是在同一链表中进行的, 理解起来比较抽象。 如果我们把原有待排序链表中的结点逐个取出, 插入到另外一个链表中, 从而组装成一个新的有序链表。 这样虽然是在比较次数和插入、 删除结点方面没有大的优化, 但从代码结构和理解思路上却有明显的突破。 在教学中学生更容易接受和理解。 从而达到良好的教学效果。 4 结语 单向链表是一种表广泛应用于动态存储的数据结构, 当前单向链表的排序算法普遍效率偏低, 通过对单向链表的特点及其插入、 删除技巧的应用, 以达到稳定的插入排序效果。相对于顺序存储的数据结构而言, 其移动结点的次数大大减少。 从而节约大量的时间。 其效果特别稳定可靠。 参考文献 [1]张福炎.程序员级高级程序员级程序设计[M].北京:清华大学出版社, 1996. [2]邵增珍.数据结构 (C语文版) [M].北京:清华大学出版社, 2012. [3][美]Mark Allen Weiss.张怀勇, 译.数据结构与算法分析—C++描述[M].北京:人民邮电出版社, 2007. [4]达文姣链式结构上排序算法的研究[J].电脑编程技巧与维护, 2011, 6. [5]蓝建平.插入排序算法的改进[J].福建电脑, 2007, 8. [6]王秋芬.一种针对任意整数序列的超“快速排序”算法研究[J].南阳理工学院学报, 2010, 02 (02) . [7]任志国.插入排序算法的双链表模拟[J].电脑编程技巧与维护, 2010, 6 (06) . 1 数据透视表 1.1数据透视表的数据源 若要创建数据透视表,要求数据源是较规则的数据,例如,表格的第一行是字段名称,字段名称不能为空;数据中最好不要有空白单元格或布局里不要有合并单元格;每个字段中数据的数据类型必须一致,数据越规则,数据透视表使用起来越方便。如果数据量较大时使用更能体现数据透视表的优势。 数据源可以来自于Excel工作簿,也可以是其他格式的数据源,例如,Access数据库、SQL Sever数据库、纯文本文件、OLAP联机事务处理等,如图1所示。 1.2创建数据透视表 数据透视表的格局类似于三维空间的立体效应,如图2所示,它可以动态地改变其版面布局,以便按照不同模式分析数据,也可以重新安排行标签、列标签和页字段(报表筛选)。每一次改变字段位置时,数据透视表会立即重新统计汇总数据。另外,如果原始数据发生更改,也可以更新数据透视表来反映变化。 数据透视表字段列表有四个区域: 报表筛选:添加字段到报表筛选区可以使该字段包含在数据透视表的筛选区域中,以便对其独特的数据项进行筛选; 列标签:添加一个字段到“列标签”区域可以在数据透视表顶部显示来自该字段的独特的值; 行标签:添加一个字段到“行标签”区域可以在数据透视表左边的整个区域显示来自该字段的独特的值; 数值:添加一个字段到“数值”区域,可以使该字段包含在数据透视表的数值区域中,并使用该字段中的值进行指定的计算,例如,求和、计数、平均值、最大值等。 若将字段拖动到“行标签”区域,则此字段中的每类项目会成为一行;若将字段拖动到“列字段”区域,则此字段种的每类项目会成为一列;若将字段拖动到“数值”区域,则会自动计算此字段的汇总信息;若将字段拖动到“报表筛选”区域,则可以根据此字段对报表实现筛选,也可以理解为水平面方向截取不同截面获取不同统计结果,一般就将较大范围的分类拖动到此区域,以实现报表筛选,如图3所示。 1.3数据透视表的布局 Excel 2013 提供了3 种布局样式,新样式“压缩布局”是用户的数据透视表的默认样式: 以压缩形式显示:默认情况下所有数据透视表都使用压缩布局,在这种布局中,行标签区域中的多个字段挤压到一列中,压缩形式适合使用“展开”和“折叠”图标;默认情况下汇总显示在每组的顶部; 以大纲形式显示:此显示使最外层的行字段填充第一列,其他的字段占据第二、三列等。若希望将数据透视表的数值复制到新的位置,这种布局比较合适;默认情况下汇总显示在每组的顶部; 以表格形式布局:是传统的显示方式,使用分类汇总出现在组的底部,若希望在后续分析中得到的汇总数据,表格形式的布局也许是最好的布局。 1.4数据透视表的值显示方式 默认的值显示方式是“普通”,Excel还提供了更多的显示方式,有:差异、百分比、差异百分比、按某一字段汇总、占同行数据总和的百分比、占同列数据总和的百分比、占总和的百分比、指数等。 2 数据透视表的操作 2.1 一般操作 1)数据透视表的格式化 为了修饰与美化数据透视表,即对字体、边框、填充等设置格式,方法类似于工作表单元格格式化的设置,包含自动套用格式、条件格式等,同时,Excel数据透视表工具也提供了其他方法来实现格式化,例如,在“设计”选项卡的“数据透视表样式”组; 2)数据透视表的排序 数据透视表具有排序功能,分:升序、降序、手动拖曳方法,数字和字母排序一般是按ASCII码的大小来排序;汉字默认情况下按拼音排序,也可以设置按笔画排序;若以上排序规则达不到需要,可以使用手动排序,达到所需要的排序结果。 3)数据透视表的刷新 更新数据透视表或数据透视图中的内容以便反映基本源数据改变而带来变化。 4)数据透视表的复制或移动 若需要使用同一数据源创建另一个数据透视表,只需要复制第一个生成的数据透视表即可,免去从头开始创建的一系列操作,以提高效率;另外可以在同一工作表中复制多个数据透视表,实现数据比较和对照等。 5)数据透视表的分组 Excel通过对数字、日期、文本等不同数据类型的数据项提供了多种组合方式,极大增加了数据透视表分类汇总的灵活性。 6)数据透视表的多个分类汇总项 若需要对同类数据实现不同的汇总方式,可以利用“字段设置”对话框的自定义功能实现,以便获得同类数据的平均值、总和、最大值等。 7)数据再透视 将数据源先按照大的分类字段单独创建数据透视表,然后将各个分类字段的数据透视表作为数据源再创建一个多重合并计算数据区域的数据透视表,以提供不同数据汇总结果。 2.2整理数据透视表字段 1)重命名字段 当建立数据透视表时,所建立的字段名称被Excel改名了,类似于“销售总额”修改为“求和项:销售总额”或“平均值项:销售总额”,使列宽增加,影响表格美观。如果用户需要修改为“销售总额”,会失败的,因为它已经是数据的字段名称,只要略有不同就可以,方法是单击此单元格,输入“销量总额”,依次修改其他字段名称。 2)删除字段 对不需要在数据透视表中显示的字段,可以选中字段名称,鼠标右击,在打开的快捷菜单中选择“删除‘字段名’”命令即可实现删除该字段。 3)隐藏字段标题 若不需要显示字段标题,可以通过“数据透视表工具”的“选项”选项卡里的“字段标题”命令实现。 4)折叠与展开字段 通过“数据透视表工具”的“选项”选项卡的“活动字段”组里的“展开整个字段”或“折叠整个字段”命令实现。 3 数据透视表的计算 数据透视表一旦建立后,不允许手工更改,例如,插入新的单元格,或者添加公式计算。实际上,如果增加了计算功能,数据透视表将具有更强的功能。在Excel提供了计算字段和计算项来实现。 3.1计算字段和计算项 计算字段是通过对数据透视表中现有的字段执行计算后得到的新字段,该字段使用用户创建的公式。计算字段可使用数据透视表中其他字段中的数据计算而生成。公式中不仅可以实现加、减、乘、除简单运算,还可以使用SUM、IF、AND、NOT、OR、COUNT、AVERAGE、TEXT等函数的复杂运算,但是不能使用单元格引用和名称。 计算项是在数据透视表的现有字段中插入新的项,通过对该字段的其他项执行计算后得到该项的值。 二者区别:计算字段是对不同列已有字段计算而添加的新字段;而计算项是对同一列中不同行的数据计算而添加的新项,即在同一字段中,不同项之间的运算而产生。 3.2数据透视表函数 数据透视表函数用于检索存储在数据透视表中的汇总数据。 语法:GETPIVOTDATA(data_field,pivot_table,field1,item1,field2,item2,...),其中: Data_field :包含要检索的数据的字段名称,用引号括起来; Pivot_table :用于决定哪个数据透视表含有要检索的数据,一般是数据透视表的左上角单元格地址; Field1,Item1,Field2,Item2 :用于描述要检索数据的字段名称和项名称,用引号引起来,可以按任何顺序排列,可以使用1 到126 对。例如,"[产品]","[产品].[所有产品].[食品].[烤制食品]" 通俗含义如图4所示: 3.3数据透视表的动态功能。 当生成数据透视表的数据源区域发生变化,例如,增删行或列的数据时,只要是数据区域连续的增删,也希望数据透视表随着新的数据源区域变化而变化,这就需要使用动态技术。这种技术就是利用函数定义名称,由名称代替改变的数据源区域。 4 数据分析案例 这是一个公司2011 年1 至6 月份各部门采暖费、电费、水费等项目使用情况数据表,如图5 所示是部分数据,针对这个数据表,进行各部门费用使用情况分析,了解变化趋势等。 我们需要创建两个数据透视图和相关切片器,如图6 所示,通过切片器选择单个或多个费用或部门,以获取不同费用在不同部门的情况、变化趋势或结构。 利用数据透视表和数据透视图实现数据分析,方便简捷,易于掌握,对初学者更加容易上手。(由中国青年政治学院资助) 摘要:利用Excel数据透视表或数据透视图这类数据分析工具实现数据分析,是一种易学、简捷的平台,也是快速分析数据的工具,随着Excel版本更新,将具有更强大的数据分析能力。 关键词:传输表空间,Oracle数据库,升级 1 引言 各医院医疗业务的飞速发展,给信息中心的数据库服务器带来越来越大的压力,许多医院早期部署的硬件和Oracle数据库服务器因负载过重、处理能力不足等,性能和稳定性面临严重挑战,严重者频繁出现宕机事故,影响医疗业务的正常运转。随着Oracle服务器软件新版本的出现、成熟和硬件性能、性价比的不断提升[1],在提升硬件和操作系统的同时升级Oracle数据库成为多数医院的必然选择。虽然Oracle公司提供了多种升级方法以供选择[2],但由于HIS服务器是724 h运行的系统,不能长时间停机。通过研究比较认为Oracle的exp/imp工具的Transportable Tablespace(TTS)技术非常适合这种要求停机时间短的数据库升级。 2 传输表空间 在exp-help的帮助中,可以看到参数transport_tablespace导出可传输的表空间的元数据(N)。通过这个选项,可对一组自包含、只读的表空间只导出元数据,然后在操作系统层将这些表空间的数据文件拷贝至目标平台,并将元数据导入数据字典,这个过程称为插入(plugging),即完成数据迁移[3]。 2.1 传输表空间简介 传输表空间操作流程,如图1所示。 (1)在源数据库中,先通过exp操作,并设置transport_tablespace参数为yes。在此方式下,Oracle并没有进行真正的数据库卸载操作,而是将源数据库表空间的数据字典信息卸载为一个dmp文件。所有“军卫一号”表空间同时导出时才10 MB,所以,exp操作很快完成。 (2)通过操作系统级FTP,或者rcp等命令,将该源数据库用户表空间对应的数据文件连同上述dmp文件,传输到目标数据库中[4]。 (3)在目标数据库中,通过imp命令,根据imp文件信息,将传输过来的数据文件直接挂接到目标库中。 2.2 传输表空间的技术优势 在上述的3个步骤中,最消耗时间和资源的只有第2步的数据传输,因为其他升级技术全部是逻辑级的记录传输,而表空间传输则是物理级的整个文件传输。因此,使用TTS技术能够在数据库之间高速传输数据[5]。 2.3 自包含表空间 对于可传输表空间有一个重要概念:自包含(self_contained)。在表空间传输中,要求表空间是自包含的,含义是用于传输的内部表空间集没有引用指向外部的表空间集。常见的以下情况是违反自包含原则的。 (1)索引在内部表空间集,而表在外部表空间集(相反,如果表在内部表空间集,而索引在内部表空间集,则不违反)。 (2)分区表一部分在内部表空间集,一部分在外部(对于分区表,要么全部包含在内部表空间集中,要么全不包含)。 (3)如果在传输表空间的同时传输约束,而约束指向的表在外部表空间集,则违反自包含约束;如果不传输约束,则与约束指向无关。 (4)表在内部表空间集,而LOB列在外部表空间集,则违反自包含约束。 鉴于以上要求,在执行表空间传输前一定要先进行自包含检查。 3 升级过程介绍 3.1 升级准备 (1)如前文所述使用TTS必须先进行自包含检查,检查所要传输的表空间是否符合自包含特性,这个步骤使用系统包DBMS_TTS,验证分2种方式,非严格方式和严格方式。以下是一个简单的验证,假定TEST用户在TEST表空间有个表emp_info,其索引存储于users表空间: 执行严格自包含检查(full_check为true) 但是对于多个表空间联合检查,则自包含问题可以解决。在“军卫一号”数据库系统升级中,采用所有用户表空间同时检查,大多可以通过,执行检查语句类似: 上述语句中应包含所有要传输的表空间,而后执行: SQL>SELECT*FROM TRANSPORT_SET_VIOLATIONS; 检查结果,如果还出现违反自包含的情况,则要予以解决。例如,有些用户表的索引建立在系统表空间中,那就要删除掉,再建立在用户表空间中,直到自包含检查完全通过。 (2)因为使用TTS技术,并不是所有的模式对象都能传输,因此对这些不能传输的模式对象就需要人工传输,因为这些对象一般都很小,需要时间很少,为方便使用需事先在源数据库端导出用户、角色、用户授权、同义词、过程、序列、视图等,并生成相应的脚本文件,以备正式升级时使用。 3.2 正式升级步骤 (1)源数据库的所有用户表空间置于只读状态。 执行alter tablespace tsp_acct read only; alter tablespace tsp_bldbank read only; alter tablespace tsp_card read only等。 这一步最好也事先编好脚本一次执行完毕。 (2)在源数据库用数据泵导出元数据。 创建directory (3)安装目标数据库Oracle11g R2,并创建一空白数据库实例,注意参数文件的设置。 (4)为减少通过网络传送数据文件的时间,在传送前可以对文件进行压缩,再通过ftp或rcp等方式把要传输的表空间的数据文件和导出的dmp文件传送到目标数据库中(完成物理传送)。 (5)运行事先编制好的脚本,在目标数据库创建用户、给用户授权,创建角色、同义词。 (6)开始导入元数据,执行以下命令。 注意上述命令中数据文件的路径是目标数据库的路径,可能与源数据库数据文件路径不一致。排除exclude=transportable_export/table_statistics,不导入表统计信息是为了避免bug。这一步骤的实质是把传送的文件挂接到表空间中去,是最关键的一步。 (7)执行脚本使用户表空间为可读写状态。 (8)在目标数据库上创建序列、视图、存储过程。 (9)做一次数据库脱机全备份。 4 需要注意的几个问题 (1)源数据库和目标数据库的数据库字符集和国家字符集必须一致,否则无法导入。 (2)早期版本源数据库用户默认表空间可能还是SYSTEM表空间,临时表空间可能还是固定表空间,而不是临时表空间。这些在编制建立用户的脚本时要一并予以修改。 (3)凡是传输表空间无法传输的模式对象,如序列、视图,一定要事先从源数据库导出,并编制成sql脚本,不要遗漏任何一个对象。 (4)整个过程必须在非生产环境下反复多次试运行。测试脚本能否正常运行,对问题脚本反复修改。检验数据能否正常导入,数据能否正常传送,并且对每一步骤进行精确计时。 (5)连接客户端工作站进行应用软件运行测试,所有应用程序都要测试到。 5 结语 通过以上过程,我院顺利完成了“军卫一号”数据库从O-racle9i到Oracle11g的升级,因我院规模不大,整个数据库不超过12 GB,导入过程仅用220 s。再加上数据文件拷贝的时间和运行脚本的时间,整个过程不超过15 min,数据库系统就可以启动运行了。而同样规模的数据我们在模拟环境用传统的exp/imp导出全部数据方式进行,时间至少需要1.5 h,效率高低,显而易见。 用此方案,我们还完成了本院的在线交易数据库到数据挖掘数据库的定期迁移,简单快捷,对于大型海量数据库,这个迁移方案优势更加明显,该方案中最消耗时间的环节为源数据库到目标数据库的FTP文件传输操作,这个主要取决于网络的传输速度,而在数据库层面,所有操作都是数据字典操作,而数据字典都很小,综合起来当然比起其他迁移方案的SQL语句级逻辑操作效率要高出很多,这也是Oracle极力推荐的海量数据迁移方式。 参考文献 [1]郭平采,张庆丰,朱有存.“军卫一号”实现Oracle8i到Oracle10g升级方法[J].医疗卫生装备,2011,32(3):52-54. [2]梁昌明,袁功智,秦占伟,等.Oracle数据库升级或迁移的方法探讨[J].医疗卫生装备,2008,29(1):35-37. [3]盖国强.循序渐进Oracle数据库管理、优化与备份恢复[M].北京:人民邮电出版社,2007:37-38. [4]罗敏.品悟性能优化[M].北京:清华大学出版社,2011:254-259. 一、从动词的性质来区分 英语中的不及物动词不用于被动语态,但是,不及物动词的过去分词可以和动词be连用构成系表结构。在这个结构中,过去分词只表示动作已经完成,强调事物的状态。常见的这种不及物动词有:gone, come, arrived, fallen, retired, mistaken等,这些不及物动词都具有描述性质。例如: Her fever is gone, but she still feels weak. I shall be vexed if you keep mentioning it. The interviewer was quite mistaken about the incidents which happened in the campus. 注意 如果构成分词的动词是一个持续性动词,不表示终极界限,不表示动作结果,而强调动作的持续性,在这种情况下谓语大多数是被动语态。例如: All the books were carried to the library. Several students were honoured for their excellent performance in the English contest. 二、从句子表达的内容来区分 被动语态表示动作,句子的主语是动作的承受者;系表结构中的过去分词已基本上失去了动词的意义,只起到一个形容词的作用,在句子中作表语,说明主语的性质,或所具有的特征或所处的状态。例如: The houses were beautifully decorated. (系表) The houses were decorated and rented to those who were badly in need of shelter. (被动) The book is not illustrated. (系表) The book was illustrated by a famous artist. (被动) 三、从-ed分词后所跟的介词来区别 作形容词用的-ed分词在个别情况下,可以跟除by以外的其他介词。如: about, at, in, on, with, over, to等。例如: I’m interested in my own hobbies, such as collecting stamps, raising birds and fishing. (系表) I was interested by what you showed me. (被动) The people present at the meeting were annoyed with the tedious speech. (系表) The people who wanted to attend the meeting were surprised by the announcement of the adjournment without day. (被动) 四、从修饰词来区分 1.过去分词具有形容词性质,因此可用程度副词more, quite, rather, very等修饰。凡是能用这类副词修饰的过去分词多为系表结构。例如: Her look was quite amused. After working the whole morning, we were very tired. 2.如果-ed分词的结构中由时间状语、地点状语、原因状语或方式状语来修饰整个句子,表示动作的持续性、反复性,这时这个句子就是被动语态。例如: The dam is completed. (系表) The dam had been completed within two months. (被动) He was wounded. (系表) He was wounded in the battle. (被动) 五、通过时态来区分 系表结构中的动词be为系动词,多用于一般现在时和一般过去时,偶尔也可见到一般将来时和现在完成时。而在被动语态结构中的动词be是助动词,除了很少用于完成进行时和将来完成时之外,可以用各种时态。例如: I shall be much obliged to you for an early reply. (系表) The house is being built by the river.(被动) 另外从时态方面考虑,区分被动语态和系表结构时,可用“还原”的方法。看能否将“be+过去分词”形式还原为对应的主动语态。如果是被动语态,它的时态要与相应的主动结构一致;如果是系表结构,一般没有对应时态的主动结构。例如: My window is broken. (这个句子是系表结构,此句没有对应时态的主动句。不能还原为 Some one breaks the window.) A lot of new cars have been made since the technical innovations have been adopted. (此句是被动语态。可以将这个句子还原为We have made a lot of cars since we adopted the technical innovations.) 六、从动词be能否被替代来区分 被动语态一般由助动词be+ed分词构成;系表结构除了与be连用之外,还可以用其他动词替换,能被替换的词有:become, get, turn, sound, rest, lie, look, keep, remain, seem, appear等。例如: You may rest assured that everything possible will be done. He appeared perplexed at the thought of the future. 以上几个例句中的rest, appear替换了be,我们可以认定该句是系表结构。如不能替换就是被动结构。 【练习】 1. The scientist____________(陷入了沉思), and didn’t notice what was going on around him. (lose) 2. He was lying on the grass with (眼睛盯着一张照片). (fix) 3. Our school,____________ (用现代化机械装备的), is famous for its wonderful products. (equip) 4. As we all know, their factory (坐落在山脚下). (locate) 5. Simon____________ (沉浸在书中) that he didn’t even notice me come in. (absorb) 6. We started a project____________ (旨在改善生活条件的). (aim) 7. We are curious to know whether the official____________ (涉及此案). (involve) 8. They are very pleased that we (关心他们的教育情况). (concern) 9. Some parents complain that their children____________ (家庭作业繁重). (burden) 10. ____________ (下岗两年了), the couple couldn’t afford their children’s schooling. (lay) 【参考答案】 1. was lost in thought/thinking 2. his eyes fixed on a photo 3. equipped with modern machinery equipment 4. is located in the foot of the mountain 5. was so absorbed in the book 6. aimed at improving living conditions 7. involved in this case 8. may be concerned about their education 9. are burdened with heavy homework 通常在数据库系统中,事务是工作的离散单位。联机事务处理系统(OLTP)实时地采集处理与事务相连的数据以及共享数据库和其他文件的位置变化信息。在联机事务处理中,事务是被立即执行的。这与批处理相反,一批事务被存储一段时间,然后再被执行,大多数批处理是在夜间进行的。联机事务处理的结果可以在数据库中立即获得,并以实时的方式发生。医院信息系统(HIS)中的大量应用都是OLTP的典型应用,其重要特征就是并发的用户多,要求响应速度快。随着计算机与通信技术的快速发展,HIS的应用也越来越广泛,用户数剧增,数据量暴涨,随之而来的性能问题愈发突出。 Oracle 11g数据库[1,2]引入了一个新的特性OLTP表压缩,所谓OLTP表压缩就是允许在任何类型的数据操作过程中对数据进行压缩,例如通常的数据操纵语言(DML)的插入、更新、删除等。除此之外,表压缩减少了写操作的相关压缩开销,使之适用于OLTP业务模型的应用环境。 1.1 OLTP表压缩 Oracle数据库的OLTP表压缩专门设计了一个“唯一”(Unique)压缩算法来处理OLTP应用程序。该算法通过消除同一个数据库块内重复的值(这些值可以是跨越不同列的)来达到压缩的目的。压缩过后的块包含一个称为符号表的结构来保持压缩的原数据。当数据库块被压缩的时候,首先在符号表中为重复值添加一个副本,然后将这个重复值删除,这样每一个重复的值都可以被一个指向符号表中对应条目的一个更短的引用所替代。 该算法的革新性在于,压缩后的数据在数据库块内是独立的,那些用于将压缩后的数据恢复到其原始状态的原数据也存储在对应数据库块中。与那些在全局数据库上维护一个符号表的压缩算法比较,这个独特的设计因为在访问压缩数据的时候不用引进额外的I/O开销而显著提升了性能。 1.2 OLTP表压缩的益处 在给定环境下获得的压缩比率取决于给定的数据的自身性质,特别是数据自身的基数,如某数据的基数只有0~9这10个数字,显然在同样情况下相对于基数为0~100的数据,其占用空间少,压缩效果好。 OLTP表压缩,不仅仅在于节省磁盘存储空间,一个显著的优势是,在不事先对数据块进行解压缩就可以直接读取压缩数据块的内容。因此,也就不会因为访问压缩数据而使性能大幅降低。相反的,由于要访问的数据块数目少了,从而降低了I/O开销,也会提高性能。 1.3 最小化性能开销 OLTP表压缩对读取数据没有产生任何影响,而在写数据(即压缩数据)的时候必须做额外的工作,所以写操作的性能开销是不可避免的,因此,Oracle数据库采用批处理模式压缩块而不是每有一个写操作就进行数据的压缩。刚被初始化的数据块在达到数据块内部控制的阈值(80%)之前并不压缩。当一个事务导致数据块内部达到设定的阈值之后,数据块内部所有的内容都被压缩,这时数据块内数据量会低于阈值,如果之后的某个事务再次导致数据块内部达到设定的阈值之后就再次对整个数据块进行压缩。重复执行这个过程,直到Oracle数据库认为进一步压缩不会获得合适的收益为止。在整个过程中,只有触发块压缩的事务就会有轻微的压缩开销,因此,大多数的OLTP事务的性能在压缩与未压缩的数据块上基本相同。 2 评测试验目的 在我院的HIS应用中,每天都会不断产生的大量数据,这些数据占用了大量的磁盘存储空间,这也是物理I/O繁忙影响性能的重要因素,如果能够利用Oracle11g数据库提供的面向OLTP应用的表压缩技术,势必会在改善数据库应用的性能方面带来好处。本次试验的主要目的是应用实际数据来评测Oracle 11g数据库表压缩技术在压缩完成之后对数据库性能有多大影响,数据的压缩比是多少。通过对未压缩的表和压缩过的表分别进行查询和更新操作,对比压缩表与未压缩表的执行计划,记录两种表对这些操作的所需时间,量化两者联机事务处理操作对数据库性能的影响。另一方面,在试验过程批量导入数据的同时,对比数据批量导入到未压缩表及压缩表的所需时间,量化两者批量操作对数据库性能[3,4,5]的影响。 3 评测试验设计及环境 3.1 评测试验设计 (1)在同一台数据库服务器上进行试验。为了准确地反映出压缩表与未压缩表之间在查询及更新方面的性能差异,需要在相同的环境下执行操作并记录时间,为了保证试验的准确性,我们用同一台服务器进行试验。 (2)在相同的数据库内存环境下进行试验。为了保证试验的公平性,在每次查询及更新操作之前,需要清除数据库高速缓存及共享池里的数据。 (3)记录操作时间。为保证压缩表和未压缩表操作比较的准确性,在每次执行查询和更新操作前后,都记录系统时间。 (4)模拟真实数据。为了更能反映评测的真实性,本次试验的表结构及数据采用在用HIS的病人生命体征数据采集表。 3.2 评测试验环境[6,7] 本次试验用的服务器是一台4核的PC机,具体配置为:主机Dell Vostro 260,CPU为Intel(R)Core(TM)i5-2400CPU@3.10GHz,内存4G,操作系统为Microsoft Windows 7旗舰版Service Pack 1,数据库版本为Oracle Database 11g Enterprise Edition Release 11.2.0.1.0-64bit。 4 评测试验过程 对比试验过程如下:(1)创建试验表结构,包括非压缩表和压缩表;(2)批量数据导入操作,首先向未压缩表中导入700万行数据,记录导入所需的时间及占用的数据块个数,然后向压缩表中同样导入这700万行数据,记录导入所需的时间及占用的数据块个数,对比两种方式的性能差异;(3)在没有索引的环境中,执行更新操作,对比两种方式的性能差异;(4)创建索引;(5)在有索引的环境中,执行更新操作,对比两种方式的性能[6,7]差异;(6)查询操作,对压缩表和未压缩表分别进行全表扫描和普通查询,对比两种方式的性能差异。 5 评测试验结果及分析 通过本次试验记录,得到压缩表与未压缩表的各项试验操作的执行时间,综合对比数据汇总,见表1。 从表1数据的对比可以看出,在相同的试验环境下,对于批量插入操作,压缩表比未压缩表慢92.59 s,性能降低了76.62%;对于全表扫描操作,压缩表比未压缩表快1.17 s,性能提升了1倍;对于空间占用数据量,压缩表比未压缩表少占用23789个数据块,空间占用率下降111%;对于数据更新操作和数据查询操作,不论加还是不加索引,压缩表与未压缩表在时间上相差不大,由此可见,两种表对于数据更新操作和数据查询操作无明显差异。 6 评测小结 OLTP表压缩功能是Oracle 11g数据库的新特性,当执行批量插入数据的同时,对表数据进行压缩,试验结果表明,表压缩对批量插入操作的性能影响比较大,导致性能明显下降,而对于数据的查询与更新操作,数据压缩与不压缩,基本无明显差异,而对于全表扫描的查询操作,由于压缩表占用的数据块减少1倍,由此使得查询性能可以提升1倍。 通过试验证明,HIS中大型联机事务处理的应用数据,可以考虑利用Oracle 11g数据库的新特性,采用OLTP表压缩技术,在不影响运行性能的前提下,尽可能减少数据的磁盘占用空间,从而获得数据库性能进一步改善的好处。 摘要:目的 使用量化指标,对比压缩表和非压缩表的查询及更新操作性能进行评测,为大型联机事务处理的数据库应用做技术准备。方法 进行实验设计,创建量化平台,分别在压缩与非压缩的数据表上执行特定的数据操纵语句及查询语句,生成结构化查询语言(SQL)数据库执行计划,记录运行时间及结果并进行对比。结果 压缩表的空间占用较未压缩表降低1倍多,全表扫描操作的性能提升1倍,而压缩表与未压缩表的数据更新操作和查询操作性能无明显差异。结论 联机事务处理的大型应用,可以利用Oracle11g数据库的新特性,采用OLTP表压缩技术,既不影响操作响应时间还可以明显降低磁盘占用空间,从而获得改善数据库性能的好处。 关键词:Oracle数据库,SQL,表压缩技术,HIS 参考文献 [1]刘志敏.Oracle数据库应用管理解决方案[M].北京:电子工业出版社,2002. [2]Thomas Kyte.Oracle Database9i/10g/11g编程艺术:深入数据库体系结构[M].2版.北京:人民邮电出版社,2011. [3]马锡坤.基于Oracle的在线式应用容灾系统的建立[J].中国医疗设备,2012,27(2):38-40. [4]巢子杰.Oracle数据库优化探究[J].软件导刊,2010,(2):142-144. [5]魏亚楠,宋义秋.Oracle数据库应用系统的性能优化[J].2010,(8):204-206. [6]Oracle Database SQL Language Reference 11g Release 2(11.2)E10592-02[EB/OL](2001-11-01)[2009-08-02].http://docs.oracle.com/cd/E14072_01/server.112/e10592.pdf.数据库表结构设计 第6篇
数据库表结构设计 第7篇
数据库表结构设计 第8篇
数据透视表实现数据分析 第9篇
数据库表结构设计 第10篇
易被混淆的系表结构和被动结构 第11篇
数据库表结构设计 第12篇