Я пытаюсь узнать больше о реляционных базах данных, и я понял, что нет лучшего способа научиться делать что-то. Я решил сделать личную попытку взглянуть на личный бюджет учета и прогнозирования. До сих пор я провел некоторые исследования и хотел бы получить представление о моем текущем дизайне и нормализации баз данных.
Каковы ваши мысли и предложения по поводу моего текущего дизайна баз данных? Я включил некоторую информацию ниже, чтобы лучше помочь вам помочь мне :)
Раскрытие: это личный проект. Не для домашней работы или для работы.
Бизнес факты
Банк
ACCOUNT
может иметь многоENTRIES
An
ENTRY
может бытьCREDIT
илиDEBIT
- An
ENTRY
имеет дату, на которую было зачислено или списано - Ан
ENTRY
имеет одинPAYEE
ENTRY
Может быть связано сBUDGET CATEGORY
А
CREDIT
имеет количествоENTRY
- А
CREDIT
имеет описаниеENTRY
- А
CREDIT
может быть запланировано в будущем А
CREDIT
может повторяться по частоте и / или количествуА
DEBIT
имеет количествоENTRY
- А
DEBIT
имеет описаниеENTRY
- А
DEBIT
может быть запланировано в будущем А
DEBIT
может повторяться по частоте и / или количествуА
PAYEE
имеет имяА
BUDGET
имеет многоBUDGET CATEGORIES
А
BUDGET
может быть связан только с одним календарным месяцемА
BUDGET CATEGORY
может содержать многоENTRIES
- А
BUDGET CATEGORY
имеет имя А
BUDGET CATEGORY
имеетBUDGET
количествоА
FORECAST
имеет дату начала- А
FORECAST
имеет дату окончания - А
FORECAST
имеет начальный баланс - А
FORECAST
имеет многоFORECASTED DAYS
А
FORECAST
имеет одинFORECASTED BUDGET
А
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 |
+----------+-------------+--------------+---------------+-----------------+------------------+
Текущий дизайн базы данных
Я подумал, что было бы полезно узнать, ПОЧЕМУ я что-то сделал, чтобы вы могли понять мою логику и аргументацию.
- Каждый бюджет может содержать более 1 категории бюджета. Я добавил
isActive
столбец на оба,Budgets
иBudgetCategories
на случай, если я хочу повторно активировать другой бюджет или категорию бюджета. - Я разделил транзакции на две очень похожие таблицы разделения,
Debits
и,Credits
как я увидел, было два типа транзакций. - Чтобы разрешить и отследить запланированные или повторяющиеся транзакции, я создал
ScheduledTransactions
таблицу, которая позволила мне иметь две разные суммы, ожидаемую суммуScheduledTransactions
и фактическую сумму в любомDebits
илиCredits
.
- Я рассчитывал, что для каждого прогноза потребуется дата начала и окончания, а также начальный баланс.
- Каждый день необходимо будет прогнозировать, чтобы можно было определить сумму дебетов и кредитов.
- Я думаю, что я мог бы использовать другие таблицы и добавить несколько столбцов isForecasted, и это работало бы так же. Я решил не идти по этому пути, чтобы разъединить их в случае необходимости внесения каких-либо изменений, а также, если бы это было крупномасштабное приложение, считывающее и записывающее большие прогнозы в те же таблицы, что и реальные транзакции, которые, я думаю, могли бы вызвать журнал проблем с производительностью.