私はリレーショナルデータベースについてもっと学びたいと思っており、実際に何かをするために学ぶより良い方法はないと思いました。私は個人的な予算の会計と予測を見る個人的な試みをすることにしました。これまでにいくつかの調査を行ったので、現在のデータベースの設計と正規化について洞察を得たいと思います。
現在のデータベース設計に関するあなたの考えと提案は何ですか?私はあなたが私を助けるのをよりよく助けるためにいくつかの情報を以下に含めました:)
開示:これは個人的なプロジェクトです。宿題や仕事のためではありません。
ビジネスの事実
銀行
ACCOUNT
は多くのことができますENTRIES
は
ENTRY
、CREDIT
またはDEBIT
- アンは
ENTRY
、それは上の貸方かに引き落とされた日付を持っています - アンは
ENTRY
シングルを持っていますPAYEE
ENTRY
Aに関連付けることができますBUDGET CATEGORY
A
CREDIT
はENTRY
- の
CREDIT
説明がありますENTRY
- A
CREDIT
は将来的にスケジュールできます A
CREDIT
は頻度や量で再発する可能性がありますA
DEBIT
はENTRY
- の
DEBIT
説明がありますENTRY
- A
DEBIT
は将来的にスケジュールできます A
DEBIT
は頻度や量で再発する可能性がありますA
PAYEE
には名前がありますAに
BUDGET
は多くのBUDGET CATEGORIES
A
BUDGET
は単一のカレンダーにのみ関連付けることができますA
BUDGET CATEGORY
は多くのENTRIES
- A
BUDGET CATEGORY
には名前があります A
BUDGET CATEGORY
にはBUDGET
金額がありますA
FORECAST
には開始日があります- A
FORECAST
には終了日があります - A
FORECAST
には期首残高があります - Aに
FORECAST
は多くのFORECASTED DAYS
A
FORECAST
は1つFORECASTED BUDGET
A
FORECASTED DAY
には単一の日付があります- A
FORECASTED DAY
はFORECASTED DEBITS
A
FORECASTED DAY
はFORECASTED CREDITS
A
FORECASTED DEBIT
には金額があります- A
FORECASTED DEBIT
には説明があります - A
FORECASTED DEBIT
はFORECASTED BUDGET CATEGORY
- A
FORECASTED DEBIT
は1つPAYEE
A
FORECASTED DEBIT
は再発する可能性がありますA
FORECASTED CREDIT
には金額があります- A
FORECASTED CREDIT
には説明があります - A
FORECASTED CREDIT
はFORECASTED BUDGET CATEGORY
- A
FORECASTED CREDIT
は1つPAYEE
A
FORECASTED CREDIT
は再発する可能性がありますAに
FORECASTED BUDGET
は多くのFORECASTED BUDGET CATEGORIES
A
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 |
+----------+-------------+--------------+---------------+-----------------+------------------+
現在のデータベース設計
私のロジックと推論を理解できるように、なぜ私が何かをしたのかを知ることが役立つと考えました。
- 各予算には、複数の予算カテゴリを含めることができます。私は、追加
isActive
の両方の列をBudgets
し、BudgetCategories
場合に私は別の予算や予算のカテゴリを再活性化したかったです。 - 私は2つの非常によく似スプリットテーブルにトランザクションを分離
Debits
し、Credits
私が見たように2つのタイプのトランザクションがありました。 - スケジュールされたトランザクションまたは繰り返し発生するトランザクションを許可して追跡するために、
ScheduledTransactions
2つの異なる金額、つまりScheduledTransactions
とのどちらかでの予想金額と実際の金額を設定できるテーブルを作成しました。Debits
Credits
- 各予測には、開始日と終了日、および開始残高が必要になると考えました。
- 借方と貸方の合計を決定できるようにするには、毎日を予測する必要があります。
- 他のテーブルを使用して、いくつかのisForecasted列を追加することもできたと思いますが、同じように機能します。変更を加える必要がある場合や、これが大規模なアプリケーションで実際のトランザクションと同じテーブルに大きな予測を読み書きする場合に備えて、2つを分離するためにそのルートを使用しないことにしました。パフォーマンスの問題のログ。