如何实现Lookup Tables SQL

时间:2013-10-29 06:24:22

标签: sql database-design lookup

我正在尝试了解如何实现值将更改的查找表。 例如: 如果我有:

EmpType Type
1       FullTime
2       PartTime
3       Casual

基于上表,我生成了其他表。 但有一点,EmpType发生了变化:

EmpType Type
1       Contractor
2       PartTime
3       Casual

查找表是否应该有PrimaryKey?

它们是否与缓慢变化的尺寸相似?

它们应该与其他表相关吗?

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

所以在你的例子中,如果你有5个表都有你的EmpType链接,而不是在这5个表中键入FullTime,你现在可以放1,从而节省空间。 然而,这意味着,正如您已经注意到的那样 - 如果1的“值”从FullTime变为承包商,则所有引用(现在,历史和未来)都将具有值Contractor。

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

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

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

如果不是所有的FullTime都应该是承包商,那么您需要一个额外的表格,并将承包商/非承包商的FullTime / PartTime / Casual分开。

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

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

等等......