日期:2014-05-19  浏览次数:20857 次

业务逻辑写在SQL里,还是在JAVA文件中处理
比如对表进行复杂的金额计算(以交易金额*扣率为例),是在sql中直接搞定:
selec 交易金额*扣率 from trans   

还是直接
s
elec 交易金额 from trans   

通过JAVA 的list获取结果集,在list进行  交易金额*扣率  好呢?

望赐教

------最佳解决方案--------------------
楼主要注意程序要有灵活性,后期维护也很重要..

1.灵活性是如果哪天用户说还对其值减去1.或者怎么样的功能呢?你如果没法改SQL了,改怎么办?也就是改SQL达不到用户需求怎么办?那么如果要在代码中实现,为什么不把所以逻辑都写在代码中?
2.后期维护,其实和上面差不多..我们公司里面很多时候事,DAO里面就对表简单的增删改查功能,然后逻辑都写在代码中,如果代码能做到!这样我就也可以重用些sql.不要一个功能就一个sql语句!!!

希望能帮到你!
------其他解决方案--------------------
不建议写在数据库中

如果你只是想显示出这些东西
那你只需要
select 金额,扣率 from table
然后不要去管它
显示的时候比如说你需要显示总金额什么的
你就在显示的时候让页面自己去计算金额×扣率
这样数据库和服务器就压力小了

要是如果执行的中间计算
那还是建议在代码中实现
因为代码的灵活性比较高

你都说了是复杂的计算了
放在数据库中
那岂不是要难为数据库了嘛哈哈

祝你成功
------其他解决方案--------------------
还是建议你写在程序里
------其他解决方案--------------------
写在java文件里面比较好,sql只进行简单的数据库操作
------其他解决方案--------------------
写在java程序里面啦。
------其他解决方案--------------------
衡量系统负载在服务器还是在数据.均衡配比.
但一般认为由服务器来处理这些计算速度上不会比数据库慢.
------其他解决方案--------------------
引用:
比如对表进行复杂的金额计算(以交易金额*扣率为例),是在sql中直接搞定:
selec 交易金额*扣率 from trans  

还是直接
s
elec 交易金额 from trans  

通过JAVA 的list获取结果集,在list进行 交易金额*扣率 好呢?

望赐教

像楼主这样的情况建议在数据库表中间再增加一个冗余字段来存储"交易金额*扣率"的结果,
在Insert数据的时候就将"交易金额*扣率"的结果插入数据库,而不在读取的时候来做逻辑计算.
在设计模式中这种冗余是允许的,可以提高系统的运行效率,也使数据库表结构更加清晰.

------其他解决方案--------------------
写在数据库比较好:
第一:运用起来比较方便;
其次:数据库端的操作不需要太多的服务器的性能消耗,相比能在处理优化。
------其他解决方案--------------------
引用:
衡量系统负载在服务器还是在数据.均衡配比.
但一般认为由服务器来处理这些计算速度上不会比数据库慢.

看你什么数据库, 
什么服务器;
用户多少人;
分布式方面怎样设计。
总之, 看情况吧……
------其他解决方案--------------------
同时你要结合5#说的慎重考虑下才好
------其他解决方案--------------------
数据库
------其他解决方案--------------------
写在程序中好些。。。。个人推荐
------其他解决方案--------------------
还是写在程序里好一点吧!
------其他解决方案--------------------
在oracle 写SQL 写的话,会将SQL语句搞得非常长并且复杂~

要用到oracle的decode(或者case when then ……) 函数,参加逻辑。

目前就是不清楚,数据量很大的话(百万-千万级)

到底是在数据库中计算快,还是在代码中计算快。
------其他解决方案--------------------
还有一个顾虑就是:

数据库中进行  交易金额*扣率  时,需要得到精确的计算结果并根据业务规定的精度进行四舍五入。

而在JAVA中 用double 不能精确地对数据表中的“交易金额”建模,需要使用BigDecimal 辅助计算精确结

果。

这样的话,在JAVA中用速度较慢的BigDecimal ,性能又觉得不好。



------其他解决方案--------------------
- -# 啊又大牛  赐教?
------其他解决方案--------------------