数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL Server数据体系和应用程序逻辑


发布日期:2024年01月31日
 
SQL Server数据体系和应用程序逻辑
在许多用SQL Server实现的新的企业系统设计中系统设计师需要在给数据结构和管理应用程序逻辑的定位上做出具有关键性意义的决定SQL Server有它自己的编程语言(TransactSQL即TSQL)开发者可以用它来管理数据访问代码事务逻辑和交易控制
使用TSQL开发者可以创建保存过程在保存过程中用一段可重用预编译而且拥有自己的许可设置的代码块来封装数据访问数据库中每个表格都有一组叫做triggers的特殊的保存过程当底层数据库发生特定的数据库事件(如InsertDelete或者Update)时trigger就被 触发使用triggers开发者就可以编写基于事件的事务逻辑这样给定表格的InsertDelete和Update事件就可以驱动其它表格的变化
既然有了这样的灵活性那么我们为什么不尽可能用TSQL写更多的事物逻辑呢?
使用TSQL来开发应用程序逻辑存储
TSQL不仅可以作为单个应用程序的逻辑仓库它也可以是一个访问相同数据的应用程序组的逻辑仓库——这有几个逻辑上的原因通过对数据的集中处理和管理SQL server中数据的规则你可以配置这样的安全体系——即应用程序在通过事务规则之前不可以访问底层数据库
这是大多数两层客户——服务器应用程序的常见数据库范例该体系把所有的事务逻辑和数据访问交给后端的服务器而把丰富的表示逻辑交给客户端客户管理事务过程和数据的视(view)但不在本地处理除显示之外的其它事务如果把所有的事务逻辑放到中央仓库去那么这个体系还有降低管理成本的潜力但这会付出降低了可测性的代价
我最近接触了一个客户它花了数百个人月(一个人工作一个月的工作量)和数以千计的美元来设计一个非常复杂的用TSQL管理所有应用程序逻辑的应用程序尽管该体系非常精巧个用户的情况下也运行良好但是如果有个用户速度就非常慢通过给SQL server增加处理器的方法该系统可以允许个用户同时使用但是这距离个用户的设计目标还有很大一段距离这就使得该公司在 Internet上开放该应用程序的计划无法实施下去由于存储过程和trigger只能操作本地数据该公司无法把该应用程序分解成多个SQL server以提高可测性结果该公司不得不大规模的修改它
在应用程序逻辑中使用NET类
上面那家公司在经过一段曲折后所发现的问题大多数体系设计师在体系设计阶段都会重新认识到——应用程序逻辑包含在一组NET类的n层体系可以增加该应用程序的灵活性和可测性由于TSQL是一种以管理数据为主要目的的语言因此它不够灵活但是我们仍可以用TSQL编写出复杂的事务逻辑
如果开发者使用NET框架那么他们可以在开发核心事务过程时做出自己的语言选择这个灵活性可以让你对应用程序要求和开发语言或者资源进行最合理的搭配而且如果适当开发封住这些事务过程的对象可以在多台机器上运行并共享同样的底层数据库server在与处理TSQL事务逻辑无关的情况下SQL server可以应付大量的并发请求
行操作(row operation)和集操作(set operations)
在规划体系阶段时判断使用行操作还是集操作的一个指导思想就是如果使用TSQL就使用集操作如果使用NET则进行行操作通过网络连接来提供大量的数据会影响应用程序的整体性能所以只要有可能就使用server来处理它们——这样做是很有意义的但是从内存和处理能力的角度来看SQL Server的指针(cursor)是非常昂贵的对象因此创建一个指针来遍历集合中的所有记录并依次处理这些记录一般来说并没有多大意义 (wwwliancom)
当你需要执行基于行的处理而这些处理包括了复杂的程序逻辑或者占用CPU比较厉害的操作时你就应该从server中查询这些行并在中间层来处理它们
如果你想通过一个例子来看看如何把数据访问逻辑封装到一个中间层对象中去请从MSDN中下载数据访问应用程序模块这是一个提供代码的可重用的数据访问子系统你可以根据它来编写自己的数据库或者特性应用程序的数据访问对象
通过创建可重用的NET应用程序框架来处理大多数应用程序逻辑并用基于TSQL的保存过程来作为服务器端的集操作的安全限制和机制那么你就可以创建同时拥有TSQL和NET这两者优点的应用程序了

上一篇:如何掌握SQL Server的锁机制

下一篇:SQL Server 自动化管理分区设计方案