Ruby on rails 为什么表中有空值是件坏事?

Ruby on rails 为什么表中有空值是件坏事?,ruby-on-rails,database,Ruby On Rails,Database,我正在读一篇关于Rails中单表继承和多态性的文章,我遇到了这样一句话: 对于您的模式,STI并不总是最佳的设计选择。如果 您打算用于STI的子类有许多不同的数据 字段,然后将它们全部包含在同一个表中,将导致 大量空值,使其难以随时间扩展。在这个 在这种情况下,您的模型子类中可能会有太多的代码 子类之间的共享功能是最小的,并且 分开的桌子 为什么表格单元格中有空值是一件坏事?它占用内存吗?它会减慢查询速度吗?是什么让它不好呢?这个评论可以用更好的措辞。空值没有什么问题。想象一下,你有一个运输模型

我正在读一篇关于Rails中单表继承和多态性的文章,我遇到了这样一句话:

对于您的模式,STI并不总是最佳的设计选择。如果 您打算用于STI的子类有许多不同的数据 字段,然后将它们全部包含在同一个表中,将导致 大量空值,使其难以随时间扩展。在这个 在这种情况下,您的模型子类中可能会有太多的代码 子类之间的共享功能是最小的,并且 分开的桌子


为什么表格单元格中有空值是一件坏事?它占用内存吗?它会减慢查询速度吗?是什么让它不好呢?

这个评论可以用更好的措辞。空值没有什么问题。想象一下,你有一个
运输
模型<代码>汽车继承<代码>自行车继承。您的模型具有
num\u wheels
属性。总的来说,生活是美好的。然后添加
,这很好,但不会使用
num_车轮
,但您不介意。然后添加需要
num_桅杆的
SailBoat
,现在您有点担心,因为该字段永远不会被
Car
Bike
Boat
使用,但您会继续。假设数据库中有1000万行

然后添加
飞机
,需要
翼展
字段。存储为整数。现在,您有1000万行数据,其中包含一个永不使用的
wingspan
Integer字段。更糟糕的是,如果再增加500万架飞机,它们都从未被使用过
num_masts
字段


在某种程度上,这会占用相当多的磁盘空间,让你的生活变得悲惨。我认为这就是他们所说的不总是最佳选择的意思。

可能是因为
null
s不是“真正的值”。当然,它们可以表示失败或缺少值,但实际上无法使用。这意味着任何时候你需要读入一个可能为空的值,你需要在使用它之前进行检查,否则你最终会受到“空污染”,这会导致NPE出现在可能令人困惑的地方。有一个例子吗?我可以相信你的回答更加充实。我没有一个与你的问题领域直接相关的例子,这就是我为什么要发表这一评论的原因。这只是一次尝试。我不知道这是否是这篇文章的作者的意图。所以它确实占用了磁盘空间?是的。有些领域比其他领域更重要。