我试图学习更多有关关系数据库的知识,并且发现没有更好的方法来学习然后实际去做。我决定亲自尝试一下“个人预算会计和预测”。到目前为止,我已经进行了一些研究,并希望对当前的数据库设计和规范化有一些了解。
您对我当前的数据库设计有何想法和建议?我在下面提供了一些信息,以便更好地帮助您:)
披露:这是一个个人项目。不用于家庭作业或工作。
商业事实
银行
ACCOUNT
可以有很多ENTRIES
An
ENTRY
可以是CREDIT
或DEBIT
- 的
ENTRY
日期已计入贷方或借方 - 安
ENTRY
有一个PAYEE
一个
ENTRY
可以被关联到BUDGET CATEGORY
A
CREDIT
的金额为ENTRY
- A
CREDIT
的说明ENTRY
- 一个
CREDIT
可以在未来计划 A的
CREDIT
频率和/或金额可能会重复出现A
DEBIT
的金额为ENTRY
- A
DEBIT
的说明ENTRY
- 一个
DEBIT
可以在未来计划 A的
DEBIT
频率和/或金额可能会重复出现A
PAYEE
有个名字一个
BUDGET
有很多BUDGET CATEGORIES
A
BUDGET
只能与一个日历月份关联一个
BUDGET CATEGORY
可以包含许多ENTRIES
- A
BUDGET CATEGORY
有个名字 A
BUDGET CATEGORY
有BUDGET
金额A
FORECAST
有开始日期- A
FORECAST
有结束日期 - A
FORECAST
有期初余额 - 一个
FORECAST
有很多FORECASTED DAYS
一个
FORECAST
有一个FORECASTED BUDGET
A
FORECASTED DAY
有一个日期- 一个
FORECASTED DAY
可以有很多FORECASTED DEBITS
一个
FORECASTED DAY
可以有很多FORECASTED CREDITS
A
FORECASTED DEBIT
有金额- 一个
FORECASTED DEBIT
有描述 - A
FORECASTED DEBIT
有一个FORECASTED BUDGET CATEGORY
- 一个
FORECASTED DEBIT
有一个PAYEE
一个
FORECASTED DEBIT
可再次发生A
FORECASTED CREDIT
有金额- 一个
FORECASTED CREDIT
有描述 - A
FORECASTED CREDIT
有一个FORECASTED BUDGET CATEGORY
- 一个
FORECASTED CREDIT
有一个PAYEE
一个
FORECASTED CREDIT
可再次发生一个
FORECASTED BUDGET
有很多FORECASTED BUDGET CATEGORIES
一个
FORECASTED BUDGET CATEGORY
可以有很多PAYEES
A
PAYEE
有个名字
样本数据
+----------------+----------+------------------+----------------+---------------+--------------+------------------+
| Account Number | Date | Description | Payee Name | Credit Amount | Debit Amount | Budget Category |
+----------------+----------+------------------+----------------+---------------+--------------+------------------+
| 25178 | 10/01/18 | Payroll | My Work | $1000.00 | | Income |
| 25178 | 10/02/18 | McRibs for Lunch | McDonalds | | $13.12 | Fast Food |
| 25178 | 10/03/18 | Electric Bill | FPL | | $133.68 | Electric |
| 25178 | 10/04/18 | Water Bill | City Water Co. | | $58.12 | Water and Sewage |
| 25178 | 10/05/18 | Clothes for Work | Target | | $65.02 | Clothes |
| 99875 | 10/28/18 | Bonus Check | My Work | $1300.00 | | Income |
+----------------+----------+------------------+----------------+---------------+--------------+------------------+
+----------+-------------+--------------+---------------+-----------------+------------------+
| Due Date | Payee | Debit Amount | Credit Amount | Budget Category | Re-Occurs On Day |
+----------+-------------+--------------+---------------+-----------------+------------------+
| 10/28/18 | Mortgage Co | $1500.00 | | Mortgage | 28 |
| 10/01/18 | My Work | | $990.00 | Income | 1 |
| 10/03/18 | FPL | $110.00 | | Electric | 3 |
+----------+-------------+--------------+---------------+-----------------+------------------+
当前数据库设计
我认为了解为什么做某件事会有所帮助,这样您就可以了解我的逻辑和推理。
- 每个预算可以包含1个以上的预算类别。我添加了
isActive
两个栏Budgets
,并BudgetCategories
在情况下,我想重新激活不同的预算或预算类别。 - 我将事务分成两个非常相似的拆分表,
Debits
并且Credits
看到有两种类型的事务。 - 为了允许和跟踪预定或重复发生的事务,我创建了一个
ScheduledTransactions
表,该表允许我有两个不同的金额,一个为的预期金额ScheduledTransactions
,一个为Debits
或的实际金额Credits
。
- 我认为每个预测都需要开始和结束日期以及开始余额。
- 需要预测每一天,以便能够确定借方和贷方之和。
- 我想我可以使用其他表并添加一些isForecasted Columns,它的工作原理相同。我决定不走这条路,以便在需要进行任何更改的情况下将两者分离,以及如果这是大型应用程序,并且将大型预测与实际交易写入同一表中,我认为这会导致性能问题日志。