首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >哪种更好些呢?触发或选择sql,然后更新记录?对于相关表,多行更新

哪种更好些呢?触发或选择sql,然后更新记录?对于相关表,多行更新
EN

Stack Overflow用户
提问于 2014-08-28 16:20:27
回答 2查看 144关注 0票数 0

场景:实体1可以有0个或多个实体2。

尝试做什么:当实体1中的字段被更新时,实体2中的字段被连续更新。

我在做什么:通过Update sql更新Entity 1中的字段,然后查询相关Entity 2记录(使用SELECT ATTR FROM ENTITY2 WHERE ENTITY1.ID = ENTITY2.ENT1_ID),以便在更新记录之前获得ENTITY2 attr的旧值。ENTITY2记录的更新类型(例如减法或加法)基于ENTITY1上的更新值。

替代方法:使用触发器连续更新这些相关记录。

(我仍然计划研究实现触发器,但我不确定是否值得这样做。能帮上忙吗?或者链接?)

使用触发器更好吗?或者只是坚持我当前的解决方案(我认为由于sql执行的数量,它相当慢,但更容易跟踪)。

EN

回答 2

Stack Overflow用户

发布于 2014-08-29 08:43:18

有些人,例如Tom Kyte,认为触发器应该尽可能少使用,如果有的话。还有其他人,比如Toon Koppelaars,认为如果仔细考虑它们的使用,就应该使用它们。

我属于第二阵营,我相信可以使用触发器。然而,这种使用不应该是“自动”的,因为你所建议的级联操作。相反,这些触发器可以用来强制完整性约束,这些约束不能使用表约束子句的标准机制来声明,即触发器本身除了SELECT from tables之外不做任何DML。(注意:还有其他机制可以强制执行这些约束,包括物化视图或引入额外的列和使用特定的索引策略),因此,我建议使用另一种替代方案。创建触发器-或使用这些替代机制-以确保不会提交违反完整性约束的数据。然后使用PL/SQL创建API,这些API封装确保不违反完整性约束所需的多表数据修改,并将其用作更新路径。

通过这种方式,您可以确保数据库中不存在无效数据,而且实现这一点所需的实际DML不会隐藏在多个程序单元和触发器中,而是在一个位置显式声明。

票数 0
EN

Stack Overflow用户

发布于 2014-08-30 22:06:56

汤姆·凯特很聪明。但从本质上讲,他仍然只是一名DBA。在考虑他关于表格设计的建议时,请始终牢记这一点。

触发器会被过度使用吗?当然了。但问题是:任何东西都可能被过度使用。我倾向于触发器,因为没有办法保证所有的数据操作都会通过你的应用程序或任何一个渠道。或者,如果可能的话,定义一个外键关系,让“级联更新”来处理所有事情。我承认这很棘手,可能会有问题,但不要马上拒绝任何解决方案。

话虽如此,我不知道是否需要一个用于此目的的触发器。我不知道您为什么要将数据复制到不同表中的字段。如果不知道您的总体设计和您试图实现的目标,就无法做出判断。但是可以考虑将数据保存在一个表的一个字段中,然后使用视图将该字段公开为另一个“表”的一部分。更改它所在的数据,viola,它现在无论出现在哪里都会被更改。

性能受到了影响?是。但是将重复数据保存在不同的位置并保持它们的同步是对数据完整性的打击。只有你知道(或有能力找出)这种平衡向哪个方向倾斜。

哦,视图会被过度使用吗?当然了。但总会有我提到的问题;此外,视图在大多数数据库中长期未得到充分利用,过度使用将是一条很长的路要走。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25553523

复制
相关文章
让DNS运行在容器中
在这里主要使用的容器的镜像是基于bind的,在其中封装了图形界面,从而可以在界面上直接进行配置相关的参数。
SRE运维实践
2019/07/08
7610
运行在 macOS 中的 Linux —— multipass 方案
注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
宋天伦
2023/10/21
3420
运行在 macOS 中的 Linux —— OrbStack 方案
OrbStack) 是在 macOS 上运行 Docker 容器和 Linux 机器的快速、轻量级和简单的方式。它是一个超级充电版 WSL 和 Docker 桌面替代品,所有这些都在一个易于使用的应用程序中实现。
宋天伦
2023/10/21
2.2K0
运行在“Ring -3” 的 MINIX
你可能不知道,但是在你的英特尔系统里,除了你的主操作系统之外,还有一个操作系统在运行,这就是 MINIX。
py3study
2020/01/14
4860
NET MVC接口服务如何运行在容器中
  有些公司内部存在一些NET项目,而公司服务器后期都换成了Linux,若单纯为这一个项目占用一台Windows服务器显得极其浪费,因此需要将NET项目嵌入到Linux服务器中,为了后期方便迁移和运维最好是Docker容器中运行。 
欢醉
2023/03/01
1K0
NET MVC接口服务如何运行在容器中
有些公司内部存在一些NET项目,而公司服务器后期都换成了Linux,若单纯为这一个项目占用一台Windows服务器显得极其浪费,因此需要将NET项目嵌入到Linux服务器中,为了后期方便迁移和运维最好是Docker容器中运行。
欢醉
2023/02/20
1.2K0
运维安全中的“福尔摩斯”
引 言 随着互联网技术的发展,信息的交互越来越频繁,随之而来信息的安全、运维操作的合规性等等问题越来越多,其对于企业内部管理来说要求越来越高。2015年某某网宕机事件,由于内部人员的越权操作,导致该网及APP全线瘫痪约12小时,直接损失近1200万美元;2016年,杭州男子曹某某,利用工作用的运维账号,窃取浙60万学生信息贩卖给他人。 其实,我们的一些客户在使用堡垒机的过程中,可能也会碰到类似的事件,并且都通过堡垒机找到了相关的作案人员,下面我们分享三个发生过的案例 案例一 误操作导致主机异常 某政务网客
安恒信息
2018/04/10
1.5K0
运维安全中的“福尔摩斯”
运维中的接入管理梳理
数据库层的接入可以提炼出DAO层,通过工厂模式来提供灵活的配置接入,这会是一个通用的接口,同时其他数据库的接入也可以通过这种方式带来接入,提炼的结果就是对于数据库类型和接入方式,即可完成数据库的接入管理,比如MySQL,我只需要输入mysql.mysqldb的方式即可通过mysqldb库的方式接入MySQL
jeanron100
2018/07/26
1.5K0
运维中的接入管理梳理
.NET - Task.Run vs Task.Factory.StartNew
在 .NET 4 中,Task.Factory.StartNew 是安排新任务的首选方法。它有许多重载提供了高度可配置的机制,通过启用设置选项,可以传递任意状态、启用取消,甚至控制调度行为。所有这些功能的另一面是复杂性。您需要知道什么时候使用哪个重载、提供什么调度程序等等。另外,Task.Factory.StartNew 用起来并不直截干脆,至少对于它的一些使用场景来说还不够快,比如它的主要使用场景——轻松地将工作交付到后台处理线程。
独立观察员
2022/12/06
4280
C# Task.Run 和 Task.Factory.StartNew 区别
Task.Run 是在 dotnet framework 4.5 之后才可以使用,但是 Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制。可以认为 Task.Run 是简化的 Task.Factory.StartNew 的使用,除了需要指定一个线程是长时间占用的,否则就使用 Task.Run。
zls365
2021/01/13
1.3K0
Task.Run 和 Task.Factory.StartNew 区别——c#
Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制。
vv彭
2021/01/06
1.4K0
如何使用sklearn进行在线实时预测(构建真实世界中可用的模型)
Python 作为当前机器学习中使用最多的一门编程语言,有很多对应的机器学习库,最常用的莫过于 scikit-learn 了。我们介绍下如何使用sklearn进行实时预测。先来看下典型的机器学习工作流。
abs_zero
2018/07/25
4K0
如何使用sklearn进行在线实时预测(构建真实世界中可用的模型)
IT运维发展进程中不同时期的差异!传统运维、互联网运维、业务运维
从信息化时代到互联网时代,再到如今大幕初启的数字化时代,IT、互联网和移动化已经渗透到工作和生活的方方面面。今年早些时候一群歪果仁评选出中国的新“四大发明”——高铁、网购、支付宝和共享单车,后三样都是来自于IT变革。而运维作为IT运行的有力保障,在不同时期和不同类型的企业中正在发挥着越来越大的支撑和引领作用,今天就让我们聊聊信息化时代的传统运维、互联网时代的互联网运维和数字化时代的业务运维有什么不同!
智能运维圈
2021/05/11
3.5K0
IT运维发展进程中不同时期的差异!传统运维、互联网运维、业务运维
linux中iostat命令_linux运维和网络运维
Linux系统中的iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
全栈程序员站长
2022/11/08
9.7K0
linux运维中的命令梳理(三)
----------文本操作命令---------- sed命令:文本编辑工具 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数
洗尽了浮华
2018/01/23
8.1K0
linux运维中的命令梳理(一)
在linux日常运维中,我们平时会用到很多常规的操作命令。 ------------------------------------------------------- 在修改文件后,执行下面操作进行代码提交到git: git add . git status #查看修改了哪些文件信息 git commit -m "edit message"
洗尽了浮华
2018/01/23
7.5K0
linux运维中的命令梳理(四)
----------管理命令---------- ps命令:查看进程 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续; (2) top:如果想对进程运行时间监控,应该用 top 命令; (3) kill 用于杀死进程或者给进程发送信号; (4) 查看文章最后的man手册,可以查看ps的每项输出的含义,to find: STANDARD FORMAT SPE
洗尽了浮华
2018/01/23
11.5K0
linux运维中的命令梳理(二)
回想起来,从事linux运维工作已近5年之久了,日常工作中会用到很多常规命令,之前简单罗列了一些命令:http://www.cnblogs.com/kevingrace/p/5985486.html 今天在这里,详细总结下运维工作中常常用到的一些操作命令(依据本人使用经验而言): ----------文件系统结构和基本操作命令---------- chmod命令:改变权限 常用用法:chmod -R xxxx FILE 含义:设置文件或者目录的权限属性,加上R选项,表示递归设置目录下文件和目录的权限属性 上
洗尽了浮华
2018/01/23
5.6K0
linux运维中的命令梳理(二)
Rails框架流行在他的设计理念
这两天看了一本书《Grails权威指南》,看了这个Java上Rails框架,其中有两条设计理念: 1、make simple thing easy and make complex possible -让简单的事情变的容易,同时让复杂的事情的实现成为可能。 2、Convention Over Configuration --约定高于配置 Rails几乎成了敏捷web框架的代名词,Java社区的Grails,.NET开源项目Mono Rails和Subsonic,还有微软ASP.NET Team正在做的
张善友
2018/01/30
2K0
点击加载更多

相似问题

在XSL :apply-模板中使用xsl变量作为Xpath值

11

xsl:apply-模板正确放置

10

xsl:template /xsl:apply-模板移除子节点

11

xsl apply-转换后递归地使用模板

13

xsl:apply-模板中的select属性

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文