我试图学习更多有关关系数据库的知识,并且发现没有更好的方法来学习然后实际去做。我决定亲自尝试一下“个人预算会计和预测”。到目前为止,我已经进行了一些研究,并希望对当前的数据库设计和规范化有一些了解。
您对我当前的数据库设计有何想法和建议?我在下面提供了一些信息,以便更好地帮助您:)
披露:这是一个个人项目。不用于家庭作业或工作。
商业事实
银行
ACCOUNT可以有很多ENTRIESAn
ENTRY可以是CREDIT或DEBIT- 的
ENTRY日期已计入贷方或借方 - 安
ENTRY有一个PAYEE 一个
ENTRY可以被关联到BUDGET CATEGORYA
CREDIT的金额为ENTRY- A
CREDIT的说明ENTRY - 一个
CREDIT可以在未来计划 A的
CREDIT频率和/或金额可能会重复出现A
DEBIT的金额为ENTRY- A
DEBIT的说明ENTRY - 一个
DEBIT可以在未来计划 A的
DEBIT频率和/或金额可能会重复出现A
PAYEE有个名字一个
BUDGET有很多BUDGET CATEGORIESA
BUDGET只能与一个日历月份关联一个
BUDGET CATEGORY可以包含许多ENTRIES- A
BUDGET CATEGORY有个名字 A
BUDGET CATEGORY有BUDGET金额A
FORECAST有开始日期- A
FORECAST有结束日期 - A
FORECAST有期初余额 - 一个
FORECAST有很多FORECASTED DAYS 一个
FORECAST有一个FORECASTED BUDGETA
FORECASTED DAY有一个日期- 一个
FORECASTED DAY可以有很多FORECASTED DEBITS 一个
FORECASTED DAY可以有很多FORECASTED CREDITSA
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可以有很多PAYEESA
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,它的工作原理相同。我决定不走这条路,以便在需要进行任何更改的情况下将两者分离,以及如果这是大型应用程序,并且将大型预测与实际交易写入同一表中,我认为这会导致性能问题日志。

