|
|
1
5
这是数据仓库中一个非常常见的问题。他们使用“慢慢改变尺寸”。 但是,如果要尝试使用“版本化”数据,则必须有一些规则。
请注意,这种关系(作者与书籍)是事实,不需要版本。这是事实。它不会“改变”。它要么是真的,要么是错误地放在数据库中——在这种情况下,必须删除它。事实不需要版本号。 在更复杂的星型模式中,您的事实具有度量标准。价格、销售量、成本、利润等也记录在事实表中。这些信息可能随时间而变化。因此,对于每个事实,您几乎总是有一个时间维度。 因此,时间是书作者事实的一个维度。如果此事实可以更改,则将适用的时间段记录为事实的一部分。 时间维度与版本号不完全相同。稍微简单一点。它指出,在特定的时间点,事实是真实的。如果事实发生变化,您可以用不同的时间戳附加一个新事实。 您可以在给定的特定时间点上定位相关事实和相关维度值。 |
|
|
2
1
我为每张桌子都准备了一张桌子:即作者和书。 表之间通常有外键关系(不管是什么关系)。 每个表也有一个历史表,即authorhistory和bookhistory。这些历史记录表包含旧的/过时的记录版本(例如,每个已删除和/或已编辑的作者记录)。与历史记录表之间没有外键关系。 编辑: 对于每个表,有些功能是相似的:例如,无论哪个表,更新记录都意味着将记录的旧副本存储在相应的历史表中。我使用数据库触发器(更新和删除每个表的触发器)实现此功能;因为我使用的数据库引擎支持触发器,这使它对应用程序透明。这些触发器中的代码在一个表和下一个表之间是相似的(只有表的名称和字段名称列表在一个表和下一个表之间有所不同)。
编辑第2页: 我还没有实施过多对多情况的历史,但我不明白为什么会不一样,即:
|
|
|
3
1
听起来几乎是CouchDB的理想用例。使用此面向文档的数据库,您可以免费获得修订(除非您的数据库配置不同,否则每个文档都会自动重新修订)。 文件之间也可能存在m:n关系。但是,迁移到CouchDB是一个很大的步骤,我不知道从ASP.NET访问它有多好。但是阅读一些入门教程不会有什么伤害。 |