SQL Server数据库基础的级联删除、级联更新与三层架构之窥

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

一、定义

  级联删除是指删除包含主键值的行的操作,该值由其它表的现有行中的外键引用。在级联删除中,还删除其外键值引用删除的主键值的所有行。

  级联更新是指更新主键值的操作,该值由其它表的现有行中的外键引用。在级联更新中,更新所有外键值与新的主键值相匹配。

  三层架构是指一种架构思想。通常他将整个业务应用划分为:表现层(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/

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
14天前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
59 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
8天前
|
SQL 弹性计算 安全
【上云基础系列04】基于标准架构的数据库升级
本文回顾了业务上云从基础到进阶的理念,涵盖基础版和全栈版架构。在“入门级:上云标准弹性架构基础版”的基础上,本文针对数据库升级,重点介绍了高可用数据库架构的升级方案,确保数据安全和业务连续性。最后,附有详细的“上云标准弹性架构”演进说明,帮助用户选择合适的架构方案。
|
13天前
|
SQL 存储 关系型数据库
【SQL技术】不同数据库引擎 SQL 优化方案剖析
不同数据库系统(MySQL、PostgreSQL、Doris、Hive)的SQL优化策略。存储引擎特点、SQL执行流程及常见操作(如条件查询、排序、聚合函数)的优化方法。针对各数据库,索引使用、分区裁剪、谓词下推等技术,并提供了具体的SQL示例。通用的SQL调优技巧,如避免使用`COUNT(DISTINCT)`、减少小文件问题、慎重使用`SELECT *`等。通过合理选择和应用这些优化策略,可以显著提升数据库查询性能和系统稳定性。
71 9
|
1月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
103 6
|
1月前
|
数据库 Windows
SqlServer数据恢复—SqlServer数据库所在分区损坏的数据恢复案例
一块硬盘上存放的SqlServer数据库,windows server操作系统+NTFS文件系统。由于误操作导致分区损坏,需要恢复硬盘里的SqlServer数据库数据。
|
2月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
98 11
|
3月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
3月前
|
SQL 关系型数据库 MySQL
体验使用DAS实现数据库SQL优化,完成任务可得羊羔绒加厚坐垫!
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。完成任务,即可领取羊羔绒加厚坐垫,限量500个,先到先得。
275 19
|
2月前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
2月前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。

热门文章

最新文章