【发布时间】:2010-05-17 15:20:45
【问题描述】:
大家好,我想知道什么时候我应该更喜欢编写存储过程而不是编写编程逻辑和使用 ORM 或其他东西提取数据。
【问题讨论】:
标签: c# sql-server stored-procedures orm preferences
大家好,我想知道什么时候我应该更喜欢编写存储过程而不是编写编程逻辑和使用 ORM 或其他东西提取数据。
【问题讨论】:
标签: c# sql-server stored-procedures orm preferences
存储过程在服务器端执行。
这意味着处理大量数据不需要通过网络连接传递这些数据。
此外,通过存储过程,您可以构建一致的复杂业务逻辑。
比如说,每次插入一笔交易都需要更新账户余额,而且需要一次插入很多笔交易。
您可以通过输入传递一个表变量或临时表,并在程序。这样会更有效率。
【讨论】:
我更喜欢 SP 而不是编程逻辑,主要有两个原因
Row_Delete 而不是 DELETE FROM Rows 听起来不错。【讨论】:
除非您发现性能问题,否则永远不要。 (主要是意见)
(杰夫的一篇博文!) http://www.codinghorror.com/blog/2004/10/who-needs-stored-procedures-anyways.html
如果您将存储过程视为优化: http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize
【讨论】:
适当时。
你不能说“从不”或“总是”。
在某些情况下,数据库引擎的寿命会比您的客户端代码长。我敢打赌,数据库引擎升级/重构正在进行更多的 DAL 或 ORM 升级/重构。
最后,为什么我不能将代码封装在存储过程中?这不是好事吗?
【讨论】:
与以往一样,您决定使用哪个将取决于您的应用程序及其环境。
这里有几种思想流派,这场辩论总是引起双方强烈的情绪。
存储过程(以及 Quassnoi 提到的大数据移动)的优点是逻辑被绑定在数据库中,因此可能更安全。它也只在一个地方。
但是,有些人认为应用程序逻辑的位置应该在应用程序中,特别是如果您计划访问其他类型的数据库(您必须经常为此编写不同的 SP)。
另一个考虑因素可能是实现应用程序所需的资源技能。
【讨论】:
存储过程比 ORM 更可取的点是您有多个应用程序与同一个数据库通信的点。此时,您希望将查询逻辑嵌入到一个地方,而不是每个应用程序一次。即使在这里,您也可能更喜欢服务层(可以水平扩展)而不是数据库(只能垂直扩展)。
【讨论】: