我们整个「记账本」项目有两个核心模块,第一个是「用户模块」,另外一个是「账单模块」。
用户表 user
整个记账本项目是一个面向多人注册的 C 端项目,所以需要一个「个人中心」模块,用户可以设置自己的头像、个性签名。但是用户名不能修改,因为用户名是用于登录使用,目前系统没有手机验证码的概念,所以这里用户名相当于用户的唯一标示。在编写注册接口的时候,也会先检验数据库中是否存在相同的用户名。这里需要再给一个创建时间,用户后续扩展业务功能,如用户使用系统的年限、根据时间划分登记等等需求。
根据上述需求分析,我们可以设计如下 user 表:
- id:id 字段设置为自增字段,避免认为操作导致数据重复。设置为自增之后,每次往 user 表里新增数据,都会默认 id 加 1,就算你删除了前面的数据,是不会影响到 id 的自增。后续我们通过鉴权,生成用户信息。账单表的存储,都会以用户作为出发点。相当于 A 用户,存储自己的账单时,都会将 A 用户的 id 带上,相当于这份账单标记了用户 A 的 id 。
- username:用于存储用户登录名称。
- password:用于存储用户登录密码。
- signature:根据上图,我们还需要一个 signature 字段作为个性签名。
- avatar:用于存储用户头像信息。
-
新建项目数据库
我们打开 DBevaer 选择本地数据库 localhost,新建一个 account-book 用于本次项目的开发数据库。
创建好之后,在 account-book 下创建一张 user 表,表属性就是我们上述提到的六个字段,如下所示:
我们这里设置 id 为主键。账单表 bill
账单首页,首页顶部有两个信息,代表当月「总支出」和「总收入」。一笔账单记为一项,每一项账单包括几个关键属性,分别是账单的类型(收入或指出)、账单的种类(服饰、交通、奖金等)、账单的金额、账单的日期时间、账单的备注(当种类无法描述清楚时使用)。
根据上述的需求分析,我们可以这样设计 bill 表: id:每张表都需要一个主键,我们照旧,用 id 作为「账单表」的属性。
- pay_type:账单类型,账单无非就是两种类型,支出和收入,我们用 pay_type 作为类型字段,这里约定好 1 为支出,2 为收入。
- amount:账单价格,每个账单都需有一个价格属性,表示该笔账单你消费或收入了多少钱。
- date:账单日期,日期可自由选择,以时间戳的形式存储。
- type_id:账单标签 id,如餐饮、交通、日用、学习、购物等。
- type_name:账单标签名称,如餐饮、交通、日用、学习、购物等。
- user_id:账单归属的用户 id,本小册制作的是多用户项目,相当于可以有多个用户来注册使用,所以存储账单的时候,需要将用户的 id 带上,便于后面查询账单列表之时,过滤出该用户的账单。
- remark:账单备注。
新建账单表
新建一张 bill 表,如下所示:
保存并执行,bill 表生效。
标签表 type
我们希望让用户自己添加自定义标签,比较好拓展。所以这里我们在数据库中设置一张 type 表,让用户可以灵活的设置属于自己的自定义标签。
我们需要给标签表设置下列属性: