mysql db和php结构存储用户虚拟货币

时间:2013-12-14 16:06:15

标签: php mysql transactions laravel sms

我在我的国家拥有小型短信高级网关。现在我正在重建它,所以问题是如何组织数据库结构,这样就可以从每个用户帐户中提取资金或增加资金(当进行新的短信交易时)

现在我有结构,当我存储每个有金钱价值的交易时,让我们说1 $,每个用户都有他的静态帐户,由user_id组织,其中包含金钱:

user_id money

1       15.55

Flow就像这样:

  1. 交易完成。
  2. 我收到了费用。
  3. 然后我写入数据库一个交易
  4. 还可以像这样添加用户钱包:money = money +1,
  5. 但我认为这种结构很糟糕,因为你需要复制所有数据,而且很有可能数据不同步。 并且当在用户统计中我将计算他的所有交易时,可能存在交易中的钱与钱包中的钱不同的情况。退出用户帐户非常困难,因为我将它们存储在单独的表中作为“撤销标记”和期间,这样当我数钱时,我将这段时间与交易分开。

    据我所知,银行没有静态用户钱包,所有款项都在每天结束时计算,并且会有特殊标记,但找不到任何相关信息。

    所以请指向数据库结构的正确方向以保证用户资金,这样就可以创建统计数据,撤销并动态添加资金。

    我正在使用PHP / laravel和mysql数据库。

    修改: 根据评论中的要求,我将发布旧的代码结构: 当进行交易时,我在数据库中写一条记录:

    sms_records:

    id = 12345
    transaction_id = 12345
    value = 1.50 ( $ )
    user_id = 10
    datetime = 05.12.2013
    ... other columns ...
    

    我也向用户钱包(user_accounts)收费

    id = 12345
    user_id = 10
    money = money + 1.50 ( $ )
    

    用户可以按月(1个月)从月的第1天到月的最后一天查看统计数据。提取是在上个月(期间)的每个月进行的

    撤消时,我在数据库中插入一个特殊标记:

    period_marks:

    id = 12345
    payout_id => referes to bill table
    start_period = 01.12.2013
    end_period = 31.12.2013
    period_mark = 2013-12
    total = 1.50 ( $ )
    
    ( so it means that all transactions that was made from 01.12.2013 till 31.12.2013 are payed out to user )
    

    并且在撤回时我从静态用户帐户中获取资金:

    UPDATE user_accounts SET money = money - '1.50' WHERE user_id = 12345.
    

    我认为这种结构非常困难和错误。使用这种结构,在静态用户帐户(用户钱包)中犯错是非常简单的,当您将钱包中的钱与统计数据(所有记录)进行比较时,它可能会导致统计数据和静态用户帐户之间的总和不同。

    如何组织这种结构会更好?

0 个答案:

没有答案