我在OLTPII型尺寸加入
CREATE TABLE TransactionState
(
TransactionStateId INT IDENTITY (1, 1) NOT NULL,
TransactionStateName VarChar (100)
)
当这涉及到我的OLAP下表查找表,我改变结构如下:
CREATE TABLE TransactionState
(
TransactionStateId INT NOT NULL, /* not an IDENTITY column in OLAP */
TransactionStateName VarChar (100) NOT NULL,
StartDateTime DateTime NOT NULL,
EndDateTime NULL
)
我的问题是关于TransactionStateId柱。随着时间的推移,我可能在我的OLAP中有重复的TransactionStateId值,但是通过StartDateTime和EndDateTime的组合,它们将是唯一的。
我看到添加了一个OriginalTransactionStateId并将传入的TransactionStateId映射到它的Type-2维度的样本,再加上一个新的TransactionStateId IDENTITY字段变为PK并用于连接。
CREATE TABLE TransactionState
(
TransactionStateId INT IDENTITY (1, 1) NOT NULL,
OriginalTransactionStateId INT NOT NULL, /* not an IDENTITY column in OLAP */
TransactionStateName VarChar (100) NOT NULL,
StartDateTime DateTime NOT NULL,
EndDateTime NULL
)
我应该去bachellorete#2还是bachellorete#3?
@Quassnoi:对于StartDateTime和EndDateTime都会剥离时间组件 - 它们将相隔一天。 – 2009-07-28 18:24:12
@Quassnio:感谢您的代码示例。你对我关于这两个单身汉的原始问题有什么看法? – 2009-07-28 19:21:47
@Tapori:如果用“bachelorettes”表示'SCD'类型,那么'Type 2'更好一点就是每个状态的版本要多于'2'。通常认为查询更慢(出于我在文章中描述的原因),但使用帖子中的技术可以获得不错的表现。 – Quassnoi 2009-07-28 19:59:15