当前位置:文档之家› 数据库培训课程word版

数据库培训课程word版

数据库培训课程word版
数据库培训课程word版

数据库

数据库由包含数据的表集合和其它对象(如视图、索引、存储过程和触发器)组成,目的是为执行与数据有关的活动提供支持。存储在数据库中的数据通常与特定的主题或过程(如生产仓库的库存信息)相关。

SQL Server 能够支持许多数据库。每个数据库可以存储来自其它数据库的相关或不相关数据。例如,服务器可以有一个数据库存储职员数据,另一个数据库存储与产品相关的数据。另一种方案是,一个数据库可以存储当前客户的订单数据,而另一个相关的数据库可以存储用于年度报告的历史客户订单。

在创建数据库之前,理解数据库的各组成部分及其设计方法,以确保实现数据库后,数据库能很好地运行是很重要的。

数据库的组成

表是包含数据库中所有数据的数据库对象。表定义为列的集合。与电子表格相似,数据在表中是按行和列的格式组织排列的。每行代表唯一的一条记录,而每列代表记录中的一个域。例如,在包含公司雇员数据的表中每一行代表一名雇员,各列分别表示雇员的详细资料,如雇员编号、姓名、地址、职位以及家庭电话号码等

数据库表的特性

在关系数据库设计理论中,规范化规则指出了在设计良好的数据库中必须出现或不出现的某些特性。关于规范化规则的完整讨论不属于本主题的范畴。不过,有几个可帮助获得合理的数据库设计的规则:

表应该有一个标识符。

数据库设计理论的基本原理是:每个表都应有一个唯一的行标识符,可以使用列或列集将任何单个记录同表中的所有其它记录区别开来。每个表都应有一个 ID 列,任何两个记录都不可以共享同一 ID 值。作为表的唯一行标识符的一列或多列是表的主键。

表应只能存储单一类型实体的数据。

试图在表中存储过多的信息会妨碍对表的数据进行有效、可靠的管理。在SQL Server 2000 的pubs 数据库中,书名和出版商的信息存储在两个独立的表内。尽管在titles 表中同时创建书籍及其出版商的信息列是可能的,但是这种设计会导致几个问题。必须为出版商出版的每本书添加并存储出版商信息,而这是没有必要的,并且会占用数据库中的额外存储空间。

如果出版商的地址更改了,则必须对每本书进行更改。出版商的最后一本书从标题表中删除后,该出版商的信息就会丢失。

在pubs数据库中,书和出版商的信息存储在titles和publishers表中,有关出版商的信息只须输入一次,然后即链接到每本书上。当出版商信息更改时,只需要在数据库中的一个地方进行更改,即使该出版商在数据库中没有书,出版商信息仍然存在。

表应避免可为空的列

表中的列可定义为允许空值。空值表示没有值。尽管在个别情况下,允许空值有用,但是最好少用空值,因为空值需要进行特殊的处理,这样会增加数据操作的复杂性。如果某一表中有几个可为空的列,并且列中的几行有空值,则应考虑将这些列置于链接到主表的其它表中。将数据存储在两个独立的表中使主表的设计更为简单,但能够满足存储空值信息的偶尔需要。

表不应有重复的值或列

数据库中某一项目的表不应包含特定信息的值列表。例如,pubs数据库中的书可以是合著的。如果在titles表中有一列是作者的名称,这就会出现问题。一种解决方法是:在列中存储两位作者的姓名,但这样会很难显示单个作者的列表。另一种解决方法:是更改表的结构,为第二位作者的姓名添加另一列,但这只能包含两位作者。当然,如果一本书有三位作者,则必须再添一列。

索引

数据库中的索引与书籍中的索引类似。在一本书中,利用索引可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是一个表中所包含的值的列表,其中注明了表中包含各个值的行所在的存储位置。可以为表中的单个列建立索引,也可以为一组列建立索引;索引采用 B 树结构。索引包含一个条目,该条目有来自表中每一行

的一个或多个列(搜索关键字)。B 树按搜索关键字排序,可以在搜索关键字的任何子词条集合上进行高效搜索。例如,对于一个

A、B、C 列上的索引,可以在 A 以及A、B和A、B、C 上对其进行高效搜索

数据库索引的特性

计索引时还要考虑的其它准则包括:

?一个表如果建有大量索引会影响 INSERT、UPDATE 和 DELETE 语句的性能,因为在表中的数据更改时,所有索引都须进行适当的调整。另一方面,对于不需要修改数据的查询(SELECT 语句),大量索引有助于提高性能,因为 SQL Server 有更多的索引可供选择,以便确定以最快速度访问数据的最佳方法。

?覆盖的查询可以提高性能。覆盖的查询是指查询中所有指定的列都包含在同一个索引中。例如,如果在一个表的a、b和c列上创建了组合索引,则从该表中检索a 和b列的查询被视为覆盖的查询。创建覆盖一个查询的索引可以提高性能,因为该查询的所有数据都包含在索引自身当中;检索数据时只需引用表的索引页,不必引用数据页,因而减少了 I/O 总量。尽管给索引添加列以覆盖查询可以提高性能,但在索引中额外维护更多的列会产生更新和存储成本。

?对小型表进行索引可能不会产生优化效果,因为 SQL Server 在遍历索引以搜索数据时,花费的时间可能会比简单的表扫描还长。

?应使用 SQL 事件探查器和索引优化向导帮助分析查询,确定要创建的索引。为数据库及其工作负荷选择正确的索引是非常复杂的,需要在查询速度和更新成本之间取得平衡。窄索引(搜索关键字中只有很少的列的索引)需要的磁盘空间和维护开销都更少。而另一方面,宽索引可以覆盖更多的查询。确定正确的索引集没有简便的规则。经验丰富的数据库管理员常常能够设计出很好的索引集,但是,即使对于不特别复杂的数据库和工作负荷来说,这项任务也十分复杂、费时和易于出错。可以使用索引优化向导使这项任务自动化。

SQL Server 执行一个语句,在employee表中根据指定的emp_id值查找数据时,它能够识别emp_id列的索引,并使用该索引查找所需数据。如果该索引不存在,它会从表的第一行开始,逐行搜索指定的emp_id值。

SQL Server 为某些类型的约束(如 PRIMARY KEY 和 UNIQUE 约束)自动创建索引。可以通过创建不依赖于约束的索引,进一步对表定义进行自定义。

不过,索引为性能所带来的好处却是有代价的。带索引的表在数据库中会占据更多的空间。另外,为了维护索引,对数据进行插入、更新、删除操作的命令所花费的时间会更长。在设计和创建索引时,应确保对性能的提高程度大于在存储空间和处理资源方面的代价。

视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。

着重于特定数据

视图让用户能够着重于他们所感兴趣的特定数据和所负责的特定任务。不必要的数据可以不出现在视图中。这同时增强了数据的安全性,因为用户只能看到视图中所定义的数据,而不是基础表中的数据。有关出于安全考虑使用视图的更多信息,请参见使用视图作为安全机制。

简化数据操作

视图可以简化用户操作数据的方式。可将经常使用的联接、投影、联合查询和选择查询定义为视图,这样,用户每次对特定的数据执行进一步操作时,不必指定所有条件和限定。例如,一个用于报表目的,并执行子查询、外联接及聚合以从一组表中检索数据的复合查询,就可以创建为一个视图。视图简化了对数据的访问,因为每次生成报表时无须写或提交基础查询,而是查询视图。有关数据操作的更多信息,请参见查询基础知识。

还可以创建内嵌的用户定义函数,在逻辑上作为参数化视图运行,或作为在WHERE 子句搜索条件中含有参数的视图运行。有关更多信息,请参见内嵌用户定义函数。

自定义数据

视图允许用户以不同的方式查看数据,即使他们同时使用相同的数据时也如此。这在具有不同目的和技术水平的用户共享同一个数据库时尤为有利。例如,可定义一个视图以仅检索由客户经理处理的客户数据。视图可以根据使用该视图的客户经理的登录 ID 决定检索哪些数据。

导出和导入数据

可使用视图将数据导出至其它应用程序。例如,可能希望使用pubs 数据库中的stores和sales表在Microsoft? Excel 中分析销售数据。为此,可创建一个基于stores和sales表的视图。然后使用bcp实用工具导出由视图定义的数据。也可使用bcp实用工具或 BULK INSERT 语句将数据从数据文件中导入某些视图,条件是可以使用 INSERT 语句在视图中插入行。有关向视图中复制数据的限制的更多信息,请参见 INSERT。有关使用bcp实用工具和 BULK INSERT 语句从(或向)视图中复制数据的更多信息,请参见向(或从)视图中复制数据。

存储过程

在使用Microsoft? SQL Server? 2000 创建应用程序时,Transact-SQL 编程语言是应用程序和 SQL Server 数据库之间的主要编程接口。使用

Transact-SQL 程序时,可用两种方法存储和执行程序。可以在本地存储程序,并创建向 SQL Server 发送命令并处理结果的应用程序;也可以将程序在 SQL Server 中存储为存储过程,并创建执行存储过程并处理结果的应用程序。

SQL Server 中的存储过程与其它编程语言中的过程类似,原因是存储过程可以:?接受输入参数并以输出参数的形式将多个值返回至调用过程或批处理。

?包含执行数据库操作(包括调用其它过程)的编程语句。

?向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因)。

可使用 Transact-SQL EXECUTE 语句运行存储过程。存储过程与函数不同,因为存储过程不返回取代其名称的值,也不能直接用在表达式中。

使用 SQL Server 中的存储过程而不使用存储在客户计算机本地的

Transact-SQL 程序的优势有:

?允许模块化程序设计。

只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。

?允许更快执行。

如果某操作需要大量 Transact-SQL 代码或需重复执行,存储过程将比

Transact-SQL 批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程的内存中版本。每次运行

Transact-SQL 语句时,都要从客户端重复发送,并且在 SQL Server 每次执行这些语句时,都要对其进行编译和优化。

?减少网络流量。

一个需要数百行 Transact-SQL 代码的操作由一条执行过程代码的单独

语句就可实现,而不需要在网络中发送数百行代码。

?可作为安全机制使用。

即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限。

其它概念

联机事务处理

联机事务处理数据库应用程序最适合于管理变化的数据,通常,这种应用程序有大量的用户同时执行更改实时数据的事务。尽管用户对数据的单个请求一般只引用少量记录,但是,这些请求有许多是同时发生的。这些类型的数据库的常见例子是航空订票系统和银行事务系统。在这种类型的应用程序中,主要关心的是并发性和原子性。

数据库系统中的并发性控制确保两个用户不能更改同一数据,或者一个用户不能在另一个用户对数据操作完成之前对其进行更改。例如,如果您正在与一位航空订票代理联系预订某航班上最后一个可用座位,该代理开始用您的姓名进行座位的预订处理,这时,其他代理应该不能再告诉其他乘客还可以预订该座位。

原子性确保事务中包括的所有步骤都作为一个组成功地完成。如果一个步骤失败,则不应完成其它步骤。例如,某个银行事务可能包括两个步骤:从您的支票帐户中取出资金,然后将其放入您的存款帐户中。如果从您的支票帐户中成功地移走了资金,就需要确保将该资金放入您的存款帐户中或重新放回到您的支票帐户中。

联机事务处理设计注意事项

事务处理系统数据库应设计为支持:

?很好的数据放置。

对于 OLTP 系统,输入/输出瓶颈是一个尤为关心的问题,原因在于修改

整个数据库中数据的用户很多。确定数据的可能访问模式,并将经常访问

的数据放在一起。在此过程中,可辅以文件组和 RAID(独立磁盘冗余阵

列)系统。

?缩短事务以将长期锁减至最少,提高并发性。

在事务期间,避免用户交互。无论何时,只要有可能,就通过执行单个存

储过程来处理整个事务。在事务内对表的引用顺序可能会影响并发性。将对经常访问的表的引用置于事务的末尾,以便将控制锁的持续时间减至最短。

?联机备份。

OLTP 系统通常的特征是连续操作(一天 24 小时,一周 7 天),为达到此目的,停工时间要保持绝对最短。尽管Microsoft? SQL Server? 2000 可以在数据库正在使用时对其进行备份,但是应将备份过程安排在活动不频繁时进行,以使对用户的影响减至最小。

?数据库的高度规范化。

尽可能减少冗余信息以提高更新的速度,从而提高并发性。减少数据还可

以提高备份的速度,因为只需要备份更少的数据。

?很少或没有历史或聚合数据。

可以将很少引用的数据归档到单独的数据库中,或者从经常更新的表中移出,并置于仅含历史数据的表中。这将保持表尽可能地小,从而缩短备份时间,改善查询性能。

?小心使用索引。

每次添加或修改行时,必须更新索引。若要避免对经常更新的表进行过多

的索引,索引范围应保持较窄。请用索引优化向导设计索引。

?OLTP 系统需要最佳的硬件配置以处理较大并发用户数目和快速响应时间。

决策支持

决策支持数据库应用程序最适合于不更改数据的数据查询。例如,公司可以定期地按日期、销售地区或产品汇总其销售数据,并将该信息存储在单独的数据库中

以供高级管理人员进行分析。若要作出业务决策,用户必须能够根据各种准则,通过查询数据快速地确定销售趋势。然而,他们不必更改这些数据。决策支持数据库中的表建立了大量索引,原始数据通常要进行预处理,并对其进行组织以支持将要使用的各种类型的查询。因为用户并不更改数据,并发性和原子性问题不必考虑;数据仅定期更改,在非工作时间和低流量时间对数据库进行大容量更新。

决策支持设计注意事项

决策支持系统数据库应设计成可以支持:

?大量索引。

决策支持系统只需要很少的更新,但数据量很大。可使用大量索引提高查询性能。

?数据库的非规范化。

引入预聚合或汇总数据以满足常见的查询要求,缩短查询响应时间。

?使用星型架构或雪花架构来组织数据库内的数据

数据仓库的概念及特点

数据仓库概念始于本世纪80年代中期,首次出现是在号称“数据仓库之父”William H.Inmon的《建立数据仓库》一书中。随着人们对大型数据系统研究、管理、维护等方面的深刻识认和不断完善,在总结、丰富、集中多行企业信息的经验之后,为数据仓库给出了更为精确的定义,即“数据仓库是在企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合”。

数据仓库并没有严格的数学理论基础,也没有成熟的基本模式,且更偏向于工程,具有强烈的工程性。因此,在技术上人们习惯于从工作过程等方面来分析,并按其关键技术部份分为数据的抽取、存储与管理以及数据的表现等三个基本方面。

⑴数据的抽取:数据的抽取是数据进入仓库的入口。由于数据仓库是一个独立的数据环境,它需要通过抽取过程将数据从联机事务处理系统、外部数据源、脱机的数据存储介质中导入到数据仓库。数据抽取在技术上主要涉及互连、复制、增量、转换、调度和监控等方面。数据仓库中的数据并不要求与联机事务处理系统保持实时同步,因此数据抽取可以定时进行,但多个抽取操作执行的时间、相互的顺序、成败对数据仓库中信息的有效性则至关重要。

⑵存储和管理:数据仓库的真正关键是数据的存储和管理。数据仓库的组织管理方式决定了它有别于传统数据库,同时也决定了其对外部数据的表现形式。要决定采用什么产品和技术来建立数据仓库的核心,则需要从数据仓库的技术特点着手分析。

⑶数据的表现:数据表现实际上相当于数据仓库的门面,其性能主要集中在多维分析、数理统计和数据挖掘方面。而多维分析又是数据仓库的重要表现形式,近几年来由于互联网的发展,使得多维分析领域的工具和产品更加注重提供基于Web前端联机分析界面,而不仅仅是在网上发布数据。

SQL语言的分类及语法

1.1.2 SQL语言的分类及语法

可执行的SQL语句的种类数目之多是惊人的。使用SQL,你可以执行任何功能:从一个简单的表查询,到创建表和存储过程,到设定用户权限。在这个章节中,我们将重点讲述如何从数据库中检索、更新和报告数据,也是基于这个目的,我们应该了解的最重要的SQL 语句是:

● SELCET

● INSERT

● UPDATE

● DELETE

● CREAT

● DROP

以上这些命令可简要描述如表1.1所示,这些命令看起来并不困难,在下面的例子中,我们将在实例中应用这些命令,了解其功能。

表1.1 重要的SQL语句

1.SELECT语句语法

表1.2 SELECT语句的组件

下面我们对这个重要的语句语法进行示例讲解,需要说明的是这一章节中所涉及到的例子都是基于图1.1描述的表结构。

Authors

id

name

phone

address

zip

salary

contract

图1.1 在test数据库中的authors表的结构

●一个简单的SELECT语句:

SELECT id,name,phone,zip

From authors

这个简单的查询的结果得出的内容为authors表中返回的选定列的数据。在同样的检索情况下,如果你想缩小范围,比如只想知道住在福州鼓楼地区(邮编为350002)的作者的名字,你可以接着看后面的例子;

●添加WHERE子句

SELECT id,name,phone,zip

From authors

WHERE zip =

相关主题
文本预览
相关文档 最新文档