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

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

mysql 充值表设计_如何设计充值消费的数据表相关推荐

  1. qq空间网页设计_网页设计中负空间的有效利用

    qq空间网页设计 Written by Alan Smith 由艾伦·史密斯 ( Alan Smith)撰写 Negative space is a key design element that y ...

  2. 某电商网站的数据库设计(2)——商品销售相关数据表的设计

    某电商网站的数据库设计(2)--商品销售相关数据表的设计 目录 某电商网站的数据库设计(2)--商品销售相关数据表的设计 四.销售信息表 1.非套装商品销售数据表 2.套装商品对应的单品销售数据表 3 ...

  3. android课程设计健身,健身软件课程设计_毕业论文设计.doc

    健身软件课程设计_毕业论文设计 通信建模与仿真课程设计文档 健身日记 小 组 名: wingman 小组成员: 肖键 潘凌 周治杰 何朝云 2015年07月03日 Communication Mode ...

  4. 服装设计_服装设计网_服装设计图_服装款式图-POP服饰流行前线

    服装设计_服装设计网_服装设计图_服装款式图-POP服饰流行前线 服装设计_服装设计网_服装设计图_服装款式图-POP服饰流行前线 posted on 2015-02-10 20:15 lexus 阅 ...

  5. Mysql省市县数据表最新版 省市县三级联动(数据表)

    链接:https://www.liuniukeji.com/index/liuhongyu Mysql省市县数据表最新版 省市县三级联动(数据表) CREATE TABLE city ( id int ...

  6. mysql 评论回复表设计_数据库设计——评论回复功能

    1.概述 评论功能已经成为APP和网站开发中的必备功能.本文主要介绍评论功能的数据库设计. 评论功能最主要的是发表评论和回复评论(删除功能在后台).评论功能的拓展功能体现有以下几方面: (1)单篇文章 ...

  7. mysql表的设计几种方式_支持多种登录方式的数据表设计 | 六阿哥博客

    一个带有用户系统的应用最基本登录方式是站内账号登录,但这种方式往往不能满足我们的需求.现在的应用基本都有站内账号.email.手机和一堆第三方登录,那么如果需要支持这么多种登录方式,或者还有银行卡登录 ...

  8. PLSQL如何将千万数据快速插入到另一张表中_数据库设计中的 9 大常见错误

    作为数据库设计人员,当我们负责数据库项目时,在数据库设计以及把数据库部署到生产环境的过程中可能会遇到一些挑战. 其中一些问题不可避免,也无法控制.但是,其中相当一部分可以追溯到数据库设计本身的质量.我 ...

  9. mysql schema命名规范_数据库设计 命名及编码规范

    http://blog.csdn.net/seusoftware/archive/2010/04/24/5524414.aspx 引用 一.综述 命名和编码过程中,定义有意义的名称,以易于理解.方便书 ...

  10. ui界面颜色设计_界面设计ui的颜色基础

    ui界面颜色设计 重点 (Top highlight) Color is a sensory impression that the eyes perceive from the light, tra ...

最新文章

  1. numpy matplotlib
  2. 《Linux》阿里云部署django全攻略
  3. 通过SQL Server 2008 访问Oracle 10g
  4. stm32按键输入实验c语言,stm32f103学习笔记(三)按键输入(IO口输入)
  5. 给Jquery easyui 的datagrid 每行添加操作链接
  6. 切割日志(mysql,nginx,php tomcat)使用logrotate
  7. 【C#】1.2 控制台应用程序学习要点
  8. 用C#写了一个新增用户就发送邮件和手机短信的SqlServer触发器(附源码)
  9. MCU之芯唐ARM9(转)
  10. 如何搜索网易云中的评论
  11. Python 导入包时报错 Traceback (most recent call last)
  12. 印象笔记android,印象笔记(Evernote) Android SDK 更新
  13. 网站被cc攻击,怎么防止网站被cc
  14. 数字温湿度传感器DHT11
  15. DNS服务器可能不可用
  16. Stata基础自学——数据查看
  17. linux内核2.6.3x--Network device support
  18. 前端可视化数据大屏(1)
  19. 痘印服务器维护,脸上有痘印怎么弄才能消除
  20. linux服务器如何测试网速

热门文章

  1. IBM X3530 M4 RAID 卡驱动下载
  2. MP4测试视频URL地址分享,亲测有效。可用于测试HTML5播放器效果。
  3. torch.utils.tensorboard用法
  4. Android 8.1 9.0 10.0 在系统app安装第三方app弹出 解析安装包出现问题 的解决方案
  5. 基于BootStrap仿淘宝星星商品评价案例
  6. 香港公司银行开户需要注意。
  7. ARCGIS坐标系统
  8. 依概率收敛和依分布收敛(附一道例题)
  9. 长短期记忆网络(LSTM)
  10. orb-slam系列 LoopClosing线程 ComputeSim3(十一)