Я пытаюсь узнать больше о реляционных базах данных, и я понял, что нет лучшего способа научиться делать что-то. Я решил сделать личную попытку взглянуть на личный бюджет учета и прогнозирования. До сих пор я провел некоторые исследования и хотел бы получить представление о моем текущем дизайне и нормализации баз данных.
Каковы ваши мысли и предложения по поводу моего текущего дизайна баз данных? Я включил некоторую информацию ниже, чтобы лучше помочь вам помочь мне :)
Раскрытие: это личный проект. Не для домашней работы или для работы.
Бизнес факты
Банк
ACCOUNTможет иметь многоENTRIESAn
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, и это работало бы так же. Я решил не идти по этому пути, чтобы разъединить их в случае необходимости внесения каких-либо изменений, а также, если бы это было крупномасштабное приложение, считывающее и записывающее большие прогнозы в те же таблицы, что и реальные транзакции, которые, я думаю, могли бы вызвать журнал проблем с производительностью.

