首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用orm事件或数据库触发器

使用orm事件或数据库触发器
EN

Software Engineering用户
提问于 2022-08-19 16:20:05
回答 3查看 182关注 0票数 0

在orms中,我们可以很容易地在save()方法中执行我们想要的操作(例如,当一个记录被添加到喜好表中时,post表中的count列就会增加)。

这很好,但是

  • 它禁止直接操作数据库!
  • 任何人无权在此表上执行原始查询(插入或更新)。
  • 如果这个数据库被不同的客户端用不同的编程语言使用,他们都应该使用orm,并在保存中实现相同的逻辑(更改了几个更改代码)

为什么数据库不执行此操作?

即使这些操作与数据库无关(例如,连接到Kafka),数据库仍然能够这样做。

我从不担心如果我对db执行原始查询,数据将被破坏。

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2022-08-19 16:32:09

这是一个建筑上的选择。

要么你在ORM上做。但是,您应该确保相关的数据库对象仅通过也使用ORM的服务在代码之外进行访问。

或者使用数据库触发器,并依赖于数据库,从而降低可移植性、数据库锁定和可伸缩性瓶颈的风险(例如,如果触发器需要访问许多行,这可能会根据隔离级别创建锁或性能约束。

强烈建议在方法上保持一致。否则,您可能会遇到这两种方法带来的不便,而无法充分享受各自的好处。

票数 4
EN

Software Engineering用户

发布于 2022-08-19 20:51:44

我要在这里提出一个“框架挑战”。换句话说,我建议你两者都不应该做。

与其将计数保存在单独的表中,不如对行进行计数。你很可能会在没有问题的事情上进行优化。

票数 2
EN

Software Engineering用户

发布于 2022-08-22 11:26:36

如果您希望您的数据是绝对一致的(而且您可能会这样做),那么您的数据库应该自己处理这样的事情。

仅仅因为一个团队选择使用ORM并不意味着其他人会使用ORM,甚至那个团队也会永远更多地使用相同的 ORM。

这是软件。一切都变了。

它禁止直接操作数据库!

如果您曾经允许您的开发人员或测试人员直接更改数据,那么这种方法就会平淡无奇。

当然,你是否这么做本身就是一个巨大的讨论(但是,在大多数情况下,我强烈怀疑他们最终会找到一个“理由”来“在那里”!)

任何人无权在此表上执行原始查询(插入或更新)。

连你的DBA都没有?

如果这个数据库被不同的客户端用不同的编程语言使用,他们都应该使用orm,并在保存中实现相同的逻辑(更改了几个更改代码)

所以现在您要在多个ORM中复制这段代码,因为ORM供应商可以这样做,这可能会有不同的效果。

如果这真的很重要,那么就让数据库代表任何客户端和任何系统来处理它。

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

https://softwareengineering.stackexchange.com/questions/440509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档