• 如何设计充值消费的数据表


      哇,已经很久没写啦,前段时间偷懒了。小编在接下来(到18年末)时间里,会推出基于yii2的cms系统(jcycms),完全开源、代码简单,适合初级phpcoder。接着会推出vue+yii2的简单demo。说多了,言归正传 ^_^

      入行这两年里,一共做过两次关于用户账户的收入支出的功能。其实关于这个,如何巧妙设计一个表来满足呢,我们也都知道关于消费和支出,它有单笔的金额,也有累计的总金额。同时做这样的功能一定是有统计报表、月账单、年账单、单日消费账单.....

      那可能对于没经验的小伙伴的设计思路就是这样:

        (1)第一种

          假设就这样的字段:id、user_id、order_number、money、type、created_at

          type :[1-收入2-支出] money 保留2位小数的浮点数类型,对于金额可能还都是>0

          获取总金额:select sum(money) as incomes from user_pay where type = 1 的结果 - select sum(money) as expenditure from user_pay  where type = 2 的结果

          ...........

        (2)第二种

          假设就这样的字段:id、user_id、order_number、income、expenditure、created_at

          income:收入的金额 

          expenditure:支出的金额

          获取总金额:select sum(income) as incomes from user_pay  的结果 - select sum(expenditure  ) as expenditures  from user_pay 的结果

          ...........

      可能对于我们小白来讲(我也是小白哈,在之前也是这样考虑的)。那这样设计的弊端有哪些了?

        首先 当只考虑金额没有负数的情况,那在页面展示的时候需要通过程序判断 将其变成负数

        然后最重要的就是不利于统计,当数据量很大的时候,我想看到每个月的消费情况(单笔金额多少,余额多少),就和银行app、支付宝、微信一样的账户明细

        我想上面的设计肯定不是最好的选择。那既然我们想要记录余额,那何不在之前的字段里加入balance字段呢,同时我们的金额应当是有正负的。收入(充值)就是正数,支出(消费)就是负数

        那余额就是:前一次的余额+本次金额,如果是第一次那余额就是第一次的金额

        用php代码表示:

        

    function getBalance($money)
    {
         $sql = "SELECT `banlance` FROM `user_pay` WHERE 1  ORDER BY `id` DESC LIMIT 1";
         $row = $db->getone($sql);
        if (!$row) {
              return $money;   
         }
    
         return $row['banlance'] + $money;
    }

      那这样的设计修改,就能很好的做出如上的账户明细了。如果我们在加点,可以把收入总金额加入到字段里,这样我如果找T+N的余额、收入总额、支出总额通过时间来查询出来。

       分享到此结束,本文观点来自于个人实践,肯定也不是最好的设计,有好的,看到的朋友希望留下的美言!

            

  • 相关阅读:
    pyqt中使用matplotlib绘制动态曲线 – pythonic
    pyqt开发教程-搭建环境和开发示例
    QPointer很大程度上避免了野指针(使用if语句判断即可,类似于dynamic_cast),而且使用非常方便 good
    qt5集成libcurl实现tftp和ftp的方法一:搭建环境(五篇文章)
    终于懂了:两个UI组件同时在操作是不可能实现的
    c/s 自动升级(WebService)
    web form中自定义HttpHandler仿mvc
    eclipse plugin 导出插件包
    TaskTracker执行map或reduce任务的过程2
    Jquery多级菜单插件Slimmenu使用说明
  • 原文地址:https://www.cnblogs.com/YangJieCheng/p/9040617.html
Copyright © 2020-2023  润新知