在设计应用程序时,将所有业务逻辑集中在一个地方是非常好的做法。那么为什么我们有时候在存储过程中有业务逻辑呢?我们可以从数据库中获取所有数据并将其存储在数据集中,然后进行处理?在这种情况下应用程序的性能会如何?DataSet v/s数据库
回答
那么为什么我们有时候在存储过程中有商业逻辑?
因为有时您需要在将数据返回给客户端之前进行一些处理,那么当您只需要一个子集时返回一堆行将是浪费的。一些复杂的东西也更容易在一个存储过程做的,当你有涉及到临时表或链接的服务器,例如
觉得这个简单的例子中,它应该回答你的问题:
如果你有一个数据库与GB的 数据横跨一堆表和你 想要得到一个简单的客户 记录和加入他们的订单,它会是有道理的带回客户端 应用程序或Web服务器的GB数据只是 得到1KB实际上看起来是 ?
您希望尽量减少传递到应用程序层的数据量。你也想让数据处理在最快的地方完成。将它存储在数据集中将不会给你索引和全文搜索选项等。我们使用数据库来存储和检索数据,或者我们在启动时加载到内存中的简单平面文件将是所需要的。如果你的应用和数据很小,那么这可能是一种选择,但在大多数情况下不是。
那么,为什么我们有时在存储过程中有 业务逻辑?
我想应该做的处理,它更有意义。
例如,如果您的应用程序有一些进程需要从应用程序&输入较少的数据库输入,最好在数据库级别完成。
这也取决于你正在尝试做的事情&在数据库级别支持这些事情。例如:使用正则表达式或数学函数。
我们可以获取从数据库中的所有数据和 其存储在一个DataSet,然后再处理 呢?在这种情况下,应用程序的性能是 ?
我不认为将所有数据从DB存入应用程序内存是有意义的。
答案取决于数据量是多少?它经常改变吗?如果数据库中的数据发生更改,应用程序的行为如何?
一般来说,如果您有某种静态数据,那么在应用程序内存&中可以不这样做。
那么,为什么我们有时候在存储过程中有业务逻辑呢?
另一个重要原因是安全性。您可能希望通过在存储过程中实现代码来监视对数据的访问(特别是写入访问)。这样,所有对数据的访问都通过存储过程隧道传输,并且可以防止可疑访问。
这两种模式都存在。
如果你需要做严重的数学和字符串操作或矩阵运算,你最终可能会把大量的数据库拉到内存中。
如果你的工作有一个可以通过join和where子句解决的解决方案,那么SQL就是适合的地方,即使人们可以提出一个哲学上的争论,认为它可以归类为商业逻辑。将基于集合的逻辑移动到中间层可能会导致在中间层重新创建关系数据库,并且它不会很好地完成!
当行数非常少(总是会是),那么它并不重要。与单元测试,工具支持等有关的C#或java相比,SQL是一种相当贫穷的编程语言,因此如果数据库中有100行(并且永远不会有更多!),那么通过一切手段,感觉自由把它们放入内存数据结构中 - 尽管即使在那里,数据库在排序等领域仍然会更有效率和更少错误。
- 1. ADO VS DataSet和数据表
- 2. Datatable vs Dataset
- 3. OleDb数据库到DataSet和回到C#?
- 4. 不能DataSet中保存回数据库
- 5. SOA vs数据库
- 6. Spark RDD vs DataSet性能
- 7. Cookie vs会话vs数据库
- 8. 数据库日志VS
- 9. MapDB vs常规数据库
- 10. UnitOfWork vs数据库连接
- 11. SQL数据库vs对象
- 12. Android - xml vs.数据库
- 13. 数据库vs资源
- 14. SharedPreferences与数据库vs JSON
- 15. DataSet不保存数据
- 16. 从ListBox到DataSet的数据
- 17. Mongodb单个数据库vs每个客户端的数据库vs每个客户端的数据库
- 18. 单数据库调用VS多个数据库调用性能
- 19. 深度数据库中的数据库Vs缓存管理
- 20. MongoDB多个数据库vs单个数据库
- 21. VS数据库版 - 数据库项目与服务器项目
- 22. 图数据库vs关系数据库时空复杂
- 23. EF数据库第一Edmx数据库类型nvarchar vs varchar
- 24. 单身数据库vs预存数据库
- 25. 版本数据库使用VS 2010数据库项目
- 26. VS 2008数据库项目缺少数据库引用节点
- 27. 一个数据库vs很多数据库
- 28. 主内存数据库vs对象数据库
- 29. 在运行时将ADO.Net DataSet指向不同的数据库?
- 30. 如何使用C#将ODBC DataSet对象写入数据库表?
这对于只想处理业务逻辑中的聚合数据的情况尤其重要。 – 2010-06-07 18:53:14