我被要求创建一些东西来跟踪每天在帐户上收取的费用,而我正在尝试找出一个支持此目的的数据库表模式。
这就是我所知道的
- 公司拥有超过250万个帐户
- 其中,他们目前平均每月工作200,000(随着人员配备水平的变化而变化,目前水平很低)
- 他们想跟踪13种不同的费用类型,并且警告说,将来可能会增加更多的费用
- 他们希望每天跟踪费用
- 成本不会在整个库存中分配。它们可以分为每月工作的帐户数量(200,000),或者用户可以输入帐户标识符以将成本应用于一组帐户,或者可以仅指定将成本应用于哪个帐户。
我首先想到的是规范化的数据库:
帐户ID 日期 CostTypeId 量
我的问题是数学。该表将迅速变得庞大。假设所有13种成本类型都应用到了当月的所有工作帐户,即每月200k * 13 * N days in month
大约75-8000万条记录,或者每年接近10亿条记录。
我的第二个想法是将其标准化
帐户ID 日期 总计花费 CostType1 CostType2 CostType3 CostType4 CostType5 CostType6 CostType7 CostType8 CostType9 CostType10 CostType11 CostType12 CostType13
此方法更加不200k * N days in month
规范,每月最多可以创建600万条记录(),或每年大约7200 万条。它比第一种方法少很多,但是,如果公司将来决定使用新的费用类型,则需要添加另一个数据库列。
在这两种方法中,您更喜欢哪一种?为什么?您是否可以想到另一种更好的选择?
我最感兴趣的是报告性能,包括总结报告和详细报告。当没有人在附近时,将费用分摊到各个帐户的工作将每晚进行。第二个问题是数据库大小。现有的数据库已经接近300GB,我相信磁盘上的空间约为500GB。
该数据库是SQL Server 2005