我应该使用 null 还是单独的表?

Tob*_*emi 4 database-design

我可以有一个可为空的字段,或者我可以做基本的规范化,有另一个表可能会或可能不会加入该表中的一行。

我的直觉是使用第二种方法,因为这是处理此问题的“正确”(规范化)方式。但是,考虑到这一点,它可能有缺点。

  • 整个实体在其表中不容易看到(您必须 - 首先找到然后 - 跳转到其链接表)
  • 你现在必须记住加入表
  • 它可能会导致大量的表(我不知道这是否是性能问题)

你平常都做什么?是否值得创建一个新表来为实体提供一个可选属性?

bba*_*ird 5

像所有事情一样,答案是“视情况而定”。

更多的表 <> 不好,如果这些表是正确规范化所必需的。拆分可为空的列是我经常做的事情,但并非总是如此。影响我决定的因素是:

  1. 该列多久为 NULL?如果它很少被填充,将它作为一个可选列,实现为它自己的表可能是有意义的。在您可能需要定位某些记录时,这就像过滤索引一样。
  2. 可选列的上下文是什么?如果它是在稍后的事件发生之前您不会拥有的信息(运输/付款信息等),那么从逻辑上讲,将它与父表分开实现可能更有意义。
  3. 如何访问数据/父表有多宽?我经常处理来自供应商的汇总数据,这些数据导致非常宽的表和大量的空值。我通常会将每一列拆分到自己的表中,以加快只需要一小部分数据的即席查询。