Stored procedures 存储过程应该是多个的还是集中的?

Stored procedures 存储过程应该是多个的还是集中的?,stored-procedures,Stored Procedures,您应该使存储过程具有多大的通用性?它们应该被认为是“一炮打响”还是更通用?考虑以下情况: 一, FindUser(用户名,…) 存储过程将用户id返回给调用方 FindItem(项目名称,…) 存储过程将项目id重新发送给调用者 AddOrder(用户ID、项目ID等) 然后可以将返回的ID传递给第三个存储过程 二, AddOrder(用户名、项目名称等) 在这里,ID的查找是在存储过程中完成的 是否有首选/推荐的方法?谢谢您的想法。就我个人而言,我会选择多个oneHit SP,因为创建

您应该使存储过程具有多大的通用性?它们应该被认为是“一炮打响”还是更通用?考虑以下情况:

一,

  • FindUser(用户名,…)

    存储过程将用户id返回给调用方

  • FindItem(项目名称,…)

    存储过程将项目id重新发送给调用者

  • AddOrder(用户ID、项目ID等)

    然后可以将返回的ID传递给第三个存储过程

二,

  • AddOrder(用户名、项目名称等)
在这里,ID的查找是在存储过程中完成的


是否有首选/推荐的方法?谢谢您的想法。

就我个人而言,我会选择多个oneHit SP,因为创建一个笨重的SP会增加错误处理的复杂性。无效的itemname但有效的用户名等。。。另一方面,有人可能会说,从性能的角度来看,矮胖的可能更好

我会选择多个,但我也很感兴趣其他的想法是什么

+问题1


K

我认为存储过程应该用于数据密集型业务逻辑,因为在应用程序中,计算可能会过于性能密集

拥有一个复杂的sp,会将计算放在数据库层,从而避免向应用程序传输大量数据集。这也允许程序员在不需要重新编译的情况下更改功能,但会减慢调试速度

我发现,使用sps仅通过键(例如userid)或特定字段检索对象(例如user)的数据主要是使用自动生成的数据访问层,我们发现很多时候,每个对象都会生成许多SP


我们试图限制SP报告数据集和复杂的数据计算/操作。

不要陷入这样的陷阱,即必须管理/维护许多简单的过程比只管理几个复杂的过程更困难。我总是发现,每当我们试图让一个过程做多件事情而不是一件专注的事情时,调试和测试就会变得非常困难

如果您说“存储的进程应该多还是集中?”,我认为这是一个不正确的比较

如果您有许多存储过程,那么它们将更加集中精力,因为它们将更小,做的更少。也许你真的想问“许多集中的存储过程,或者更少更广泛的存储过程?”

还应该使用诸如db ghost和其他工具来对存储过程代码(和模式)进行源代码控制,以便像对待其他代码一样对待它。有了这一点,许多较小程序的管理就更容易了

这实际上只是将关注点分离的核心良好设计实践应用于“数据库代码”以及所有其他代码

正如另一个答案所说,我非常喜欢使用存储过程来“处理”数据,尽可能靠近数据库,比如在报告过程中。这是由于性能原因,即让数据库做它擅长的事情


然而,当涉及到许多其他类型的“业务逻辑”时,我们通常会尝试将其排除在存储过程之外,并在我们拥有更好的调试和测试设施的正常代码中。

多个似乎是最好的方法。感谢您的反馈。感谢您精心设计的答案。最后一段让我信服了。我将采用更多但更小的存储过程方法。