查找表(或某些人称为代码表)通常是可以为特定列提供的可能值的集合。
例如,假设我们有一个查找表party
(用于存储有关政党的信息),该表具有两列:
party_code_idn
,其中包含系统生成的数值,并且(缺少业务域的含义)可以用作实键的替代。party_code
是表的实键或“自然”键,因为它维护具有业务域内涵的值。
让我们说这样的表保留了以下数据:
+----------------+------------+
| party_code_idn | party_code |
+----------------+------------+
| 1 | Republican |
| 2 | Democratic |
+----------------+------------+
在party_code
列,这使价值“共和”和“民主”,在工作台的真正的关键,是建立了一个独特的约束,但我需要添加的party_code_idn
,它定义为表(的PK虽然,从逻辑上说,party_code
可以用作主键[PK])。
题
指向事务表中的查找值的最佳实践是什么?我是否应该建立外键(FK)引用(a)直接指向自然和有意义的值,或者(b)替代值?
例如,选项(a),
+---------------+------------+---------+
| candidate_idn | party_code | city |
+---------------+------------+---------+
| 1 | Democratic | Alaska |
| 2 | Republican | Memphis |
+---------------+------------+---------+
具有以下属性1:
- 可供最终用户阅读(+)
- 易于跨系统导入导出(+)
- 难以更改值,因为需要在所有引用表(-)中对其进行修改
- 添加新值并不昂贵(=)
我认为在应用程序编程术语中从函数调用中得出一个类比,几乎就像“ 按值传递 ” 。
例如,选项(b)
+---------------+----------------+---------+
| candidate_idn | party_code_idn | city |
+---------------+----------------+---------+
| 1 | 1 | Alaska |
| 2 | 2 | Memphis |
+---------------+----------------+---------+
具有以下属性:
- 最终用户不可读(-)
- 难以进出口,因为我们需要取消引用(-)
- 易于更改值,因为我们仅将引用存储在事务表中(+)
- 添加新值并不昂贵(=)
如果与应用程序编程中的函数调用相比,它与“ 通过引用传递 ” 非常相似。
Import-Export也可以以其他方式完成,即,只需再次填充查找表,然后重新设置代理列即可。我希望我做对了,这是我刚刚听到的可能性。
1. 请注意+
,-
并=
指出这些属性的好处。
题
非常重要的一点是:如果我们仅使用后一种方法,则查找(或代码)表与FK引用之间是否有区别?我认为它们的工作原理相同。