1.2大幅提升编程的能力
来源:优易学  2009-12-4 20:29:07   【优易学:中国教育考试门户网】   资料下载   IT书店
文章页内部300*250广告位

1.2 大幅提升编程的能力

在集成应用程序开发上,SQL Server 2005 最受人瞩目的当属集成 .NET CLR 引擎到 SQL Server 核心,让程序设计师可以通过自己所熟悉的 .NET 语言来开发 SQL Server 内的对象,扩展了程序编写的弹性。另外,支持 ANSI SQL 2003 与 W3C 的 XML 标准,让关系式和 XML 两种最常用的数据处理格式都可以集中到数据库引擎来处理。

与 .NET Framework 的集成

一致化数据库对象与中间层的程序编写模型。将 .NET 的 Common Language Runtime(CLR)直接集成到 SQL Server 2005 的数据库引擎中,让存储过程、用户自定义函数、触发器、用户自定义数据类型以及聚合函数可以通过 .NET 的语言,如 Visual Basic.NET 或 C# 等等来编写[1],并且直接与 SQL Server 引擎执行在同一个程序中,以提升运行效率。

以往要通过 C++ 编写扩展存储过程才能扩展 SQL Server 功能,但此种方式困难且容易犯错,往往造成编写的功能不如预期,反倒是增加了系统的不稳定性。

如今可以通过 .NET 语言轻易地办到扩展 SQL Server 的功能。例如通过 Regular Expression 验证数据格式正确与否,集成网络上或其他来源的数据一起提供给前端等等。

应用系统的架构工程师现在有更大的想象空间,让系统分析员和程序设计员等人可以使用相通的分析设计技巧与工具,如面向对象分析设计、程序编写风格、.NET Framework 类型等来扩展 SQL Server 的功能。

Visual Studio 2005可以直接提供 SQL Server 2005 对象格式的项目程序开发实例,其内提供程序代码架构、部署设置以及集成调试的 Script 等。当你编写并编译完当作函数库(.dll 格式)的程序集(Assembly)后,可以通过 SQL 语句或是 Visual Studio 2005 提供的功能,直接将其部署到 SQL Server 中。SQL Server 会将该程序集存放在数据库内,而与外部文件系统上的程序集不再有关系。也就是说若你有新的版本,需要先将 SQL Server 内的程序集及其相关的对象删除,重新布署才可以更新。

当程序集部署到SQL Server 后,通过 Create function、Create Procedure等 T-SQL 语句可以设置存储过程、用户自定义函数等五种对象是来自该程序集。而后就当作一般的 SQL 对象搭配 T-SQL 来使用。前端用户分不出来某个对象是由 T-SQL 还是 .NET 程序语言开发出来的。

除了用户自定义数据类型和自定义聚合函数一定要以 .NET 才能编写外,其他的对象用.NET 和 T-SQL 都可以编写,则何时该用哪种语言架构呢?笔者以为面向数据的函数与程序依然应该采用 T-SQL,也就是说以集合的方式添加、修改、删除和查询数据还是 T-SQL 擅长的部分,若以一般程序语言如 C#/VB.NET 等来逐笔维护数据,反而发挥不了数据库引擎最佳化访问数据的能力。

但若复杂的商业逻辑,如加/解密、网络访问、多线程、文件 I/O 等,需要一步步指引 CPU 如何做事,则适合采用 .NET 程序语言。对于复杂的运算,.NET 程序语言采用编译的方式,其编写程序逻辑与执行程序的方式都比解释式的 T-SQL 语言更好。

由于是数据库引擎内建 .NET 执行环境,因此若将所有的商业逻辑都搬进到 SQL Server 势必大幅增加服务器的负担,因此仍要慎选程序逻辑的执行位置。一般来说若应用与数据适合结合在一起,例如节省网络来回的负荷,数据与运算需要统一管理等,才将程序集成到服务器中。在你细心评估后,若觉得放在数据库引擎是最佳的设计,而后才把组件放入到数据库也行,应用的巧妙存乎一心。

另外,在编写数据库核心程序需要格外的严谨,毕竟以往若前端程序写得不好,在意外状况发生时只会造成几个人的系统有问题,但若在数据库服务器上执行不稳定,或是有安全疑虑,将会拖累到全部数据库服务器的用户。尤其在大型数据库服务器上,可能还有其他系统同时执行,到时会连累到许多其他系统的用户,因此程序开发者和数据库管理员不可不慎。

对 XML 的支持

现今应用程序在交换数据或存储设置时,大多采用 XML 格式。在以往我们可能将 XML 数据以文件的方式存放在硬盘目录结构上,然后把该文件相关的管理信息放入到关系式数据库内。在操作 XML 数据时,一方面通过 SQL 查询语句在数据库内找到相关的 XML 文件,一方面用程序语言调用 DOM(Document Object Model)对象来访问解析 XML。

当编写这类程序时,开发人员要同时学习 T-SQL 和 XPath 语言,ADO.NET 或其他数据库访问对象以及 DOM 对象类型。若 XML 文件数据很大,由于没有索引结构,用 DOM 解析的效率往往不佳。同时,备份数据既要备份数据库内的 metadata,又要备份文件系统上的 XML,而且安全控制也更加复杂。

根据ANSI SQL 2003 标准的要求,未来关系数据库皆可当作 XML 格式的数据源与集中储存的地方。SQL Server 2005 遵循并扩展该标准,让存放数据的模型可以扩展到 XML 数据格式。在数据定义方面新增 XML 数据类型(每条记录最长 2 GB),你可以用来定义数据字段或是该类型的变量。该类型除了要求符合 XML Well form 的定义外,并可通过 XML Schema 验证 XML 数据的正确性。并通过扩充 XPath 语言而形成的 XQuery 查询语言来查询和修改 XML 数据。以 XML View 将原有的关系式数据转成 XML 层次结构的查看方式,并以专门的 XML 索引格式提升查询效率。

以 SQL Server 2005 当作 XML 的存储区可以让两种类型的数据有一致的管理机制,提供相同的备份、还原、安全控制等规格。可以用相同的管理工具做到上述的工作,以此简化系统的架构设计。程序设计师可以通过集成在 T-SQL 内的 XQuery 语句,混合关系式数据字段与 XML 数据一起显示与维护,在前端统一通过 ADO.NET 2.0 访问,让应用程序的开发技术单一且完整。

增强 Transact-SQL

T-SQL 语言一直都是使用 SQL Server 服务的基础,若你说你不熟悉 T-SQL,那我就不太相信你真的会 SQL Server。新版 SQL Server 更大幅增强了该语言的功能,由于 SQL Server 引擎新增了非常多的对象与功能,例如支持 .NET、XML、提供 Web Services、通过 Broker Services 建立信息导向的数据处理平台、利用 DDL触发器或 Event Notification 监控、增加认证(Certificate)和加密机制等等。而要与 SQL Server 沟通时,主要的语言又是 T-SQL,自然需在 SQL Server 2005 中加入大量的 T-SQL 标记,以定义或访问上述的新增功能。

同时 T-SQL 语言本身也增强了数据处理的能力,例如取得记录结果排名函数,有 RANK、DENSE_RANK、ROW_NUMBER 和 NTILE 等。支持递归数据访问的 Common Table Expression(CTE)、结构化错误处理(TRY…CATCH)、增加新的运算符如 PIVOT、UNPIVOT,让你可以编写类似 Excel分析的汇总运算。另外,通过 APPLY 可以将数据表函数( Table Value Function TVF)传回的多条记录与查询结果相乘展开,也就是你可以在 SELECT 语句中将每一条记录的某个或某些字段值当作参数传给 APPLY 运算符之后衔接的 TVF 函数,TVF 通过该参数取得的多条记录传回后,配上 SELECT 语句原先该条记录所选择的字段,形成多个字段乘积的结果。

另外,SQL Server 也让 T-SQL 的语句更一致化,以往许多要借助系统存储过程、DBCC 等命令才能完成的工作,现在也能改以 CREATE、ALTER、DROP等标准语句来完成。例如以往通过 sp_addlogin、sp_adduser 等系统存储过程来创建登录账号和数据库用户,现今都可以通过标准的 CREATE LOGIN 和 CREATE USER 语句来创建,而修改和删除亦是如此。以往通过 DBCC 指令来整理索引也可改成用 ALTER INDEX 语句来完成。

上述的种种说明学习 SQL Server 服务各项功能以及 T-SQL 语句时更一致,而通过 T-SQL 语句可以更简单,更有效率地完成复杂的数据处理工作。不会让你在完成不同功能时,要熟悉风格完全不同的 DBCC 指令或是存储过程。

新的数据类型

SQL Server 2005 新增了 nvarchar(max)、varchar(max) 和 varbinary(max)等数据类型,以取代之前版本的 ntext、text 和 image,让你在处理大型文字或二进制数据时更有弹性和效率。另外,还可以通过 .NET 编写自定义数据类型。同时新支持的 XML 数据类型也让你将 XML 的数据可以统筹在数据库引擎一并管理和使用。

ADO.NET 2.0

SQL Server 2005 对前端应用程序的设计与开发提供了新的功能,但这些功能需要利用新的 ADO.NET 2.0 才能访问,而这些新功能可能会改变你以往设计应用程序的架构。例如新的数据类型、新的 snapshot 事务级别、新的提升系统稳定性的 Mirroring 功能等,都需要 ADO.NET 2.0 来访问使用。另外,有几个设计架构上的差异,如异步地访问 SQL Server、Multiple Active Result Sets 可让你重复使用对数据库的连接;在有兴趣的数据被更新时,可以收到来自 SQL Server 2005 的主动触发等。最后两点须要搭配以下服务器端功能的描述。

主动通知

SQL Server 2005 在用户访问的数据被他人更改时,可以主动地通知前端应用程序。我们以往设计应用程序将数据缓存在前端时,必须要定时轮询(Polling)数据库,以同步数据库内最新的数据。但往往需要调整轮询的频率,以平衡过多的访问造成性能损耗,太久不更新又让数据严重过时。

而 SQL Server 2005 在所使用数据更改时,会主动通知你,这时你考虑的方面会改成 SQL Server 通知多少次后,或更改后可以延长多少时间再去同步数据,依然是避免过多访问造成的系统负荷。但现在的设计模式会让你在系统数据未更新时,减轻浪费网络来回轮询的负担。

多数据结果集(Multiple Active Result Sets MARS)

此功能提供在同一条连接上可以同时维护多个游标结构,以往 ADO.NET 一条连接同时只能访问一个默认结果集游标结构,也就是利用 ADO.NET 的 SqlDataReader 读取数据,若没有关闭,不可以在同一条连接中另外通过查询再开启一个结果集,因此若你要同时查询不同的语句,需要开启多条连接。现在取消了这个限制, SQL Server 2005 一条连接可以维护多个结果集,因此在设计前端应用程序时,可以更节省连接所耗的服务器资源。

安全

数据库安全包括设计、默认、安装和维护、通信和储存等基本方面。在设计安全性方面,此版 SQL Server 制定的登录账户支持 Windows 安全性原则(Policy)。用户账户和对象命名的结构描述分开,让数据库对象不再绑在某个用户上,解决“用户离开公司”问题,同时让数据库管理员可以允许安装某个套装软件时,通过结构描述来分门别类各数据对象。

 

[1] [2] 下一页

责任编辑:小草

收藏此页】【 】【打印】【回到顶部
计算机文章页底部500*200广告
文章搜索:
 相关文章
计算机底部580*90广告
文章页右侧第一330*280广告
计算机文章页资讯推荐
热点资讯
文章页330尺寸谷歌广告位
热门课程培训