zoukankan      html  css  js  c++  java
  • 如何设计充值消费的数据表

      哇,已经很久没写啦,前段时间偷懒了。小编在接下来(到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的余额、收入总额、支出总额通过时间来查询出来。

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

            

  • 相关阅读:
    hdu 1042 N!
    hdu 1002 A + B Problem II
    c++大数模板
    hdu 1004 Let the Balloon Rise
    hdu 4027 Can you answer these queries?
    poj 2823 Sliding Window
    hdu 3074 Multiply game
    hdu 1394 Minimum Inversion Number
    hdu 5199 Gunner
    九度oj 1521 二叉树的镜像
  • 原文地址:https://www.cnblogs.com/YangJieCheng/p/9040617.html
Copyright © 2011-2022 走看看