我需要存储产品的价格和数量(和许多其他东西),并跟踪历史。
现在,考虑到价格和数量都是以整数的形式存储的,我的理解是,这些都是事实的度量。所以我们可能有一张桌子,比如:
f_products:
id
sku
price
quantity由于价格随时间而变化,我们可以插入一个新的事实,我可以在表中引入有效日期,以便在给定的时间查询价格或数量。
但是对于这个设计,意味着如果数量发生变化,我必须插入另一行,再次重复不变的价格值。虽然这对2列来说还不算太糟,但实际上我有10列。
所以,我的设计是:
f_products:
id
sku
price:
id
product_id
price
start_date
end_date
another "dimension":
id
product_id
value
start_date
end_date
and so on现在“事实”不再需要在价格变化时改变,我可以在这些表中查询历史值。
所以我的问题是,这似乎不符合标准的事实/维度设计,所以我想知道更有经验的建模人员将如何处理这些需求。
发布于 2021-02-23 02:49:14
老实说,这确实取决于您的用例,但对我来说,我可能只需将所有10列存储在同一个表中,并将其称为一天(除非它们彼此非常不相关,否则我可能会将其规范化一些)。拥有完整的字段列表可能会影响不同的答案,而且您的方法也是有效的。保持这种状态可能需要做更多的工作。
本质上,它将是一个事务表,并记录任何字段上的每个更改的记录。然后,最容易查看给定产品的当前状态,或者在给定的时间框架内它的状态是什么。
是的,您将遇到一些数据复制,但是大多数现代数据库系统无论如何都会自动压缩它们的表。因此,除非您认为您将每天创建数十亿事务,并开始悄悄进入大数据领域,否则从性能角度看,我不会感到非常担心。
https://dba.stackexchange.com/questions/285851
复制相似问题