我有一个包含食谱的数据库。我可以制作两个单独的桌子;一个用于配方(标题和说明),另一个用于配料(成分,多少..等等),并参考特定配方。这样我就会有一堆指向特定食谱的成分。
表格食谱
餐桌配料
recipe_reference = 0
id = 1
或者我可以制作1个数据库并将所有成分信息存储为字符串列表
我认为第一种方式更清晰,但每种配料使用一个新表,而第二种方式每个配方使用一个表,这将使我的数据库更小更快,查询更小,我不需要做任何不必要的联接。 从长远来看,任何想法哪个方面更好?
答案 0 :(得分:1)
两个更好,但我会做三个表。 recipes
,ingredients
和recipe_ingredients
。您的想法和我的想法的查询时间差异将是不明显的。 3表设置将存储更少的数据,因为您不会将“面粉”存储10,000次,而是将其存储在DB中一次,并且将在链接表中使用ID(整数)。
答案 1 :(得分:0)
通常,请避免创建在单个列中存储多个值的数据。请参阅我对Is storing a delimited list in a database column really that bad?
的回答SQL实际上是基于您在每列中存储一个不可约值的假设。当您需要从单个列中查询子元素时,事情变得非常困难和低效。
因此,如果您始终获取完整的成分列表,然后阅读应用程序中的列表,则可以使用第二个示例中显示的竖线分隔列表。
但是,如果您曾计划使用SQL表达式来处理列表中的各个元素,那么请自己帮忙并将其分解为子表中的单独行。