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 muitosENTRIESUm
ENTRYpode ser umCREDITouDEBIT- Um
ENTRYtem uma data em que foi creditado ou debitado em - Um
ENTRYtem um únicoPAYEE Um
ENTRYpode ser associado a umBUDGET CATEGORYA
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 quantidadeA
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 quantidadeA
PAYEEtem um nomeA
BUDGETtem muitosBUDGET CATEGORIESA
BUDGETsó pode ser associado a um único mês do calendárioA
BUDGET CATEGORYpode conter muitosENTRIES- A
BUDGET CATEGORYtem um nome A
BUDGET CATEGORYtem umaBUDGETquantidadeA
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 BUDGETA
FORECASTED DAYtem uma única data- A
FORECASTED DAYpode ter muitosFORECASTED DEBITS A
FORECASTED DAYpode ter muitosFORECASTED CREDITSA
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 recorrenteA
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 recorrenteA
FORECASTED BUDGETtem muitosFORECASTED BUDGET CATEGORIESA
FORECASTED BUDGET CATEGORYpode ter muitosPAYEESA
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.
- Cada orçamento pode conter mais de uma categoria de orçamento. Eu adicionei uma
isActivecoluna em ambosBudgetseBudgetCategoriesno 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 esperadoScheduledTransactionse um valor real em umDebitsou emCredits.
- 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.

