想象一下:有一个“配方”表和一个“配方步骤”表.我们的想法是允许在不同的配方中重复使用不同的配方步骤.我遇到的问题是,在配方上下文中,配方步骤显示的顺序很重要,即使它不遵循配方步骤表主键顺序,因为此顺序将是由用户设置.
我在想做类似的事情:
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 ...
这样,步骤列中显示的步骤顺序是我需要维护的顺序.
我对这种方法的担忧是:
>如果我必须在两个现有步骤之间添加新步骤,我该如何查询它?如果我只需要在序列中切换两个步骤的顺序怎么办?
>如何确保订单保持一致性?如果我只是在配方表中插入或更新某些内容,它会弹出表格的末尾,对吗?
还有其他方法你会想到这样做吗?我还想过在配方步骤表中有一个前一步和下一步的列,但我认为以这种方式重复使用配方步骤会更困难.
最佳答案 在SQL中,表不是有序的.
除非您使用ORDER BY子句,否则允许数据库引擎以他们认为最快的任何顺序返回记录(例如,覆盖索引可能具有不同顺序的数据,有时甚至SQLite会自动创建临时覆盖索引).
如果步骤在特定配方中具有特定顺序,则必须将此信息存储在数据库中.
我建议将其添加到配方表中:
recipeId | step | stepOrder
---------------------------
1 | 1 | 1
1 | 2 | 2
1 | 3 | 3
2 | 4 | 1
2 | 2 | 2
注意:
配方表存储配方和步骤之间的关系,因此应将其称为配方步骤.
配方步骤表与配方无关,因此应将其称为步骤.
您可能需要一个存储与步骤无关的配方信息的表;这个表应该叫做食谱.