Estoy tratando de aprender más sobre las bases de datos relacionales y pensé que no hay mejor manera de aprender que hacer algo. Decidí hacer un intento personal de mirar la Contabilidad y previsión del presupuesto personal. He realizado algunas investigaciones hasta el momento y me gustaría obtener una idea de mi diseño de base de datos y normalización actual.
¿Cuáles son sus pensamientos y sugerencias sobre mi diseño de base de datos actual? He incluido información a continuación para ayudarlo mejor a ayudarme :)
Divulgación: Este es un proyecto personal. No para la tarea o para el trabajo.
Hechos empresariales
Un banco
ACCOUNTpuede tener muchosENTRIESUn
ENTRYpuede ser unCREDIToDEBIT- Un
ENTRYtiene una fecha en la que fue acreditado o debitado - Un
ENTRYtiene un soloPAYEE Un
ENTRYpuede ser asociado a unBUDGET CATEGORYA
CREDITtiene una cantidad deENTRY- A
CREDITtiene una descripción deENTRY - A
CREDITse puede programar en el futuro A
CREDITpuede ser recurrente en frecuencia y / o cantidadA
DEBITtiene una cantidad deENTRY- A
DEBITtiene una descripción deENTRY - A
DEBITse puede programar en el futuro A
DEBITpuede ser recurrente en frecuencia y / o cantidadA
PAYEEtiene un nombreA
BUDGETtiene muchosBUDGET CATEGORIESA
BUDGETsolo se puede asociar a un único mes calendarioA
BUDGET CATEGORYpuede contener muchosENTRIES- A
BUDGET CATEGORYtiene un nombre A
BUDGET CATEGORYtiene unaBUDGETcantidadA
FORECASTtiene una fecha de inicio- A
FORECASTtiene una fecha de finalización - A
FORECASTtiene un saldo inicial - A
FORECASTtiene muchosFORECASTED DAYS A
FORECASTtiene un soloFORECASTED BUDGETA
FORECASTED DAYtiene una sola fecha- A
FORECASTED DAYpuede tener muchosFORECASTED DEBITS A
FORECASTED DAYpuede tener muchosFORECASTED CREDITSA
FORECASTED DEBITtiene una cantidad- A
FORECASTED DEBITtiene una descripción - A
FORECASTED DEBITtiene unFORECASTED BUDGET CATEGORY - A
FORECASTED DEBITtiene un soloPAYEE A
FORECASTED DEBITpuede ser recurrenteA
FORECASTED CREDITtiene una cantidad- A
FORECASTED CREDITtiene una descripción - A
FORECASTED CREDITtiene unFORECASTED BUDGET CATEGORY - A
FORECASTED CREDITtiene un soloPAYEE A
FORECASTED CREDITpuede ser recurrenteA
FORECASTED BUDGETtiene muchosFORECASTED BUDGET CATEGORIESA
FORECASTED BUDGET CATEGORYpuede tener muchosPAYEESA
PAYEEtiene un nombre
Data de muestra
+----------------+----------+------------------+----------------+---------------+--------------+------------------+
| 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 |
+----------+-------------+--------------+---------------+-----------------+------------------+
Diseño de base de datos actual
Pensé que sería útil saber POR QUÉ hice algo para que puedas entender mi lógica y razonamiento.
- Cada presupuesto puede contener más de 1 categoría de presupuesto. Agregué una
isActivecolumna en ambosBudgetsyBudgetCategoriesen caso de que quisiera reactivar un presupuesto o categoría de presupuesto diferente. - Separé las transacciones en dos tablas divididas muy parecidas
Debitsy,Creditscomo vi, había dos tipos de transacciones. - Para permitir y rastrear transacciones programadas o recurrentes, creé una
ScheduledTransactionstabla que me permitía tener dos cantidades diferentes, una cantidad esperadaScheduledTransactionsy una cantidad real enDebitsoCredits.
- Pensé que cada pronóstico necesitaría una fecha de inicio y finalización, así como un saldo inicial.
- Sería necesario pronosticar cada día para poder determinar la suma de los débitos y créditos.
- Creo que podría haber usado las otras tablas y agregar algunas columnas isForecasted y habría funcionado igual. Decidí no seguir esa ruta para desacoplar los dos en caso de que fuera necesario realizar algún cambio, así como si se tratara de una aplicación a gran escala que leyera y escribiera pronósticos grandes en las mismas tablas que las transacciones reales, creo que causaría un registro de problemas de rendimiento.

