SQL Server数据库基础的级联删除、级联更新与三层架构之窥
一、定义
级联删除是指删除包含主键值的行的操作,该值由其它表的现有行中的外键引用。在级联删除中,还删除其外键值引用删除的主键值的所有行。
级联更新是指更新主键值的操作,该值由其它表的现有行中的外键引用。在级联更新中,更新所有外键值与新的主键值相匹配。
三层架构是指一种架构思想。通常他将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的是为了“高内聚、低耦合”的思想。
二、特点
大家都知道,级联删除与级联更新操作,都是指主表的信息删除或更新后,外键表中的相应信息随主表保持一致,也同样做出删除或更新操作,不然就会发生错误,保持数据的事务性。
而关于三层架构的分层问题,我们之前就讨论过。看似简单,但是越是往细处想,越是发现疑点重重,很多知识都掌握的似是而非。
之前,我们谈论过,我们的架构设计,一般DAL层是与表一一对应的。这是一种规则,可以使DAL层与BLL层之间的关系更加清晰、简洁。但是,我们知道,在实际应用中,真正实现一个逻辑对应一个表是比较困难的,我们的业务不可能彼此孤立,而只能相对孤立。
因此,我认为:我们在设计之初,大方向依然按照DAL与表一一对应的原则进行设计。这里有一点需要注意:所写的SQL语句,一定是要放在存储过程里面的,因为存储过程是预编译类型。业务修改时,我们只需要修改对应存储过程,实现对修改封闭的原则。
三、比较
通过上面的分析,我们可以得出:级联操作与三层机构设计思想是彼此矛盾的。前者只适用于多表间的操作关系,而后者的宏观路线是单对单。
然而,我认为,通过编写存储过程或者触发器来实现级联操作,这样可以使得三层架构的设计更加灵活多变、更加具有弹性。
我们来看机房收费系统中的一个功能:充值功能。我们在充值的时候,不仅要更新卡表内余额,同时也要增加充值记录。
我们之前的做法是,在DAL层对应卡表编写进行更新余额,在充值记录表中添加相应记录。然后在BLL层实现他们的协调工作。
这样做有一个很大的弊端,充值的过程是一个顺序过程,现更新,在添加记录。如果中途断电,那么数据就会不完整了。
看下面的例子,首先是数据库关系图
编写下面触发器,实现起来就非常方便了。
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: 刘正权 -- Create date: 2012年5月7日 -- Description: 充值时,更新最新的余额的同时,增加充值记录 -- ============================================= CREATE TRIGGER trigCharge ON card Update AS BEGIN Update chargerecord set c.ChargeCash=i.ChargeCash from chargerocord c,Deleted d, Inserted i where c.CId=d.id END GO |
四、结论
我认为,级联操作与三层架构或者多层架构的思想是不矛盾的。想反,它使得分层更加灵活多变。
====================================分割线================================
最新内容请见作者的GitHub页:http://qaseven.github.io/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hadoop生态系统中的容器和微服务 玩出哪些新花样?
最近大多数大数据应用都部署在裸设备上,这意味着Hadoop大多数部署在非虚拟化服务器上。随着容器和微服务对应用开发圈产生影响,这种情况在发生改变。 容器和微服务都把整个应用程序的代码细分成更小粒度的片段。这样不仅简化了开发,而且更容易测试,这也是设计更灵活应用程序部署方案和代码复用的关键。 早期的时候,这种技术就应用于大数据领域,但是现在看起来在数据流处理、微服务这类领域应用也很有前途。欧洲某顶级电子商务公司的一位技术经理认为,微服务方法简化了开发工作,增强了代码复用能力。 Otto GmbH公司是一家多渠道零售商(产品包括高级铸件以及熔铸设备和半成品工业设备),总部位于德国汉堡。Rupert Steffner是该公司商业智能系统首席平台架构师,他说:“使用微服务方法是非常经济的做法。对于有些类型的应用,忽略微服务的方式是不明智的。你会一遍又一遍地开发相同的功能。” Steffner谈到的这种类型应用是许多人工智能机器人在公司在线零售网站上运行着各种实时分析任务。Otto使用了微服务整合Docker容器和流处理技术来增强这些AI机器人的功能。 容器和微服务云计算是推动Hadoop、Sp...
- 下一篇
数据中心互联正在重塑光网络
Ovum智能网络首席分析师Ian Redpath日前表示,数据中心互联(DCI)正在重塑城域和长途光网络。下一波数据中心建设将采用新的架构,并开创数据中心新时代,同时也将推动对光器件的需求。 互联网内容提供商正持续投资数十亿美元建设面积达数百平方英尺的数据中心,并且他们计划建设更多的数据中心。这些ICP正向新的地理位置扩展,并且增加更多的容量来服务更多带宽密集型消费者和业务应用,推动数据中心面积不断扩大。ICP已转向“边缘”数据中心建设。边缘数据中心比网络规模站点小,更靠近用户群体,从而能够降低延迟和提升应用性能表现。ICP也在增加他们对用于全球DCI的海底电缆的投资。最终结果是具备全球海缆、各大洲互联和城域互联的DCI网络,能够下沉至边缘分布节点。 此外,由于更高容量的服务器端口和每个机架服务器密度的增加,数据中心市场正处于大幅升级的边缘。ICP还指出,他们希望供应商为其打造针对其需求的特制DCI设备。他们强调了组网所需的一系列特定功能:紧凑和可堆叠的外形、改进过的频谱效率、低功耗、流遥测数据、开放网络控制API、Layer-1加密、最大化的非放大范围和自动化分散管理。ICP代表着一...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库