web-dev-qa-db-ja.com

予測レビューのためのデータベース設計

私はリレーショナルデータベースについてもっと学びたいと思っており、実際に何かをするために学ぶより良い方法はないと思いました。私は個人的な予算の会計と予測を見る個人的な試みをすることにしました。これまでにいくつかの調査を行ったので、現在のデータベースの設計と正規化について洞察を得たいと思います。

現在のデータベース設計に関するあなたの考えと提案は何ですか?私はあなたが私を助けるのをよりよく助けるために以下のいくつかの情報を含めました:)

開示:これは個人的なプロジェクトです。宿題や仕事のためではありません。

ビジネスの事実

  • 銀行ACCOUNTには、多くのENTRIESを含めることができます

  • ENTRYは、CREDITまたはDEBITのいずれかです。

  • ENTRYには、貸方または借方に記入された日付があります
  • ENTRYにはPAYEEが1つあります
  • ENTRYBUDGET CATEGORYに関連付けることができます

  • CREDITには、ENTRYの量があります

  • CREDITにはENTRYの説明があります
  • CREDITは将来的にスケジュールできます
  • CREDITは、頻度や量で繰り返し発生する可能性があります

  • DEBITには、ENTRYの量があります

  • DEBITにはENTRYの説明があります
  • DEBITは将来的にスケジュールできます
  • DEBITは、頻度や量で繰り返し発生する可能性があります

  • PAYEEには名前があります

  • BUDGETには多数のBUDGET CATEGORIES

  • BUDGETは、1つのカレンダーにのみ関連付けることができます。

  • BUDGET CATEGORYには多くのENTRIESを含めることができます

  • BUDGET CATEGORYには名前があります
  • BUDGET CATEGORYにはBUDGETの金額があります

  • FORECASTには開始日があります

  • FORECASTには終了日があります
  • FORECASTには期首残高があります
  • FORECASTには多数のFORECASTED DAYS
  • FORECASTにはFORECASTED BUDGETが1つあります

  • FORECASTED DAYには単一の日付があります

  • FORECASTED DAYには多数のFORECASTED DEBITSを含めることができます
  • FORECASTED DAYには多数のFORECASTED CREDITSを含めることができます

  • FORECASTED DEBITには金額があります

  • FORECASTED DEBITには説明があります
  • FORECASTED DEBITにはFORECASTED BUDGET CATEGORYがあります
  • FORECASTED DEBITには単一のPAYEEがあります
  • FORECASTED DEBITは繰り返し発生する可能性があります

  • FORECASTED CREDITには金額があります

  • FORECASTED CREDITには説明があります
  • FORECASTED CREDITにはFORECASTED BUDGET CATEGORYがあります
  • FORECASTED CREDITには単一のPAYEEがあります
  • FORECASTED CREDITは繰り返し発生する可能性があります

  • FORECASTED BUDGETには多数のFORECASTED BUDGET CATEGORIESがあります

  • FORECASTED BUDGET CATEGORYには多くのPAYEESを含めることができます

  • 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 |
+----------+-------------+--------------+---------------+-----------------+------------------+

現在のデータベース設計

私が何かをした理由を知っておくと、私の論理と推論を理解できるので役立つと思いました。

Revision4-Forecast

  • 各予算には、複数の予算カテゴリを含めることができます。別の予算または予算カテゴリを再度有効にする場合に備えて、isActiveBudgetsの両方にBudgetCategories列を追加しました。
  • 2つのタイプのトランザクションがあったので、トランザクションを2つの非常によく似た分割テーブルDebitsCreditsに分けました。
  • スケジュールされたトランザクションまたは繰り返し発生するトランザクションを許可および追跡するために、ScheduledTransactionsの期待値とScheduledTransactionsまたはDebitsの実際の量の2つの異なる金額を設定できるCreditsテーブルを作成しました。

Revision4-Main

  • 各予測には、開始日と終了日、および開始残高が必要になると考えました。
  • 借方と貸方の合計を決定できるように、毎日予測する必要があります。
  • 他のテーブルを使用して、いくつかのisForecasted Columnsを追加することもできたと思いますが、同じように機能します。変更を加える必要がある場合、およびこれが大規模なアプリケーションで実際のトランザクションと同じテーブルに大きな予測を読み書きする場合に備えて、2つを分離するためにそのルートを使用しないことにしました。パフォーマンスの問題のログ。
8
Jon H

より一般的には、まず、回答したい質問のリストから始めます。お気に入り:

誰が一番払っているの?今月、下水道料金を支払いましたか?今月の現金の要件を教えてください。外に出て食べ物を殺す必要がありますか?

これらの質問の性質により、スキーマの設計が促進されます。

とは言っても、このスキーマはかなりよく見えます。

私は借方と貸方が単一のテーブルにある可能性があるという考えに同意します。

2
Hawkins Dale

予算とアカウントの種類の観点から、受取人を特定します。受取人をリストまたは相談する必要があるとします。また、受取人のアクティブな列があります。今後、どのアカウントがどの予算を支払うかを知るのはいいことです。

1
Eurico