Разработка базы данных для прогнозирования

8

Я пытаюсь узнать больше о реляционных базах данных, и я понял, что нет лучшего способа научиться делать что-то. Я решил сделать личную попытку взглянуть на личный бюджет учета и прогнозирования. До сих пор я провел некоторые исследования и хотел бы получить представление о моем текущем дизайне и нормализации баз данных.

Каковы ваши мысли и предложения по поводу моего текущего дизайна баз данных? Я включил некоторую информацию ниже, чтобы лучше помочь вам помочь мне :)

Раскрытие: это личный проект. Не для домашней работы или для работы.

Бизнес факты

  • Банк 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 |
+----------+-------------+--------------+---------------+-----------------+------------------+

Текущий дизайн базы данных

Я подумал, что было бы полезно узнать, ПОЧЕМУ я что-то сделал, чтобы вы могли понять мою логику и аргументацию.

Revision4-прогноз

  • Каждый бюджет может содержать более 1 категории бюджета. Я добавил isActiveстолбец на оба, Budgetsи BudgetCategoriesна случай, если я хочу повторно активировать другой бюджет или категорию бюджета.
  • Я разделил транзакции на две очень похожие таблицы разделения, Debitsи, Creditsкак я увидел, было два типа транзакций.
  • Чтобы разрешить и отследить запланированные или повторяющиеся транзакции, я создал ScheduledTransactionsтаблицу, которая позволила мне иметь две разные суммы, ожидаемую сумму ScheduledTransactionsи фактическую сумму в любом Debitsили Credits.

Revision4-Main

  • Я рассчитывал, что для каждого прогноза потребуется дата начала и окончания, а также начальный баланс.
  • Каждый день необходимо будет прогнозировать, чтобы можно было определить сумму дебетов и кредитов.
  • Я думаю, что я мог бы использовать другие таблицы и добавить несколько столбцов isForecasted, и это работало бы так же. Я решил не идти по этому пути, чтобы разъединить их в случае необходимости внесения каких-либо изменений, а также, если бы это было крупномасштабное приложение, считывающее и записывающее большие прогнозы в те же таблицы, что и реальные транзакции, которые, я думаю, могли бы вызвать журнал проблем с производительностью.
Джон Х
источник
Просто подумайте, нужны ли вам столбцы метаданных в каждой таблице, например, когда вставлена ​​строка, кто ее вставил, когда последний раз обновляли, кто ее обновил, какой процесс и т. д.?
Бижу Хосе
Так как это для личного развития, мне не нужно ничего из этого.
Джон Х
1
Схема и правила нормализации зависят от того, как вы решите моделировать проблему. Традиционно у вас будут отдельные таблицы для фактических данных, бюджетов и прогнозов. Но вы можете иметь их все в одной таблице с атрибутом или флагом, чтобы обозначить разницу. То же самое с DR / CR. Та же таблица, но используйте значения +/- для обозначения ввода / вывода. Как только вы перейдете к учету двойной записи, вам понадобятся обе стороны уравнения для баланса и создания учетных записей. Вы идете так далеко?
Сэр Клятва много-много
1
Я думаю, что это очень амбициозный проект для изучения баз данных. Разработка и нормализация схемы БД - это одно, точное ведение записей - это другое, учет и прогнозирование - еще более сложная задача. Какой твой приоритет?
Сэр Клянется много
@ SirSwears-a-lot Да, я не пойду так далеко. Подумайте только о том, чтобы иметь возможность отслеживать ваши личные финансы по различным бюджетным группам и иметь возможность прогнозировать простые сценарии типа «что если» ... Что если я получу новую оплату за автомобиль и уеду в отпуск на 4 месяца? Как бы выглядело отношение моего дохода к долгу на частоте неделя-неделя или месяц-месяц? Или что, если я изменил свой бюджет на продукты из 500 на 600?
Джон Х

Ответы:

2

В целом: я бы начал со списка вопросов, на которые я хочу ответить. Подобно:

Кому я больше всего плачу? Оплатил ли я счет за перевозку сточных вод в этом месяце? Каковы мои денежные требования на этот месяц? Нужно ли мне выходить и убивать вещи ради еды?

Характер этих вопросов должен определять дизайн схемы.

Тем не менее, эта схема выглядит довольно хорошо.

Я согласен с идеей, что дебеты и кредиты могут быть в одной таблице.

Хокинс Дейл
источник
1

Я бы определил получателей платежей с точки зрения бюджета и типа счета. Скажем, вам нужно перечислить или проконсультироваться с получателями. У меня также был бы активный столбец для получателей. Было бы неплохо узнать, какой счет платит, какой бюджет в будущем.

Эурику
источник