SQLServer数据库开发详解word资料43页.docx
《SQLServer数据库开发详解word资料43页.docx》由会员分享,可在线阅读,更多相关《SQLServer数据库开发详解word资料43页.docx(70页珍藏版)》请在冰豆网上搜索。
SQLServer数据库开发详解word资料43页
1.2大幅提升编程的能力_SQLServer2019数据库开发详解
语文课本中的文章都是精选的比较优秀的文章,还有不少名家名篇。
如果有选择循序渐进地让学生背诵一些优秀篇目、精彩段落,对提高学生的水平会大有裨益。
现在,不少语文教师在分析课文时,把文章解体的支离破碎,总在文章的技巧方面下功夫。
结果教师费劲,学生头疼。
分析完之后,学生收效甚微,没过几天便忘的一干二净。
造成这种事倍功半的尴尬局面的关键就是对文章读的不熟。
常言道“书读百遍,其义自见”,如果有目的、有计划地引导学生反复阅读课文,或细读、默读、跳读,或听读、范读、轮读、分角色朗读,学生便可以在读中自然领悟文章的思想内容和写作技巧,可以在读中自然加强语感,增强语言的感受力。
久而久之,这种思想内容、写作技巧和语感就会自然渗透到学生的语言意识之中,就会在写作中自觉不自觉地加以运用、创造和发展。
1.2大幅提升编程的能力
单靠“死”记还不行,还得“活”用,姑且称之为“先死后活”吧。
让学生把一周看到或听到的新鲜事记下来,摒弃那些假话套话空话,写出自己的真情实感,篇幅可长可短,并要求运用积累的成语、名言警句等,定期检查点评,选择优秀篇目在班里朗读或展出。
这样,即巩固了所学的材料,又锻炼了学生的写作能力,同时还培养了学生的观察能力、思维能力等等,达到“一石多鸟”的效果。
在集成应用程序开发上,SQLServer2019最受人瞩目的当属集成CLR引擎到SQLServer核心,让程序设计师可以通过自己所熟悉的语言来开发SQLServer内的对象,扩展了程序编写的弹性。
另外,支持ANSISQL2019与W3C的XML标准,让关系式和XML两种最常用的数据处理格式都可以集中到数据库引擎来处理。
要练说,得练看。
看与说是统一的,看不准就难以说得好。
练看,就是训练幼儿的观察能力,扩大幼儿的认知范围,让幼儿在观察事物、观察生活、观察自然的活动中,积累词汇、理解词义、发展语言。
在运用观察法组织活动时,我着眼观察于观察对象的选择,着力于观察过程的指导,着重于幼儿观察能力和语言表达能力的提高。
与Framework的集成
一致化数据库对象与中间层的程序编写模型。
将的CommonLanguageRuntime(CLR)直接集成到SQLServer2019的数据库引擎中,让存储过程、用户自定义函数、触发器、用户自定义数据类型以及聚合函数可以通过的语言,如VisualBasic或C#等等来编写[1],并且直接与SQLServer引擎执行在同一个程序中,以提升运行效率。
以往要通过C++编写扩展存储过程才能扩展SQLServer功能,但此种方式困难且容易犯错,往往造成编写的功能不如预期,反倒是增加了系统的不稳定性。
如今可以通过语言轻易地办到扩展SQLServer的功能。
例如通过RegularExpression验证数据格式正确与否,集成网络上或其他来源的数据一起提供给前端等等。
应用系统的架构工程师现在有更大的想象空间,让系统分析员和程序设计员等人可以使用相通的分析设计技巧与工具,如面向对象分析设计、程序编写风格、Framework类型等来扩展SQLServer的功能。
VisualStudio2019可以直接提供SQLServer2019对象格式的项目程序开发实例,其内提供程序代码架构、部署设置以及集成调试的Script等。
当你编写并编译完当作函数库(.dll格式)的程序集(Assembly)后,可以通过SQL语句或是VisualStudio2019提供的功能,直接将其部署到SQLServer中。
SQLServer会将该程序集存放在数据库内,而与外部文件系统上的程序集不再有关系。
也就是说若你有新的版本,需要先将SQLServer内的程序集及其相关的对象删除,重新布署才可以更新。
当程序集部署到SQLServer后,通过Createfunction、CreateProcedure等T-SQL语句可以设置存储过程、用户自定义函数等五种对象是来自该程序集。
而后就当作一般的SQL对象搭配T-SQL来使用。
前端用户分不出来某个对象是由T-SQL还是程序语言开发出来的。
除了用户自定义数据类型和自定义聚合函数一定要以才能编写外,其他的对象用和T-SQL都可以编写,则何时该用哪种语言架构呢?
笔者以为面向数据的函数与程序依然应该采用T-SQL,也就是说以集合的方式添加、修改、删除和查询数据还是T-SQL擅长的部分,若以一般程序语言如C#/VB等来逐笔维护数据,反而发挥不了数据库引擎最佳化访问数据的能力。
但若复杂的商业逻辑,如加/解密、网络访问、多线程、文件I/O等,需要一步步指引CPU如何做事,则适合采用程序语言。
对于复杂的运算,程序语言采用编译的方式,其编写程序逻辑与执行程序的方式都比解释式的T-SQL语言更好。
由于是数据库引擎内建执行环境,因此若将所有的商业逻辑都搬进到SQLServer势必大幅增加服务器的负担,因此仍要慎选程序逻辑的执行位置。
一般来说若应用与数据适合结合在一起,例如节省网络来回的负荷,数据与运算需要统一管理等,才将程序集成到服务器中。
在你细心评估后,若觉得放在数据库引擎是最佳的设计,而后才把组件放入到数据库也行,应用的巧妙存乎一心。
另外,在编写数据库核心程序需要格外的严谨,毕竟以往若前端程序写得不好,在意外状况发生时只会造成几个人的系统有问题,但若在数据库服务器上执行不稳定,或是有安全疑虑,将会拖累到全部数据库服务器的用户。
尤其在大型数据库服务器上,可能还有其他系统同时执行,到时会连累到许多其他系统的用户,因此程序开发者和数据库管理员不可不慎。
对XML的支持
现今应用程序在交换数据或存储设置时,大多采用XML格式。
在以往我们可能将XML数据以文件的方式存放在硬盘目录结构上,然后把该文件相关的管理信息放入到关系式数据库内。
在操作XML数据时,一方面通过SQL查询语句在数据库内找到相关的XML文件,一方面用程序语言调用DOM(DocumentObjectModel)对象来访问解析XML。
当编写这类程序时,开发人员要同时学习T-SQL和XPath语言,ADO或其他数据库访问对象以及DOM对象类型。
若XML文件数据很大,由于没有索引结构,用DOM解析的效率往往不佳。
同时,备份数据既要备份数据库内的metadata,又要备份文件系统上的XML,而且安全控制也更加复杂。
根据ANSISQL2019标准的要求,未来关系数据库皆可当作XML格式的数据源与集中储存的地方。
SQLServer2019遵循并扩展该标准,让存放数据的模型可以扩展到XML数据格式。
在数据定义方面新增XML数据类型(每条记录最长2GB),你可以用来定义数据字段或是该类型的变量。
该类型除了要求符合XMLWellform的定义外,并可通过XMLSchema验证XML数据的正确性。
并通过扩充XPath语言而形成的XQuery查询语言来查询和修改XML数据。
以XMLView将原有的关系式数据转成XML层次结构的查看方式,并以专门的XML索引格式提升查询效率。
以SQLServer2019当作XML的存储区可以让两种类型的数据有一致的管理机制,提供相同的备份、还原、安全控制等规格。
可以用相同的管理工具做到上述的工作,以此简化系统的架构设计。
程序设计师可以通过集成在T-SQL内的XQuery语句,混合关系式数据字段与XML数据一起显示与维护,在前端统一通过ADO2.0访问,让应用程序的开发技术单一且完整。
增强Transact-SQL
T-SQL语言一直都是使用SQLServer服务的基础,若你说你不熟悉T-SQL,那我就不太相信你真的会SQLServer。
新版SQLServer更大幅增强了该语言的功能,由于SQLServer引擎新增了非常多的对象与功能,例如支持、XML、提供WebServices、通过BrokerServices建立信息导向的数据处理平台、利用DDL触发器或EventNotification监控、增加认证(Certificate)和加密机制等等。
而要与SQLServer沟通时,主要的语言又是T-SQL,自然需在SQLServer2019中加入大量的T-SQL标记,以定义或访问上述的新增功能。
同时T-SQL语言本身也增强了数据处理的能力,例如取得记录结果排名函数,有RANK、DENSE_RANK、ROW_NUMBER和NTILE等。
支持递归数据访问的CommonTableExpression(CTE)、结构化错误处理(TRY…CATCH)、增加新的运算符如PIVOT、UNPIVOT,让你可以编写类似Excel分析的汇总运算。
另外,通过APPLY可以将数据表函数(TableValueFunctionTVF)传回的多条记录与查询结果相乘展开,也就是你可以在SELECT语句中将每一条记录的某个或某些字段值当作参数传给APPLY运算符之后衔接的TVF函数,TVF通过该参数取得的多条记录传回后,配上SELECT语句原先该条记录所选择的字段,形成多个字段乘积的结果。
另外,SQLServer也让T-SQL的语句更一致化,以往许多要借助系统存储过程、DBCC等命令才能完成的工作,现在也能改以CREATE、ALTER、DROP等标准语句来完成。
例如以往通过sp_addlogin、sp_adduser等系统存储过程来创建登录账号和数据库用户,现今都可以通过标准的CREATELOGIN和CREATEUSER语句来创建,而修改和删除亦是如此。
以往通过DBCC指令来整理索引也可改成用ALTERINDEX语句来完成。
上述的种种说明学习SQLServer服务各项功能以及T-SQL语句时更一致,而通过T-SQL语句可以更简单,更有效率地完成复杂的数据处理工作。
不会让你在完成不同功能时,要熟悉风格完全不同的DBCC指令或是存储过程。
新的数据类型
SQLServer2019新增了nvarchar(max)、varchar(max)和varbinary(max)等数据类型,以取代之前版本的ntext、text和image,让你在处理大型文字或二进制数据时更有弹性和效率。
另外,还可以通过编写自定义数据类型。
同时新支持的XML数据类型也让你将XML的数据可以统筹在数据库引擎一并管理和使用。
ADO2.0
SQLServer2019对前端应用程序的设计与开发提供了新的功能,但这些功能需要利用新的ADO2.0才能访问,而这些新功能可能会改变你以往设计应用程序的架构。
例如新的数据类型、新的snapshot事务级别、新的提升系统稳定性的Mirroring功能等,都需要ADO2.0来访问使用。
另外,有几个设计架构上的差异,如异步地访问SQLServer、MultipleActiveResultSets可让你重复使用对数据库的连接;在有兴趣的数据被更新时,可以收到来自SQLServer2019的主动触发等。
最后两点须要搭配以下服务器端功能的描述。
主动通知
SQLServer2019在用户访问的数据被他人更改时,可以主动地通知前端应用程序。
我们以往设计应用程序将数据缓存在前端时,必须要定时轮询(Polling)数据库,以同步数据库内最新的数据。
但往往需要调整轮询的频率,以平衡过多的访问造成性能损耗,太久不更新又让数据严重过时。
而SQLServer2019在所使用数据更改时,会主动通知你,这时你考虑的方面会改成SQLServer通知多少次后,或更改后可以延长多少时间再去同步数据,依然是避免过多访问造成的系统负荷。
但现在的设计模式会让你在系统数据未更新时,减轻浪费网络来回轮询的负担。
多数据结果集(MultipleActiveResultSetsMARS)
此功能提供在同一条连接上可以同时维护多个游标结构,以往ADO一条连接同时只能访问一个默认结果集游标结构,也就是利用ADO的SqlDataReader读取数据,若没有关闭,不可以在同一条连接中另外通过查询再开启一个结果集,因此若你要同时查询不同的语句,需要开启多条连接。
现在取消了这个限制,SQLServer2019一条连接可以维护多个结果集,因此在设计前端应用程序时,可以更节省连接所耗的服务器资源。
安全
数据库安全包括设计、默认、安装和维护、通信和储存等基本方面。
在设计安全性方面,此版SQLServer制定的登录账户支持Windows安全性原则(Policy)。
用户账户和对象命名的结构描述分开,让数据库对象不再绑在某个用户上,解决“用户离开公司”问题,同时让数据库管理员可以允许安装某个套装软件时,通过结构描述来分门别类各数据对象。
而元数据的查看现在也搭配安全管理权限,让用户只能查看可以访问的对象。
另外,所有的权限都可以通过T-SQL的GRANT、REVOKE、DENY赋予或禁止,这也称为Granularpermissions。
在默认安全性部分,新版默认可以利用SQLServer访问外部资源(如OpenRowset系统函数、xp_cmdshell系统存储过程、启动CLR等),或外部可以使用SQLServer的管道(如HTTP访问)关闭。
同时新增“SQLServerSurface界面区配置”工具程序,让你可以通过统一的界面来打开或关闭这些功能。
安全的安装和维护、通信和储存等方面提供数据加密,程序可以特定身份执行。
新版SQLServer提供管理密码钥匙的层次架构,用来加密数据的钥匙可以安全地保存在数据库内,用数据库钥匙加密一般的钥匙,再用SQLServer实例的钥匙加密数据库钥匙,最后实例的钥匙通过Windows操作系统的DPAPI保护。
另外,登录账号永远是被加密的。
而存储过程或用户自定义函数可以特定身份执行(runas),以符合最小权限准则,不必普遍赋予用户账号各种权利,只有通过特定的程序或函数转换身份后,才能完成需要特殊权限的对象访问。
另外,新版也可以为SQLAgent不同的工作定义不同的代理账号,而不像以往只有通过SQLAgent服务账号或一个代理账号可以设置。
本机的HTTP支持
不知道你是否曾经有过这样的疑问,为什么OSI网络七层结构中或互连网四层结构中,传输层与网络层可以几近统一使用TCP和IP协议,但为何在应用层需要熟悉这么多种协议,例如传输文件用FTP或WebDev协议、发送电子邮件用SMTP、收电子邮件用POP3、访问SQLServer用TDS、调用远端应用程序用DCOM、浏览网页用HTTP等等。
应用层是否也可以使用统一的协议?
慢慢地,答案似乎呼之欲出。
是的,就是SOAP,也就是HTTP加上XML。
在微软和IBM等大厂渐渐取得共识后,各项新的产品几乎都开始采用SOAP当作标准的访问协议。
而SQLServer2019的各项服务大都支持“webservices/SOAP”的访问,例如AnalysisServices和ReportingServices都直接通过webservices/SOAP访问。
SQLServer数据库引擎也可以设置让前端应用程序直接通过webservices的方式调用存储过程,这让SQLServer可以更广泛地支持各种平台。
由于SQLServer引擎通过Windows2019或WindowsXPSP2等版本操作系统核心的http.sys直接处理SOAP协议,因此该机器上不需要安装与启动IIS服务,就可以让SQLServer数据库引擎通过WebServices提供服务,以XML的格式传回执行结果。
换句话说,开发者直接在数据库层建立webservices,SQLServer可以当作HTTPlistener,接受以webservices模式沟通的前端应用程序访问。
这让其他平台的程序开发者,如Java、Linux等,除了JDBC或其他特殊的机制外,也都可以通过标准的webservices/SOAP访问SQLServer。
ServiceBroker
提供消息导向或异步的程序开发平台,通过SQLServer所提供的队列(Queue)让服务间异步地沟通,并保证消息传递质量,也就是消息一定寄达,且按照发送的先后顺序只寄达一次。
以往建立分布式运算、消息导向或异步访问架构时,我们以程序代码调用MSMQ服务,两个程序通过MSMQ提供的COM对象彼此协调沟通后,再各自更新自己的数据库。
而今可以各自跟数据库沟通,让数据库服务器来完成消息合作。
程序设计员可以减少了解MSMQ架构的需求。
当然,若统一在SQLServer的平台上,你多了一种架构选择。
但若是异质平台集成或应用程序分散的拓扑(topology)复杂,或整个系统中根本不需要数据库的存在,你依然会采用MSMQ。
另外,SQLServer2019本身在许多机制上都使用ServiceBroker,让原本前台同步的运作可以改为后台异步运作。
例如新增的DatabaseMail就会在用户通过系统存储过程要求寄发电子邮件时,先将需求放入到ServiceBroker中,把执行权立刻还给用户,而不必让用户空等系统和SMTP服务沟通,后台程序再从队列中读取命令,完成电子邮件的寄发。
而新提供的EventNotification也是通过ServiceBroker收集各种系统事件,它提供了与DDL/DML触发器不同的架构。
也就是若你在用户执行DDL或DML语言后,需要立刻处理的商业逻辑可以通过触发器来完成,但也由于默认触发器执行时会与上述的语句绑在同一个事务中,因此会延长系统回应用户的时间,甚至由于打开事务过久,而卡住大量的系统资源,破坏了在线同时访问的能力。
因此若触发的事件可以批次后台执行,通过SQLServer2019新提供的EventNotification机制,你可以通过队列累积需求,在系统不忙碌的时间来完成这些需求。
而本文前述SQLServer2019和ADO2.0合作的主动通知机制,其实也是建立在ServiceBroker之上的。
你所编写的应用程序也可以通过ServiceBroker将同步运行改成异步,以往通过触发器立刻处理数据变换后该完成的商业逻辑,或许也可以通过ServiceBroker累积需求,选择在系统不忙碌的时间再批次完成。
由于ServiceBroker还提供在需求量大时调整负荷的机制,让你更能够善用多CPU的服务器资源。
NotificationService
让大量的事件与大量的订阅可以在SQLServer平台上聚合,如数百万人对数百支股票各有各的兴趣,每个人可以自行订阅他有兴趣的多个事件。
当大量的人订阅了各种事件,并设置了需要通知的条件和通知的机制,SQLServer在收集大量事件的发生后,以Join的方式集成需求,然后通知各订阅者。
这个服务在SQLServer2000时就以外挂的方式提供,至今已经可以直接从微软网站下载2.0版。
但很可惜的是它没有友善的设置界面以及简易的程序编写模型,因此你需要花点功夫来学习设置与编写程序。
1.3完备的分析平台_SQLServer2019数据库开发详解
1.3完备的分析平台
在SQLServer7.0时,微软首度将商业智能分析功能加入到数据库产品中。
历经了SQLServer2000版本,而新版将商业分析的功能发扬光大。
本节先列举重要的新增功能。
SQLServer2019IntegrationServices
全新设计架构,而不再延续前版的DTS功能,提供工作流(WorkFlow)与数据流(DataFlow)分开的运行模式。
支持循环容器,让你可以轻易地在工作流程中设计ForLoop或ForEachLoop等商业逻辑。
以管线与临时数据结构重新设计数据转换的流程,这让数据处理的工作负担可以大幅落在SSIS所执行的机器上,以减轻数据库服务器在数据转换工作上的负荷。
不管是在集成开发环境,还是包内的设计与编写扩展功能上,都改以为主。
包内通过VB来编写工作流的“执行Script任务”或数据转换流内的“Script原件”,抑或是通过在包外部以语言参照SSIS提供的类型,开发集成SSIS的应用程序。
AnalysisServices
提出UDM的概念也就是具备以下四点:
集成异质数据源:
以数据源视图(DataSourceView)统一地描述其后方各种异质型的数据源的架构(schema)。
l丰富的数据显示与浏览模型,以专业领域的用词显示符合商业逻辑的数据:
提供动态与弹性查看数据的方式,因此AnalysisServices2019除了以往的度量值、维度外,还提升了属性(Attribute)的分析能力、加入KPI、透视(Perspective)、多国语言翻译(Translation)等功能。
深入分析:
新加入 MDXScript语句,并可以调用语言编写运算函数。
高级的高速缓存:
不同等级的高速缓存,区分不同数据浏览的需求,在大量数据与效率间取得平衡,让及时分析变得可行。
另外,它提供更完备的向导,让你建立分析Cube时更容易。
在建立Cube时,Cube向导自动检测与分析数据源视图内的数据关联性,并完成对facttables、dimensiontables和measures的建议。
支持多实例(Multi-instance)及聚类分析(Clustering)技术,提供更好的稳定性。
这一版的Profiler工具程序也可以跟踪AnalysisServices所触发的事件。
让你可以通过Profiler来跟踪、调试与监控AnalysisServices。
DataMining
提供9种数据挖掘模型,在“SQLServerBusinessIntelligenceDevelopmentStudio”集成了丰富的查看与测试数据挖掘模型的工具,并支持预测查询语句的编写环境。
在“SQLServerManagementStudio”中也支持DMX(DataMiningExtension)语句的编写、执行与管理。
并提供Web界面查看挖掘模型的原始实例应用程序代码。
ReportingServices
新增更为友善的用户互动界面,例如通过日历控制项来选择日期,报表参数可复选、可动态依照不同数据字段排序、提供MDX语句产生器,以方便建立AnalysisServices的报表、提供ReportViewer控制项方便开发者内嵌报表到应用程序中。
另外,新提供ReportDataModel设计环境和ReportBuilder工具程序,让普通人无须借