为什么表中的空值是一件坏事?

时间:2016-10-28 15:07:02

标签: ruby-on-rails database

我正在阅读关于Rails中单表继承和多态的帖子,我遇到了这句话:

  

STI并不总是您架构的最佳设计选择。如果   您打算用于STI的子类有许多不同的数据   字段,然后将它们全部包含在同一个表中将导致a   很多空值并且难以随着时间的推移而扩展。在这   在这种情况下,您可能会在模型子类中得到如此多的代码   子类之间的共享功能是最小的和保证   单独的表格。

为什么表格单元格中的空值是坏事?它占用了记忆吗?它会减慢查询速度吗?是什么让它变坏?

1 个答案:

答案 0 :(得分:3)

这个评论的措辞可能会好一些。具体而言,NULL值没有任何问题。想象一下,你有一个{S}的Transportation模型。 Car继承。 Bike继承。您的模型具有num_wheels个属性。一般来说,生活是美好的。然后你添加Boat,这很好,但永远不会使用num_wheels,但你不介意。然后你添加SailBoat需要num_masts,现在你有点担心,因为CarBikeBoat永远不会使用该字段,但是你继续前进并且说你的数据库中有1000万行。

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

在某些时候,这会占用相当多的磁盘空间,让你的生活变得悲惨。我认为这就是他们所说的并不总是最好的选择。