预测审查的数据库设计

Jon*_*n H 8 database-design sql-server best-practices

我正在尝试更多地了解关系数据库,并且我认为没有更好的方法来学习然后实际做某事。我决定亲自尝试看看个人预算会计和预测。到目前为止,我已经做了一些研究,希望对我当前的数据库设计和规范化有所了解。

您对我目前的数据库设计有何想法和建议?我在下面提供了一些信息,以更好地帮助您帮助我:)

披露:这是一个个人项目。不是为了家庭作业或工作。

商业事实

  • 一个银行ACCOUNT可以有很多ENTRIES

  • AnENTRY可以是 aCREDITDEBIT

  • ENTRY有这就算或借记约会
  • 一个ENTRY有一个单一的PAYEE
  • 一个ENTRY可以关联到一个BUDGET CATEGORY

  • ACREDIT有一个数量ENTRY

  • ACREDIT有一个描述ENTRY
  • ACREDIT可以安排在未来
  • ACREDIT可以在频率和/或数量上重复出现

  • ADEBIT有一个数量ENTRY

  • ADEBIT有一个描述ENTRY
  • ADEBIT可以安排在未来
  • ADEBIT可以在频率和/或数量上重复出现

  • APAYEE有名字

  • ABUDGET有很多BUDGET CATEGORIES

  • ABUDGET只能关联到一个日历月

  • ABUDGET CATEGORY可以包含多个ENTRIES

  • ABUDGET CATEGORY有名字
  • ABUDGET CATEGORYBUDGET金额

  • AFORECAST有开始日期

  • AFORECAST有结束日期
  • AFORECAST有一个期初余额
  • AFORECAST有很多FORECASTED DAYS
  • AFORECAST有一个FORECASTED BUDGET

  • AFORECASTED DAY有一个日期

  • AFORECASTED DAY可以有很多FORECASTED DEBITS
  • AFORECASTED DAY可以有很多FORECASTED CREDITS

  • AFORECASTED DEBIT有金额

  • AFORECASTED DEBIT有说明
  • AFORECASTED DEBIT有一个FORECASTED BUDGET CATEGORY
  • AFORECASTED DEBIT有一个PAYEE
  • AFORECASTED DEBIT可能会再次发生

  • AFORECASTED CREDIT有金额

  • AFORECASTED CREDIT有说明
  • AFORECASTED CREDIT有一个FORECASTED BUDGET CATEGORY
  • AFORECASTED CREDIT有一个PAYEE
  • AFORECASTED CREDIT可能会再次发生

  • AFORECASTED BUDGET有很多FORECASTED BUDGET CATEGORIES

  • AFORECASTED BUDGET CATEGORY可以有很多PAYEES

  • APAYEE有名字

样本数据

+----------------+----------+------------------+----------------+---------------+--------------+------------------+
| 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 |
+----------+-------------+--------------+---------------+-----------------+------------------+
Run Code Online (Sandbox Code Playgroud)

当前的数据库设计

我想知道我为什么做某事会很有帮助,这样你就可以理解我的逻辑和推理。

修订 4-预测

  • 每个预算可以包含超过 1 个预算类别。我添加了isActive两个栏Budgets,并BudgetCategories在情况下,我想重新激活不同的预算或预算类别。
  • 我将事务分成两个非常相似的拆分表DebitsCredits正如我所见,有两种类型的事务。
  • 为了允许和跟踪计划或重复发生的交易,我创建了一个ScheduledTransactions表,该表允许我有两个不同的金额,一个是预期的金额ScheduledTransactions,一个是Debits或 中的实际金额Credits

修订版 4-主要

  • 我认为每个预测都需要一个开始和结束日期以及一个起始余额。
  • 每天都需要预测才能确定借方和贷方的总和。
  • 我想我可以使用其他表并添加一些 isForecasted 列,它会起作用。我决定不走这条路,以便在需要进行任何更改以及如果这是一个大型应用程序将大型预测读取和写入与实际交易相同的表中时将两者分离,我认为这会导致性能问题日志。

小智 1

我会根据预算和账户类型来确定收款人。假设您需要列出或咨询收款人。我还会有一个针对收款人的活跃专栏。如果能知道未来哪些账户支付哪些预算,那就太好了。