Design de banco de dados para revisão de previsão

8

Estou tentando aprender mais sobre bancos de dados relacionais e achei que não há melhor maneira de aprender do que realmente fazer alguma coisa. Decidi fazer uma tentativa pessoal de analisar a contabilidade e a previsão de orçamento pessoal. Eu fiz algumas pesquisas até agora e gostaria de obter algumas dicas sobre o meu atual Design e Normalização de Banco de Dados.

Quais são seus pensamentos e sugestões no meu Design de Banco de Dados atual? Incluí algumas informações abaixo para melhor ajudar você a me ajudar :)

Divulgação: Este é um projeto pessoal. Não para trabalhos de casa ou para o trabalho.

Fatos de negócios

  • Um banco ACCOUNTpode ter muitosENTRIES

  • Um ENTRYpode ser um CREDITouDEBIT

  • Um ENTRYtem uma data em que foi creditado ou debitado em
  • Um ENTRYtem um únicoPAYEE
  • Um ENTRYpode ser associado a umBUDGET CATEGORY

  • A CREDITtem uma quantidade doENTRY

  • A CREDITtem uma descrição doENTRY
  • A CREDITpode ser agendado no futuro
  • A CREDITpode ser recorrente em frequência e / ou quantidade

  • A DEBITtem uma quantidade doENTRY

  • A DEBITtem uma descrição doENTRY
  • A DEBITpode ser agendado no futuro
  • A DEBITpode ser recorrente em frequência e / ou quantidade

  • A PAYEEtem um nome

  • A BUDGETtem muitosBUDGET CATEGORIES

  • A BUDGETsó pode ser associado a um único mês do calendário

  • A BUDGET CATEGORYpode conter muitosENTRIES

  • A BUDGET CATEGORYtem um nome
  • A BUDGET CATEGORYtem uma BUDGETquantidade

  • A FORECASTtem uma data de início

  • A FORECASTtem uma data de término
  • A FORECASTtem um saldo inicial
  • A FORECASTtem muitosFORECASTED DAYS
  • A FORECASTtem um únicoFORECASTED BUDGET

  • A FORECASTED DAYtem uma única data

  • A FORECASTED DAYpode ter muitosFORECASTED DEBITS
  • A FORECASTED DAYpode ter muitosFORECASTED CREDITS

  • A FORECASTED DEBITtem uma quantidade

  • A FORECASTED DEBITtem uma descrição
  • A FORECASTED DEBITtem umFORECASTED BUDGET CATEGORY
  • A FORECASTED DEBITtem um únicoPAYEE
  • A FORECASTED DEBITpode ser recorrente

  • A FORECASTED CREDITtem uma quantidade

  • A FORECASTED CREDITtem uma descrição
  • A FORECASTED CREDITtem umFORECASTED BUDGET CATEGORY
  • A FORECASTED CREDITtem um únicoPAYEE
  • A FORECASTED CREDITpode ser recorrente

  • A FORECASTED BUDGETtem muitosFORECASTED BUDGET CATEGORIES

  • A FORECASTED BUDGET CATEGORYpode ter muitosPAYEES

  • A PAYEEtem um nome

Dados de amostra

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

Design atual do banco de dados

Achei que seria útil saber por que fiz algo para que você possa entender minha lógica e raciocínio.

Revisão4-Previsão

  • Cada orçamento pode conter mais de uma categoria de orçamento. Eu adicionei uma isActivecoluna em ambos Budgetse BudgetCategoriesno caso de desejar reativar um orçamento ou categoria de orçamento diferente.
  • Separei as transações em duas tabelas divididas muito parecidas Debitse, Creditscomo vi, havia dois tipos de transações.
  • Para permitir e rastrear transações agendadas ou recorrentes, criei uma ScheduledTransactionstabela que me permitia ter dois valores diferentes, um valor esperado ScheduledTransactionse um valor real em um Debitsou em Credits.

Revisão4-Principal

  • Imaginei que cada previsão precisaria de uma data de início e de término, bem como um saldo inicial.
  • Cada dia precisaria ser previsto para poder determinar a soma de débitos e créditos.
  • Eu acho que poderia ter usado as outras tabelas e adicionado algumas colunas isForecasted e teria funcionado da mesma maneira. Decidi não seguir esse caminho para dissociar os dois, caso houvesse necessidade de fazer alterações, bem como se esse fosse um aplicativo em grande escala, lendo e gravando grandes previsões nas mesmas tabelas das transações reais que eu pensaria que causariam um erro. log de problemas de desempenho.
Jon H
fonte
apenas um pensamento: você precisa de colunas de metadados em cada tabela, como quando a linha foi inserida, quem a inseriu, a última atualização, quem a atualizou, qual processo etc.?
Biju jose
Como isso é para uso em desenvolvimento pessoal, não precisarei disso.
9139 Jon H
11
As regras de esquema e normalização dependem de como você escolhe modelar o problema. Tradicionalmente, você teria tabelas separadas para dados reais, orçamentos e previsões. Mas você pode colocá-los todos em uma única tabela com um atributo ou sinalizador para indicar a diferença. Mesmo com DR / CR. Mesma tabela, mas use valores +/- para indicar E / S. Depois de passar para a contabilidade de dupla entrada, você precisará dos dois lados de uma equação para equilibrar e criar contas. Você está indo tão longe?
Sir Jura muito
11
Eu acho que este é um projeto muito ambicioso a ser abordado com o objetivo de aprender sobre bancos de dados. O design e a normalização do esquema de banco de dados são uma coisa, a manutenção precisa de registros é outra, a contabilidade e a previsão são ainda mais complexas novamente. Qual é a sua prioridade?
Sir jura-a-lot
@ SirSwears-a-lot Sim, eu não vou tão longe. Pense apenas em poder rastrear suas finanças pessoais em vários grupos orçamentários e ser capaz de projetar cenários simples, como se ... E se eu recebesse um pagamento de carro novo e saísse de férias por 4 meses? Como seria minha relação renda / dívida com uma frequência de semana a semana ou de mês a mês? Ou, se eu alterasse meu orçamento de compras de 500 para 600?
9138 Jon H #

Respostas:

2

De maneira mais geral: eu começaria com uma lista de perguntas que gostaria de responder. Gostar:

Quem eu estou pagando mais? Paguei a conta de transporte de esgoto este mês? Quais são meus requisitos de caixa para este mês? Vou precisar sair e matar coisas para comer?

A natureza dessas perguntas deve orientar o design do esquema.

Dito isto, esse esquema parece muito bom.

Concordo com a ideia de que os débitos e créditos possam estar em uma única tabela.

Hawkins Dale
fonte
1

Eu identificaria os beneficiários em termos de orçamento e tipo de conta. Digamos que você precise listar ou consultar os beneficiários. Eu também teria uma coluna ativa para os beneficiários. Pode ser bom saber qual conta paga qual orçamento no futuro.

Eurico
fonte