想象一下:有一个“配方”表和一个“配方步骤”表。我们的想法是允许在不同的配方中重用不同的配方步骤。我遇到的问题是,在配方上下文中, recipe-steps 显示的顺序很重要,即使它不遵循 recipe-step 表主键顺序,因为此顺序将由用户设置。
我在想做类似的事情:
recipe-step table: id | stepName | stepDescription ------------------------------- 1 | step1 | description1 2 | step2 | description2 3 | step3 | description3 ... recipe table: recipeId | step --------------- 1 | 1 1 | 2 1 | 3 ...
这样,步骤列中显示的步骤顺序就是我需要维护的顺序。
我对这种方法的担忧是:
你还有其他想法吗?我还想过在 recipe-step 表中有上一步和下一步列,但我认为它会更多很难让配方步骤以这种方式重复使用。
答案 0 :(得分:2)
在SQL中,表不有序。
除非您使用ORDER BY
子句,否则允许数据库引擎以他们认为最快的任何顺序返回记录(例如,覆盖索引可能具有不同顺序的数据,并且有时甚至SQLite会自动创建临时覆盖索引。
如果步骤在特定配方中具有特定顺序,则必须将此信息存储在数据库中。
我建议将其添加到recipe
表中:
recipeId | step | stepOrder
---------------------------
1 | 1 | 1
1 | 2 | 2
1 | 3 | 3
2 | 4 | 1
2 | 2 | 2
注意:
recipe
表存储配方和步骤之间的关系,因此应将其称为recipe-step
。
recipe-step
表是独立的食谱,因此应该称为step
。
您可能需要一个存储与步骤无关的配方信息的表; 此表应调用recipe
。