说我有一个简单的产品表: Id,ProductCode,Price,Description etc。
我有10,000种产品......但其中100种需要声音样本(例如它们是木琴)。 我想在db中存储产品是否有声音样本。
因此,最好将产品表存储为“has_sound”布尔值(true或false)coloumn,还是作为单独的一列列表,只列出所有带声音的产品ID?
存储在产品表中意味着绝大多数只会有“has_sound = false”,这看起来有点浪费。 但是,只存储一个“有声音的产品”列表对我来说似乎有些“错误”。
非常感谢:)
答案 0 :(得分:1)
你有10,000行。
即使你选择效率低下的4字节字段大小,你也可以通过在product表中添加一个字段来查看磁盘上的~40k。相比之下,带有(int,tinyint)字段的空innodb表在磁盘上大约为100k(加上用于保存表元数据的额外RAM开销)。用100条记录填充该表没有区别,因为所有内容都适合一个分配页面。
这些开销都没有远程接近性能考虑因素。
使下一个开发人员(在这种情况下是在产品表中存储额外字段)的代码最清晰,最简单和最易维护的原因。
答案 1 :(得分:0)
新表更正确的关系。如果是我的话,我会有一个两列表,产品ID和一个带有声音样本的BLOB,用于那些有声样本的产品。虽然你可以在表上有一个布尔(或NULLable BLOB),但将其拆分可以实现更好的分区,并且声音样本周围的附加数据(不同的样本格式,多个八度音程/音高/音符或其他)保存在正确的位置声音。
正如Levi所说,"最好的"是最可维护的,因为在这种规模上不存在重大的性能或浪费问题。