Se me ha pedido que cree algo que rastree el costo diario para cobrar en las cuentas, y estoy tratando de descubrir un esquema de tabla de base de datos que lo respalde.
Esto es lo que se
- La compañía tiene más de 2.5 millones de cuentas.
- De estos, actualmente trabajan un promedio de 200,000 por mes (que cambia con los niveles de personal, que actualmente son bajos)
- Tienen 13 tipos de costos diferentes que les gustaría rastrear, y han advertido que podrían agregar más en el futuro
- Quieren que los costos sean rastreados diariamente
- Los costos no se dividen en todo el inventario. Se dividen en el número de cuentas que se trabajan por mes (200,000), o los usuarios pueden ingresar identificadores de cuenta para aplicar un costo a un grupo de cuentas, o simplemente pueden especificar a qué cuentas aplicar el costo.
Mi primer pensamiento fue una base de datos normalizada:
ID de la cuenta Fecha CostTypeId Cantidad
Mi problema con esto es hacer los cálculos. Esta mesa se va a poner enorme rápidamente. Suponiendo que los 13 tipos de costos se apliquen a todas las cuentas trabajadas para el mes actual, es decir 200k * 13 * N days in month
, alrededor de 75-80 millones de registros por mes, o cerca de mil millones de registros por año.
Mi segundo pensamiento fue desnormalizarlo un poco
ID de la cuenta Fecha Coste total CostType1 CostType2 CostType3 CostType4 CostType5 CostType6 CostType7 CostType8 CostType9 CostType10 CostType11 CostType12 CostType13
Este método está más desnormalizado y puede crear hasta 6 millones de registros por mes ( 200k * N days in month
), o aproximadamente 72 millones por año. Es mucho menos que el primer método, sin embargo, si la compañía decide un nuevo Tipo de costo en el futuro, será necesario agregar otra columna de base de datos.
De los dos métodos, ¿cuál prefiere? ¿Por qué? ¿Hay alguna otra alternativa en la que puedas pensar que manejaría esto mejor?
Estoy más interesado en informar sobre el rendimiento, tanto informes resumidos como detallados. El trabajo que repartirá los costos sobre las cuentas se ejecutará todas las noches cuando no haya nadie cerca. Una preocupación secundaria es el tamaño de la base de datos. La base de datos existente ya tiene casi 300 GB, y creo que el espacio en el disco es de alrededor de 500 GB.
La base de datos es SQL Server 2005