我正在寻找处理这种情况的最佳方法。我想在数据库表中存储一个摊销计划。每行包含日期,当前余额,付款,市政,利息和新余额。对于典型的30年抵押贷款,这将是360行或数据库插入。
我应该使用Delphi在循环内进行计算并为每个结果执行插入操作,还是应该在存储过程中执行这些计算?
这将是单个用户,本地计算机,桌面应用程序。
答案 0 :(得分:8)
准备好的查询和存储过程在性能方面具有可比性。作为一名应用程序开发人员,我非常厌恶存储过程,因为他们将逻辑从应用程序内部(我可以找到它)移动到查看源代码时看不到的其他位置。让我们面对现实吧,没有人会用不同语言重新开发应用程序。如果有效的话。
因此,如果你的东西是数据库和SQL,并且你对此感到满意,那么存储过程就可以了。但是,如果您主要是应用程序开发人员,那么使用存储过程而不是从代码执行查询时,我看不到任何好处。
答案 1 :(得分:5)
我会在存储过程中执行操作。这样处理数据就在它所属的数据库中。
此外,通过将所有与数据相关的操作保存在数据库中,如果将来某个时候您选择切换语言,则可以节省编码的麻烦。
答案 2 :(得分:2)
如果您碰巧使用AnyDAC,它支持所有受支持数据库的ArrayDML。我认为这是一个很好的功能。这是商业软件,但投资非常好。 (除非作为一个非常满意的客户,否则我不会以任何方式与他们联系。)
答案 3 :(得分:0)
如果您的数据库是本地数据库,并且您没有将其设置为客户端/服务器,那么从性能角度来看可能没什么区别。很大程度上取决于您使用的数据库。 有些具有“数组DML”,它允许您在一个数据库往返中执行所有360个插入,基本上不是执行360插入,而是填充数组绑定变量并执行单个插入。无论如何,最糟糕的方式是使用没有绑定变量的n个插入。 编译和优化的Delphi代码可能比解释的存储过程代码快一些,如果数据库没有编译它(有些可能只使用P代码)。 从设计的角度来看,将数据逻辑放在数据库中通过存储过程发布一种API(可能禁止其他修改数据的方式)可以确保对数据的更强控制。