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

  哇,已經好久沒寫啦,前段時間偷懶了。小編在接下來(到18年底)時間裏,會推出基於yii2的cms系統(jcycms),徹底開源、代碼簡單,適合初級phpcoder。接着會推出vue+yii2的簡單demo。說多了,言歸正傳 ^_^php

  入行這兩年裏,一共作過兩次關於用戶帳戶的收入支出的功能。其實關於這個,如何巧妙設計一個表來知足呢,咱們也都知道關於消費和支出,它有單筆的金額,也有累計的總金額。同時作這樣的功能必定是有統計報表、月帳單、年帳單、單日消費帳單.....vue

  那可能對於沒經驗的小夥伴的設計思路就是這樣:sql

    (1)第一種微信

      假設就這樣的字段:id、user_id、order_number、money、type、created_atyii2

      type :[1-收入2-支出] money 保留2位小數的浮點數類型,對於金額可能還都是>0app

      獲取總金額:select sum(money) as incomes from user_pay where type = 1 的結果 - select sum(money) as expenditure from user_pay  where type = 2 的結果yii

      ...........spa

    (2)第二種設計

      假設就這樣的字段:id、user_id、order_number、income、expenditure、created_atcode

      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的餘額、收入總額、支出總額經過時間來查詢出來。

   分享到此結束,本文觀點來自於我的實踐,確定也不是最好的設計,有好的,看到的朋友但願留下的美言!

相關文章
相關標籤/搜索