谁能建议如何去规范化一个完全规范化的表?尽管谷歌搜索,我还是找不到太多关于它的信息。
每当在 TableA 中更新记录(虽然没有插入,但现在不用担心)时,都会将记录插入到 HistoryOfTableA 中,其中包含已更改字段的值以及执行时的相关时间戳。
例如。
表 A 字段:
TableA_Id, FieldA, FieldB, FieldC, FieldD.... etc
HistoryOfTableA 记录:
HistID, TableA_Id, FieldChanged, OldValue, NewValue, DateCreated
1, 1, 'FieldA', 1, 2, <2013-03-18 12:20:00>
2, 1, 'FieldB', A, B, <2013-03-18 12:20:00>
3, 1, 'FieldC', A, B, <2013-03-18 12:20:00>
情况是我希望创建一些用于报告目的的 SQL。因此,我希望能够指定一个时间点,并能够将这些宿主表条目汇总在一起,并计算出当时 TableA 中该记录的状态。
我在想我可以根据历史表创建表,并在创建日期和表 A 中加入 Id
例如。
select HistA.NewValue,
HistB.NewValue,
....
from FieldA_HistoryOfTableA HistA
inner join FieldB_HistoryOfTableA HistB on HistA.DateCreated = HistB.DateCreated
and HistA.TableA_Id = HistB.TableA_Id
inner join ... etc
where HistA.FieldChanged = 'FieldA'
and HistB.FieldChanged = 'FieldB'
and .... etc...
但我不认为这会给我我想要的一切,而且我可能无法纯粹在 SQL 中做到这一点。顺便说一句,TableA 中有 20 个字段,因此尝试加入 20 个表可能并不明智。