2010-06-07 44 views
1

在设计应用程序时,将所有业务逻辑集中在一个地方是非常好的做法。那么为什么我们有时候在存储过程中有业务逻辑呢?我们可以从数据库中获取所有数据并将其存储在数据集中,然后进行处理?在这种情况下应用程序的性能会如何?DataSet v/s数据库

回答

5

那么为什么我们有时候在存储过程中有商业逻辑?

因为有时您需要在将数据返回给客户端之前进行一些处理,那么当您只需要一个子集时返回一堆行将是浪费的。一些复杂的东西也更容易在一个存储过程做的,当你有涉及到临时表或链接的服务器,例如

+0

这对于只想处理业务逻辑中的聚合数据的情况尤其重要。 – 2010-06-07 18:53:14

2

觉得这个简单的例子中,它应该回答你的问题:

如果你有一个数据库与GB的 数据横跨一堆表和你 想要得到一个简单的客户 记录和加入他们的订单,它会是有道理的带回客户端 应用程序或Web服务器的GB数据只是 得到1KB实际上看起来是 ?

您希望尽量减少传递到应用程序层的数据量。你也想让数据处理在最快的地方完成。将它存储在数据集中将不会给你索引和全文搜索选项等。我们使用数据库来存储和检索数据,或者我们在启动时加载到内存中的简单平面文件将是所需要的。如果你的应用和数据很小,那么这可能是一种选择,但在大多数情况下不是。

1

那么,为什么我们有时在存储过程中有 业务逻辑?

我想应该做的处理,它更有意义。

例如,如果您的应用程序有一些进程需要从应用程序&输入较少的数据库输入,最好在数据库级别完成。

这也取决于你正在尝试做的事情&在数据库级别支持这些事情。例如:使用正则表达式或数学函数。

我们可以获取从数据库中的所有数据和 其存储在一个DataSet,然后再处理 呢?在这种情况下,应用程序的性能是 ?

我不认为将所有数据从DB存入应用程序内存是有意义的。
答案取决于数据量是多少?它经常改变吗?如果数据库中的数据发生更改,应用程序的行为如何?

一般来说,如果您有某种静态数据,那么在应用程序内存&中可以不这样做。

0

那么,为什么我们有时候在存储过程中有业务逻辑呢?

另一个重要原因是安全性。您可能希望通过在存储过程中实现代码来监视对数据的访问(特别是写入访问)。这样,所有对数据的访问都通过存储过程隧道传输,并且可以防止可疑访问。

0

这两种模式都存在。

如果你需要做严重的数学和字符串操作或矩阵运算,你最终可能会把大量的数据库拉到内存中。

如果你的工作有一个可以通过join和where子句解决的解决方案,那么SQL就是适合的地方,即使人们可以提出一个哲学上的争论,认为它可以归类为商业逻辑。将基于集合的逻辑移动到中间层可能会导致在中间层重新创建关系数据库,并且它不会很好地完成!

当行数非常少(总是会是),那么它并不重要。与单元测试,工具支持等有关的C#或java相比,SQL是一种相当贫穷的编程语言,因此如果数据库中有100行(并且永远不会有更多!),那么通过一切手段,感觉自由把它们放入内存数据结构中 - 尽管即使在那里,数据库在排序等领域仍然会更有效率和更少错误。