关系数据库系统(RDBMS)是当今用于软件工业中最重要的数据库系统。而其中最杰出的系统是MS SQL Server。终端用户和数据库程序员在构建业务应用程序时,为什么SQL Server是最佳的选择,这是有很多理由的。因为SQL Server和Windows操作系统紧密集成在一起,所以对于Windows操作系统而言,SQL Server当然是最佳的数据库系统。Windows系统安装的数量正在急速增长,同时由于SQL Server最佳的集成性(以及低廉的价格),所以SQL Server自然是一个使用数量庞大的系统。 第二,SQL Server是最易使用的数据库系统:除了它广为人知的用户界面以外,Microsoft还提供了几个不同的工具来帮助您创建数据库对象,调整数据库应用程序以及管理各种系统管理的任务。 第三,SQL Server捆绑了至少4种产品—— Relational Database Engine、Analysis Services、Reporting Services以及Integration Services—— 同样使得整个SQL Server系统赢得了目前领先地位。用户所想要的和所需要的是不仅能够把一个系统用于商务智能中,而且还要能够用于操作性的任务中。 0.1 本书的目标 通常,所有想很好地理解这一数据库系统并成功地使用它进行工作的SQL Server新用户都会发现本书很有帮助。本书可能面向的一群特殊的用户是MS Access用户,他们想使用除Access以外的另一个(同时也是更为强大的)数据库系统,同时还想继续使用已有的操作系统和Windows用户界面。同时本书还适用于SQL Server系统的所有用户。正是由于上述原因,本书分为如下几个部分:终端用户将发现,本书的前两个部分最令他们感兴趣;而本书第Ⅲ部分则为数据库管理员和系统管理员提供了专门知识;本书的第Ⅱ部分主要是为数据库应用程序员服务,其中几个章节提出了数据库应用程序员将面对的特别的任务——调整数据库应用程序;本书的第Ⅱ部分到最后一部分为想要使用本系统的商务智能组件的用户提供了更深入的说明。 注意: 因为本书第Ⅲ部分解决的是如何管理和安装SQL Server系统的问题,所以如果您需要安装SQL Server系统,那么请您从第Ⅲ部分第16章开始阅读。 0.2 示例数据库的使用 像本书一样的介绍性的书一般都需要一个示例数据库,以便每个读者都可以轻松地理解书中的内容。因此,作者使用了一个非常简单的概念用于示例数据库中:该示例数据库只含有4个表,每个表均有若干行。另一方面,它的逻辑又足够复杂,从而可以表示本书上下文中包含的成百上千个示例。本书中将要用到的示例数据库表示了一个公司,包括其含有的部门和员工。每个员工刚好只属于一个部门,而部门自身则可以有一个或多个员工。员工的工作则以项目为中心:每个员工同时为一个或多个项目工作,同时每个项目牵涉到一个或多个员工。 示例数据库的表如下。 表department(部门)如表0-1所示: 表0-1 dept_no dept_name location d1 Research Dallas d2 Accounting Seattle d3 Marketing Dallas 表employee(员工)如表0-2所示: 表0-2 emp_no emp_fname emp_lname dept_no 25348 Matthew Smith d3 10102 Ann Jones d3 18316 John Barrimore d1 29346 James James d2 9031 Elisa Bertoni d2 2581 Elke Hansel d2 28559 Sybill Moser d1 表project(项目)如表0-3所示: 表0-3 project_no project_name budget p1 Apollo 120000 p2 Gemini 95000 p3 Mercury 185600 表works_on 如表0-4所示: 表0-4 emp_no project_no Job enter_date 10102 P1 Analyst 1997.10.1 10102 p3 Manager 1999.1.1 25348 p2 Clerk 1998.2.15 18316 p2 NULL 1998.6.1 29346 p2 NULL 1997.12.15 2581 p3 Analyst 1998.10.15 9031 p1 Manager 1998.4.15 28559 p1 NULL 1998.8.1 28559 p2 Clerk 1999.2.1 9031 p3 Clerk 1997.11.15 29346 p1 Clerk 1998.1.4 您可以从McGraw-Hill/Osborne的Web站点或作者的个人主页或www.tupwk.com.cn/downpage上下载该示例数据库。同样,本书中所有的示例都可以从作者的主页或www.tupwk.com.cn/downpage上下载。 0.3 本书的结构 本书总共分为30章,5个不同部分。本书第Ⅰ部分(第1章和第2章)介绍了数据库系统的一般概念,特别介绍了SQL Server;第Ⅱ部分(第3章~第15章)的服务对象是终端用户和应用程序的程序员;而第Ⅲ部分(第16章~第24章)则描述了SQL Server系统管理的所有目标。 本书的第Ⅳ部分(第25章~第28章)主要介绍了Microsoft Analysis Services。MS Analysis Services允许用户分析和查询数据仓库和数据集市中的数据。最后,本书的最后一部分(第29章和第30章)描述了如何使用XML建立解决方案。 第1章讨论了一般的数据库,特别讨论了SQL Server。本章还给出了范式和示例数据库的观念。本章同时还介绍了本书后面部分将会用到的语法习惯。 第2章描述了称作SQL Server Management Studio的组件。在本书开头就指出:这一部分内容其目的就是可以使您在没有SQL数据库语言知识的情况下,就可以创建数据库对象并能查询数据。 第3章开始进入本书一个新的部分,本章详细介绍了RDBMS的最重要的一个部分:数据库语言。对于所有的RDBMS来说,占有举足轻重的地位的唯一一种语言就是:SQL。本章详细介绍了SQL Server自身的数据库语言的所有组件,这些组件叫做Transact-SQL。同时,在本章中,您还可以找到SQL的基本概念和现有的数据类型。最后,本章介绍了SQL Server的系统函数和运算符。 第4章详细介绍了Transact-SQL中数据定义语言(DDL)的所有语句。本章开头把所有的DDL语句分为3组。第一组包含了CREATE语句的所有形式,这些形式将用来创建数据库对象。第二组包含了ALTER语句的不同形式,使用这些形式的语句可以对数据库对象的结构进行修改。最后,第三组含有DROP语句的所有形式,这一语句可以用来删除不同的数据库对象。 第5章和第6章讨论了最重要的Transact-SQL语句:SELECT。这两章介绍了如何检索数据库中的数据,并详细描述了简单查询方法和复杂查询方法的使用。本章分别定义了与SELECT有关的每个子句,同时参考示例数据库,对每个子句做了解释。 第7章讨论了4个用来更新数据的Transact-SQL语句:INSERT、UPDATE、DELETE和TRUNCATE TABLE。本章使用了大量的示例来解释了每个语句。 Transact-SQL完完全全是一种计算语言。这就意味着所有程序上的扩展都是该语言不可分割的一部分。第8章详细介绍了这些可以用来创建强大的程序的扩展,这些创建的程序称作存储过程和用户自定义函数(UDF)。存储在服务器上的程序可以重复使用。一部分存储过程是用户编写的,另一部分程序是Microsoft提供的,称作系统存储过程。本章还讨论了这些所谓的CLR存储过程和UDF的创建和执行的方法。 每一位用户(尤其是数据库应用程序的程序员)可以调整他们自己的应用程序来获得较好的系统反应,从而取得更好的性能。首选的同时又是最强大的方法是使用索引。第9章的第一部分详细介绍了索引的创建方法,而第二部分则讨论了为取得更好性能所有可行的方法。 第10章介绍了视图的概念。本章使用了大量的示例解释了和视图有关的所有Transact-SQL语句。同时,本章还解释了一种特别的视图形式—— 称作索引视图。在本章的末尾,还讨论了与视图的更新有关的已有的约束。 RDBMS的一个最重要的部分是系统目录。系统目录包含了与数据库对象以及它们之间关系的所有信息。第11章还详细描述了属于SQL Server系统目录的最重要的系统表,同时还给出了与查询这些给定表有关的不同示例。该系统支持系统过程和信息模式,这些就为系统查询提供了另一个可以替换的方法。SQL Server 2005介绍了目录视图,这些视图为系统表提供了另一个层,而且它们应该用于查询系统信息。 在第12章中,您可以找到与保护数据库中数据防止未授权访问有关的两个主要问题的答案。这些问题牵涉到授权(授予用户对数据库系统的合法访问权限)和身份验证(对于某些特殊用户享有访问特权)的问题。本章讨论了3个Transact-SQL语句—— GRANT、DENY和REVOKE—— 这些语句提供了对数据库对象的访问特权,从而可以防止未授权的访问。同时,本章还解释了用于相同目的的视图的用法。 对于数据库中指定的模型来说,有两种途径来保持SQL Server数据库处于一致的状态:程序性的和声明性的。在第4章定义了声明性完整性约束之后,第13章详细介绍了如何使用触发器来实现程序性完整性约束。本章中的每一个示例都与完整性问题有关,对于一名数据库应用程序的程序员来说,完整性问题将是您日常工作中经常会遇到的一个问题。 第14章详细介绍了事务的概念以及控制事务的Transact-SQL语句。本章深入讨论了解决并发控制问题的一个方法—— 锁定。本章的末尾您还将学习到什么是隔离级别以及什么是死锁。 第15章将讨论一些与关系数据库服务器有关的内部问题和外部问题。系统数据库和系统架构是SQL Server系统的两个不同的内部设施。首先,本章详细介绍了磁盘存储元素、系统数据库以及实用程序。之后,又介绍了Unicode,Unicode允许在SQL Server系统中使用不同的语言,并且支持这些语言的特定属性。 本书的第Ⅲ部分详细介绍了系统管理问题,从第16章开始将具体介绍系统管理员的工具和任务。这一简短的章节列出了所有已有的组件,这些组件将在随后的章节中做详细的解释。 第一个系统管理任务是安装整个系统。尽管系统安装是一个简单直接的任务,但是仍然有几个步骤需要解释。我们将在第17章中解释所有的这些步骤。 第18章主要解决的是系统管理员存储管理职责的问题。本章包括了如何使用SQL Server Management Studio来创建数据库及其事务日志,如何扩大数据库和日志的大小以及如何删除数据库。 第19章主要解决的是与系统访问和数据库访问有关的问题。本章讨论了系统安全模式(Windows模式和Mixed模式)及其实现。本章还讨论了如何创建和管理不同类型的用户账户,包括SQL Server登录和角色。 第20章概括介绍了容错方法。通过SQL Server Management Studio或相应的Transact-SQL语句,使用容错方法可以实现备份策略。本章的第一部分指定了用来实现备份策略的不同方法。本章第二部分讨论了数据库的恢复。本章在讨论了系统数据库还原方法的同时,还详细介绍了用户自定义数据库和事务日志的还原方法。 一些RDMBS具有使某些系统管理任务(如备份数据及使用调度等)自动进行并能更改特性从而通知操作员的能力,SQL Server就是其中之一。一个称作SQL Server Agent的SQL Server组件可以调度和自动解决这些问题。这个组件以及SQL Server Services将在第21章中详细介绍。 第22章讨论了性能问题以及在调整与日常系统管理有关的SQL Server时需要用到的工具。在介绍了性能的度量之后,本章还介绍了影响性能的各种因素,并给出了用于监控的工具。 自SQL Server 7以来,SQL Server都支持数据分区功能。在以前的版本中,解决数据分区的方法的主要弊端是这些方法对于应用程序来说是不透明的。第23章介绍了数据和索引的分区范围,这一范围对于应用程序来说是完全透明的。 第24章介绍了数据复制,包括发布者和订阅者的概念。本章在介绍了如何使用SQL Server Management Studio来安装发布者和订阅者的同时,还给出了复制的不同模型。 本书的第Ⅳ部分主要介绍的是Microsoft Analysis Services。第25章介绍了数据仓库存储的观念。本章第一部分解释了联机事务处理与数据仓库化的区别。数据仓库化进程中进行的数据存储可以是数据仓库或数据集市。本章的第二部分就详细讨论了这两种数据存储的类型,并列出了它们的不同点。本章的末尾还介绍了数据仓库的设计问题。 第25章详细讨论了商务智能系统的一般属性,第26章则主要讨论了MS Analysis Services的一些特定属性。本章开头详细介绍了Analysis Services的体系结构。本章第二部分则讨论了Analysis Services的主要组件,称作Business Intelligence Development Studio。 第27章介绍了如何使用Transact-SQL语句来解决商务智能问题。本章讨论了所有的SQL扩展,比如CUBE和ROLLUP运算符、排序函数、TOP n子句以及PIVOT关系运算符。 第28章详细讨论了Microsoft的企业报表解决方案,称作Reporting Services。这一新的组件可以用来设计和部署报表。本章讨论了用于设计和创建报表的开发环境。同时,本章还介绍了传送一个已经设计和部署好的报表所用的不同方法。 本书最后一部分主要介绍了SQL Server中最重要的主题之一:XML。第29章简单概述了这一语言,本书的最后一章则讨论了XML在SQL Server数据库系统中的应用。 几乎每一章的末尾都有大量的练习,这些练习可以用来巩固您对本章内容的认识。所有文中练习的答案都可以在McGraw-Hill/Osborne的Web站点或作者的个人主页www.tupwk.com.cn/downpage 上找到。 0.4 修改内容的简述 SQL Server 2005是自2000年以来发布的Microsoft企业数据库系统的主要版本。因此,本书中将详细介绍一些新的功能。根据SQL Server 2005中相应的修改,作者还更新了前面写的那本书(SQL Server 2000:A Beginner’s Guide)中每一章的内容。下文将列出在本书各章中您可能发现的与以前出版的书有明显改动的地方。 第2章 SQL Server 2000最重要的前端组件是Enterprise Manager和Query Analyzer。SQL Server 2005中管理员的主要工具(用来与系统交互)是SQL Server Management Studio。基于此原因,第2章进行了重新编写,详细介绍了这一集成的环境 第6章 本章包含了Transact-SQL语言中最重要的一个扩展:通用表表达式(common table expression,CTE)。本章末尾还介绍了使用CTE来实现递归查询和非递归查询的方法 第8章 SQL Server以前的版本通过使用Transact-SQL可以实现存储过程和用户自定义函数(UDF)。在SQL Server 2005中,您可以通过使用公共语言运行库(common language runtime,CLR)来实现上述两个功能。第8章有两个新的部分,即“存储过程和CLR”以及“用户自定义函数和CLR”,这两个部分详细介绍了如何使用C#语言实现CLR编程。同时,本章的“使用TRY和CATCH语句处理事件”这一部分还讨论了一个新的话题——异常处理 第11章 SQL Server 2005介绍了一种查询系统信息的新方法:目录视图。这一套非常重要的视图属于新的界面,它们将在“目录视图”部分详细介绍 第12章 SQL Server 2005的安全模型与该数据库系统以前版本的安全模型有着显著的不同。因此,第12章进行了重新编写,并且详细讨论了大量的新主题,如新的加密策略以及用户与模式分离 第13章 本章添加了与CLR触发器如何实现有关的一部分新内容(同时可以参考本书第8章的改动)。同时,本章还详细介绍了DDL触发器 第14章 本章添加了一部分新内容,称作“快照隔离级别(Snapshot Isolation Level)”。这部分详细介绍了SQL Server 2005支持的这种新的隔离级别 第15章 本章对与新的sqlcmd实用程序有关的内容作了微小的改动 第16章 本章对与新的SQL Computer Manager组件有关的内容作了微小的改动 第17章 因为该数据库系统的安装与以前版本的安装有显著不同,所以对本章作了重新编写 第20章 本章添加了新的内容,称作“高可用性”。这部分内容详细介绍了日志传送以及故障群集 第22章 本章详细介绍了一个称作“Database Tuning Advisor”的新工具 第23章 本章是全新的一章,主要介绍了数据分区 第26章 本章添加了新的内容,该部分内容主要介绍了新的集成环境(称作“BI Development Studio”) 第27章 本章也几乎是全新的一章,它主要介绍了SQL-OLAP的内容。(以前的书相应的章节(第28章)中也包含了一小部分这些新内容,同时还有其他方面的内容。) 第28章 本章是全新的一章,主要介绍了Microsoft Reporting Services 第29章 在以前的书中,只用了一章(第29章)介绍XML。在这本新书中,将用两章介绍XML的内容。本章对该主题来说是一个引言 第30章 本章是全新的一章,把SQL Server 2005当作“本地XML数据库系统”进行介绍 对于名为Relational Database Engine的SQL Server 2005组件,本书中还用到了其他几个不同的名称。通常来说,它被称作“关系数据库服务器”或“数据库服务器”。(同时,还可以用“SQL Server系统”或只是用“SQL Server”来表示这一组件。)