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
ACCOUNT
pode ter muitosENTRIES
Um
ENTRY
pode ser umCREDIT
ouDEBIT
- Um
ENTRY
tem uma data em que foi creditado ou debitado em - Um
ENTRY
tem um únicoPAYEE
Um
ENTRY
pode ser associado a umBUDGET CATEGORY
A
CREDIT
tem uma quantidade doENTRY
- A
CREDIT
tem uma descrição doENTRY
- A
CREDIT
pode ser agendado no futuro A
CREDIT
pode ser recorrente em frequência e / ou quantidadeA
DEBIT
tem uma quantidade doENTRY
- A
DEBIT
tem uma descrição doENTRY
- A
DEBIT
pode ser agendado no futuro A
DEBIT
pode ser recorrente em frequência e / ou quantidadeA
PAYEE
tem um nomeA
BUDGET
tem muitosBUDGET CATEGORIES
A
BUDGET
só pode ser associado a um único mês do calendárioA
BUDGET CATEGORY
pode conter muitosENTRIES
- A
BUDGET CATEGORY
tem um nome A
BUDGET CATEGORY
tem umaBUDGET
quantidadeA
FORECAST
tem uma data de início- A
FORECAST
tem uma data de término - A
FORECAST
tem um saldo inicial - A
FORECAST
tem muitosFORECASTED DAYS
A
FORECAST
tem um únicoFORECASTED BUDGET
A
FORECASTED DAY
tem uma única data- A
FORECASTED DAY
pode ter muitosFORECASTED DEBITS
A
FORECASTED DAY
pode ter muitosFORECASTED CREDITS
A
FORECASTED DEBIT
tem uma quantidade- A
FORECASTED DEBIT
tem uma descrição - A
FORECASTED DEBIT
tem umFORECASTED BUDGET CATEGORY
- A
FORECASTED DEBIT
tem um únicoPAYEE
A
FORECASTED DEBIT
pode ser recorrenteA
FORECASTED CREDIT
tem uma quantidade- A
FORECASTED CREDIT
tem uma descrição - A
FORECASTED CREDIT
tem umFORECASTED BUDGET CATEGORY
- A
FORECASTED CREDIT
tem um únicoPAYEE
A
FORECASTED CREDIT
pode ser recorrenteA
FORECASTED BUDGET
tem muitosFORECASTED BUDGET CATEGORIES
A
FORECASTED BUDGET CATEGORY
pode ter muitosPAYEES
A
PAYEE
tem 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
isActive
coluna em ambosBudgets
eBudgetCategories
no caso de desejar reativar um orçamento ou categoria de orçamento diferente. - Separei as transações em duas tabelas divididas muito parecidas
Debits
e,Credits
como vi, havia dois tipos de transações. - Para permitir e rastrear transações agendadas ou recorrentes, criei uma
ScheduledTransactions
tabela que me permitia ter dois valores diferentes, um valor esperadoScheduledTransactions
e um valor real em umDebits
ou 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.