比如对表进行复杂的金额计算(以交易金额*扣率为例),是在sql中直接搞定:
selec 交易金额*扣率 from trans   还是直接
s
elec 交易金额 from trans   通过JAVA 的list获取结果集,在list进行  交易金额*扣率  好呢?望赐教

解决方案 »

  1.   

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

  2.   

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

  3.   

    不建议写在数据库中如果你只是想显示出这些东西
    那你只需要
    select 金额,扣率 from table
    然后不要去管它
    显示的时候比如说你需要显示总金额什么的
    你就在显示的时候让页面自己去计算金额×扣率
    这样数据库和服务器就压力小了要是如果执行的中间计算
    那还是建议在代码中实现
    因为代码的灵活性比较高你都说了是复杂的计算了
    放在数据库中
    那岂不是要难为数据库了嘛哈哈祝你成功
      

  4.   

    在oracle 写SQL 写的话,会将SQL语句搞得非常长并且复杂~要用到oracle的decode(或者case when then ……) 函数,参加逻辑。目前就是不清楚,数据量很大的话(百万-千万级)到底是在数据库中计算快,还是在代码中计算快。
      

  5.   

    还有一个顾虑就是:数据库中进行  交易金额*扣率  时,需要得到精确的计算结果并根据业务规定的精度进行四舍五入。而在JAVA中 用double 不能精确地对数据表中的“交易金额”建模,需要使用BigDecimal 辅助计算精确结果。这样的话,在JAVA中用速度较慢的BigDecimal ,性能又觉得不好。
      

  6.   

    写在java文件里面比较好,sql只进行简单的数据库操作