5

想象一下:有一个“recipe”表和一个“recipe-step”表。这个想法是允许在不同的配方中重用不同的配方步骤。我遇到的问题与以下事实有关,即在配方上下文中,配方步骤显示的顺序很重要,即使它不遵循配方步骤表主键顺序,因为这个顺序将是由用户设置。

我正在考虑做类似的事情:

配方步骤表:

编号 | 步骤名称 | 步骤说明
-------------------------------------------
1 | 第一步 | 描述1
2 | 步骤2 | 描述2
3 | 第三步 | 描述3
...


配方表:

食谱ID | 步
---------------
1 | 1
1 | 2
1 | 3
...

这样,步骤列中显示的步骤顺序就是我需要维护的顺序。

我对这种方法的担忧是:

  • 如果我必须在两个现有步骤之间添加一个新步骤,我该如何查询?如果我只需要切换序列中已经存在的两个步骤的顺序怎么办?
  • 如何确保订单保持一致性?如果我只是在配方表中插入或更新某些内容,它会在表的末尾弹出,对吗?

有没有其他方法你会想到这样做?我还想过在配方步骤表中设置上一步下一步列,但我认为以这种方式使配方步骤可重用会更加困难。

4

1 回答 1

1

在 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表。

于 2013-05-28T08:35:09.487 回答