我们整个「记账本」项目有两个核心模块,第一个是「用户模块」,另外一个是「账单模块」。

用户表 user

整个记账本项目是一个面向多人注册的 C 端项目,所以需要一个「个人中心」模块,用户可以设置自己的头像、个性签名。但是用户名不能修改,因为用户名是用于登录使用,目前系统没有手机验证码的概念,所以这里用户名相当于用户的唯一标示。在编写注册接口的时候,也会先检验数据库中是否存在相同的用户名。这里需要再给一个创建时间,用户后续扩展业务功能,如用户使用系统的年限、根据时间划分登记等等需求。
根据上述需求分析,我们可以设计如下 user 表:

  • id:id 字段设置为自增字段,避免认为操作导致数据重复。设置为自增之后,每次往 user 表里新增数据,都会默认 id 加 1,就算你删除了前面的数据,是不会影响到 id 的自增。后续我们通过鉴权,生成用户信息。账单表的存储,都会以用户作为出发点。相当于 A 用户,存储自己的账单时,都会将 A 用户的 id 带上,相当于这份账单标记了用户 A 的 id 。
  • username:用于存储用户登录名称。
  • password:用于存储用户登录密码。
  • signature:根据上图,我们还需要一个 signature 字段作为个性签名。
  • avatar:用于存储用户头像信息。
  • ctime:用于存储用户创建时间字段。

    新建项目数据库

    我们打开 DBevaer 选择本地数据库 localhost,新建一个 account-book 用于本次项目的开发数据库。
    创建好之后,在 account-book 下创建一张 user 表,表属性就是我们上述提到的六个字段,如下所示:
    image.png
    我们这里设置 id 为主键。

    账单表 bill

    账单首页,首页顶部有两个信息,代表当月「总支出」和「总收入」。一笔账单记为一项,每一项账单包括几个关键属性,分别是账单的类型(收入或指出)、账单的种类(服饰、交通、奖金等)、账单的金额、账单的日期时间、账单的备注(当种类无法描述清楚时使用)。
    根据上述的需求分析,我们可以这样设计 bill 表:

  • id:每张表都需要一个主键,我们照旧,用 id 作为「账单表」的属性。

  • pay_type:账单类型,账单无非就是两种类型,支出和收入,我们用 pay_type 作为类型字段,这里约定好 1 为支出,2 为收入。
  • amount:账单价格,每个账单都需有一个价格属性,表示该笔账单你消费或收入了多少钱。
  • date:账单日期,日期可自由选择,以时间戳的形式存储。
  • type_id:账单标签 id,如餐饮、交通、日用、学习、购物等。
  • type_name:账单标签名称,如餐饮、交通、日用、学习、购物等。
  • user_id:账单归属的用户 id,本小册制作的是多用户项目,相当于可以有多个用户来注册使用,所以存储账单的时候,需要将用户的 id 带上,便于后面查询账单列表之时,过滤出该用户的账单。
  • remark:账单备注。

    新建账单表

    新建一张 bill 表,如下所示:
    image.png
    保存并执行,bill 表生效。

标签表 type

我们希望让用户自己添加自定义标签,比较好拓展。所以这里我们在数据库中设置一张 type 表,让用户可以灵活的设置属于自己的自定义标签。
我们需要给标签表设置下列属性:

  • id:唯一标识,设为主键。
  • name:标签名称,如餐饮、交通、日用、学习、购物等。
  • type:标签类型,默认 1 为收入,2 为支出。
  • user_id:保留字段,设置该标签的用户归属,默认 0 为全部用户可见,某个用户单独设置的标签,user_id 就是该用户的用户 id,在获取列表的时候,方便过滤。

    新建标签表

    image.png
    我们的建表工作,基本上完成了。