我正在阅读关于Rails中单表继承和多态的帖子,我遇到了这句话:
STI并不总是您架构的最佳设计选择。如果 您打算用于STI的子类有许多不同的数据 字段,然后将它们全部包含在同一个表中将导致a 很多空值并且难以随着时间的推移而扩展。在这 在这种情况下,您可能会在模型子类中得到如此多的代码 子类之间的共享功能是最小的和保证 单独的表格。
为什么表格单元格中的空值是坏事?它占用了记忆吗?它会减慢查询速度吗?是什么让它变坏?
答案 0 :(得分:3)
这个评论的措辞可能会好一些。具体而言,NULL值没有任何问题。想象一下,你有一个{S}的Transportation
模型。 Car
继承。 Bike
继承。您的模型具有num_wheels
个属性。一般来说,生活是美好的。然后你添加Boat
,这很好,但永远不会使用num_wheels
,但你不介意。然后你添加SailBoat
需要num_masts
,现在你有点担心,因为Car
或Bike
或Boat
永远不会使用该字段,但是你继续前进并且说你的数据库中有1000万行。
然后添加需要Airplane
字段的wingspan
。存储为整数。现在,您有1000万行数据,其中包含一个永远不会使用的wingspan
整数字段。更糟糕的是,如果再增加500万架飞机,它们都将永远不会被num_masts
领域使用。
在某些时候,这会占用相当多的磁盘空间,让你的生活变得悲惨。我认为这就是他们所说的并不总是最好的选择。