如何設計充值消費的數據表


  哇,已經很久沒寫啦,前段時間偷懶了。小編在接下來(到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的余額、收入總額、支出總額通過時間來查詢出來。

   分享到此結束,本文觀點來自於個人實踐,肯定也不是最好的設計,有好的,看到的朋友希望留下的美言!

        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM