在orms中,我们可以很容易地在save()方法中执行我们想要的操作(例如,当一个记录被添加到喜好表中时,post表中的count列就会增加)。
这很好,但是
为什么数据库不执行此操作?
即使这些操作与数据库无关(例如,连接到Kafka),数据库仍然能够这样做。
我从不担心如果我对db执行原始查询,数据将被破坏。
发布于 2022-08-19 16:32:09
这是一个建筑上的选择。
要么你在ORM上做。但是,您应该确保相关的数据库对象仅通过也使用ORM的服务在代码之外进行访问。
或者使用数据库触发器,并依赖于数据库,从而降低可移植性、数据库锁定和可伸缩性瓶颈的风险(例如,如果触发器需要访问许多行,这可能会根据隔离级别创建锁或性能约束。
强烈建议在方法上保持一致。否则,您可能会遇到这两种方法带来的不便,而无法充分享受各自的好处。
发布于 2022-08-19 20:51:44
我要在这里提出一个“框架挑战”。换句话说,我建议你两者都不应该做。
与其将计数保存在单独的表中,不如对行进行计数。你很可能会在没有问题的事情上进行优化。
发布于 2022-08-22 11:26:36
如果您希望您的数据是绝对一致的(而且您可能会这样做),那么您的数据库应该自己处理这样的事情。
仅仅因为一个团队选择使用ORM并不意味着其他人会使用ORM,甚至那个团队也会永远更多地使用相同的 ORM。
这是软件。一切都变了。
它禁止直接操作数据库!
如果您曾经允许您的开发人员或测试人员直接更改数据,那么这种方法就会平淡无奇。
当然,你是否这么做本身就是一个巨大的讨论(但是,在大多数情况下,我强烈怀疑他们最终会找到一个“理由”来“在那里”!)
任何人无权在此表上执行原始查询(插入或更新)。
连你的DBA都没有?
如果这个数据库被不同的客户端用不同的编程语言使用,他们都应该使用orm,并在保存中实现相同的逻辑(更改了几个更改代码)
所以现在您要在多个ORM中复制这段代码,因为ORM供应商可以这样做,这可能会有不同的效果。
如果这真的很重要,那么就让数据库代表任何客户端和任何系统来处理它。
https://softwareengineering.stackexchange.com/questions/440509
复制相似问题