0

我试图了解如何实现一个值会改变的查找表。例如:如果我有:

EmpType Type
1       FullTime
2       PartTime
3       Casual

所以根据上表,我生成其他表。但在某一时刻, EmpType 发生了变化:

EmpType Type
1       Contractor
2       PartTime
3       Casual

查找表是否应该具有 PrimaryKey?

它们类似于缓慢变化的维度吗?

它们是否应该与其他表相关?

如果有人能指出我如何使用查找表的正确方向,那就太好了。我发现很多文章都在谈论不使用 MUCK 或通用查找表,但我找不到任何关于如何正确使用它们的信息。

谢谢。

4

1 回答 1

3

这会有点抽象,所以我希望我能正确解释自己。

使用查找表的原因是您不希望(文本/语义)值分散在每个相关表上。查找表只不过是避免在许多表中保存较长的描述/值的助手。所以基本上,一个节省空间的工具。

因此,在您的示例中,如果您有 5 个表都有指向您的 EmpType 的链接,而不是在这 5 个表中键入 FullTime,您现在可以输入 1,从而节省空间。然而,这意味着,正如您自己注意到的那样 - 如果 1 的“值”从 FullTime 更改为 Contractor,则所有引用(现在、历史和未来)都将具有值 Contractor。

这是查找表的预期行为和设计点。也就是说,如果值发生变化,则意图是允许所有关联的值发生变化。这意味着默认情况下您没有更改历史记录,并且看不到值已从 FullTime 更改为 Contractor

如果这不是预期的行为,那么您应该查看另一种模式。

我无法从您的数据中看到想要的行为是什么;这意味着为什么将 FullTime 更改为 Contractor 对您来说是“坏事”。

如果不是所有全职员工都应该是承包商,那么您要么需要一个额外的表格,并将全职/兼职/休闲与承包商/非承包商分开。

或者您可以添加另一个 EmpType (4) 并将其用于 Contractor 并在相关的情况下将 FullTime 从 1 更新为 4。

如果您缺少历史记录,您可以创建一个更改表来跟踪对具有先前值和时间戳的 EmpyType 所做的更改。

等等.....

于 2013-10-29T06:55:11.117 回答