我有一个包含存款(安全存款、宠物存款等)表的数据库,在某些情况下,这些存款需要减少,即有人购买了补充保险。我是否应该有一个名为alter_deposities的表,其中包含减少的条件和金额,或者这是作为业务逻辑属于应用程序代码的东西?
提前谢谢!

最佳答案

在这种情况下,我喜欢尝试将规则归纳为尽可能基本的规则。所以你可能有一个平减规则,它可以减去x%。然后你可能会有一个基于条件的规则,所以你可以说,当余额大于y时,减去x%。
在您概括了规则之后,我将以业务逻辑的通用形式实现这些规则,并在您的数据库中存储当前活动的规则类型及其输入。
您可以在不安排停机时间、插入新规则的情况下执行此操作,这应该与更新数据库一样简单,如果有新的规则类型,您可以部署新的代码片段。当然这取决于你的环境,我知道在.net中这应该是preety直接向前。
我在一个非常有趣的基于规则的处理系统中工作,在这里我们基本上构建了一个由and&or操作数组成的二叉树,如果树返回true,则运算符将返回true或false。所有这些都被序列化为xml,这使得存储机制对规则类型及其数据需求不敏感。
编辑
基于规则的系统可能非常强大。我使用它们来帮助定位分布在数千个不同库存中的小部件,并根据任意数量的标准排列购买小部件的最佳位置。我见过他们过去在零部件上进行征服,例如在汽车行业,oem喜欢在am零部件上竞争,但只有在某些情况下。
您可能已经定义了一个规则的超集,当项沿着链传递时,您可能会找到其他规则。规则可以由表达式和操作组成。表达式可以表示为子条件树,当操作运行时,子条件的值为true或false。
如果使用.NET,实际上可以使用表达式树构建一个相当动态的系统,并动态创建lamba,它可以表示操作数和操作。
有一些预先构建的规则引擎可以帮助快速启动的东西,但我从来没有找到一个足够便宜或基本的满足我的需要。
在我看来,这个概念的一个扩展就是工作流编程。所以,当存款进入时,假设在您的规则运行后,存款结果大于25%。在这种情况下,您需要一名员工批准此案例。工作流引擎可以封装这种类型的逻辑,并以比传统编码更流畅的方式来表示它。但所有的事情都有很多缺点。每次我开始使用工作流引擎时,它最终都会因为各种原因而崩溃,但通常是因为我们的工作流太简单,无法证明学习该引擎的成本是合理的。

关于database - 这是属于数据库还是属于代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1203552/

10-09 23:02
查看更多