如何引用可能不包含查找记录的查找表?

How do I reference a lookup table that might not contain the looked up record?

提问人:DrFloyd5 提问时间:11/15/2023 更新时间:11/16/2023 访问量:31

问:

我有一个有点像参考数据的表。但不包含所有参考数据。我们将包含 id 和 label 列的表称为“labels”。

其他业务模型表可以指定标签表中可能包含也可能不包含的 ID。

当 UI 显示业务模型表数据时,如果 id 在标签表中,则显示标签值。否则,只需显示 ID。

也。。。有一个下拉列表用于筛选页面上显示的数据。下拉列表包含标签和未标记的 ID

所以这个表并不是真正的参考数据......

这是什么桌子?

数据库 数据库设计 命名约定

评论


答:

1赞 Julio Di Egidio 11/16/2023 #1

好吧,你描述的是一个可疑的设计,而不是一种表格:),否则我会称它为“查找”表:但我认为这个术语没有什么特别标准的地方。

为了更具体地说,您描述的内容类似于翻译中发生的情况,其中翻译的术语表在任何时候都可能是部分的,即不包含每个可能术语的翻译。

但是,解决这个问题的规范方法是让“查找”表无论如何都是完整的,因为它包含所有可能的 id(所有可能的“术语”),只有关联的“标签”可以为空,并且只要没有人提供缺失的信息,它就会保持 NULL。

与您描述的主要区别在于,通过这种方式,您实际上可以从任何表到此查找表获得适当的 FK,而如果 id 本身可能存在也可能不存在,则无法对其他表中使用的 id 强制执行任何约束,甚至不能对存在关系的基本事实进行约束。

而且,就其价值而言,当然,这也会影响性能,因为没有 FK 通常意味着查询引擎无法对 JOIN 子句和类似内容执行优化。