记账Side Project (二)

过往回顾

记账Side Project (一)

上一篇文章详细的分析了产品的需求, 这篇文章, 主要谈谈数据库应该要怎么设计. 由于我本身数据库设计的知识不是很全面, 很多时候都是属于摸着石头过河, 如果有出错, 或者设计不合理的地方, 还有望各位指正.

数据库设计

User

注册和登陆都属于比较基础的需求, 这方面业界也有很多成熟的设计方案. 那么这个表的设计就不用分析, 直接拿来成熟的设计, 只保留基础功能就可以了.

column type
id int PK
email varchar(50) UQ
first_name varchar(50)
last_name varchar(50)
password varchar(100)

Income

这个表用来记录每一条收入, 不管是固定收入还是意外收入, 或者理财收入, 都将作为一条单独的数据存在这个表格当中.

column type
id int PK
user_id int FK
income_type int FK
name varchar(100)
date date
amount money
note text

对于这个表, 需要采集的数据就是 name, note, amount, date 四项. 对于 income_type, 逻辑上来说, 所有需要被手动输入的收入都输入意外/一次性收入, 所以income_type的值就被确定了. 那么对于固定收入来说, 需要用户建立在另外的表格建立他们的固定收入, 每一个收入周期, 就会有一个收入条目被创建然后插入到这个表格当中.

IncomeType

这个主要储存收入的类型, 比如说固定收入, 意外收入, 理财收入

column type
id int PK
type varchar(50) PK

Expenditure

column type
id int PK
user_id int FK
exp_type int FK
name varchar(100)
date date
amount money
note text

ExpenditureType

column type
id int PK
type varchar(50) PK

有这五个表的存在, “记账” 这个基本功能就可以实现了. 从简单入手, 再到复杂的功能, 一个个慢慢实现.