2016-08-02 64 views
0

说我有产品的一个简单的表: 标识,产品代码,价格,说明等SQL数据库设计 - 独特的行很小的比例

而且我有10,000种产品......但他们中的100需要声音样本(例如他们是木琴)。 我想在数据库中存储产品是否有声音样本。

因此,将产品表中存储为“has_sound”布尔值(true或false)coloumn,还是作为单独列表列出所有产品ID与声音?

存储在产品表中意味着绝大多数将只有“has_sound = false”,这似乎有点浪费。 但是,仅仅存储“有声产品”列表对我来说似乎也有点“错误”。

非常感谢:)

+1

是的,你是对的,你们两个都在思考的方式是不合适的,因为在未来你可能有检查“has_book”什么的,那么你不能一次又一次地维护表或字段用于一些特定的条件。相反,我认为使用像“product_type”或类似的字段可能会有所帮助。您可以定义“product_type”的枚举。 –

回答

1

你有10,000行。

即使您选择低效的4字节字段大小,您也可以通过向产品表中添加一个字段来查看磁盘上的所有〜40k。相比之下,具有(int,tinyint)字段的空innodb表在磁盘上大约为100k(加上用于保存表元数据的额外RAM开销)。用100条记录填充该表没有任何区别,因为所有内容都适合在一个分配页面中。

这些开销都不是远程接近性能的考虑。

做什么使得代码清晰的,最简单,最维护了谁走来(在这种情况下是存储在产品上表的额外字段)的下一个开发人员。

0

新表格更正确的关系。如果是我,我会有一个两列表格,产品ID和一个带有声音样本的BLOB,用于那些有声音样本的产品。虽然你可以在桌子上有一个布尔值(或可为空BLOB)分裂出来可以更好地分配和周围的声音样本附加数据(不同的采样格式,多八度/音高/票据或其他)保持在其下一次正确的地方声音。

正如列维虽然说,“最好的”是最易于维护,因为会在这个规模没有显著的性能或浪费的问题。