【问题标题】:How to implement Lookup Tables SQL如何实现查找表 SQL
【发布时间】:2013-10-29 06:24:22
【问题描述】:

我正在尝试了解如何实现值将发生变化的查找表。 例如: 如果我有:

EmpType Type
1       FullTime
2       PartTime
3       Casual

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

EmpType Type
1       Contractor
2       PartTime
3       Casual

查找表是否应该具有 PrimaryKey?

它们是否类似于渐变维度?

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

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

谢谢。

【问题讨论】:

    标签: sql database-design lookup


    【解决方案1】:

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

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

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

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

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

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

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

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

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

    等等.....

    【讨论】:

    • 对于我的数据,对于相同的 EmplType 更改描述是不好的。换句话说,我需要保留历史数据,我需要知道在某个时间点 1 是 FullTime,而在另一个时间点是 Contractor。所以你觉得这张桌子应该是一个缓慢变化的维度吗?我应该只添加一个 PK 和一个 DateStart 和 DateEnd 标志吗?
    • 我会说这取决于。如果您只对历史感兴趣,即它已从 FullTime 更改为 Contractor,我只需制作一个带有时间戳和先前值(EmpType、Timestamp、Type)的历史表。如果您需要一些关联表具有不同的值(一些 FullTime,一些 Contractor),我会适当地制作一个额外的 EmpType(4,Contractor),或者如果所有 FullTime 都不是 Contractors - 您正在正确地查看第二个桌子。但这取决于您的具体情况的使用、数据模型和要求等。
    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多