Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库设计-存储序列_Database_Sqlite_Sequence - Fatal编程技术网

Database 数据库设计-存储序列

Database 数据库设计-存储序列,database,sqlite,sequence,Database,Sqlite,Sequence,想象一下:有一个“配方”表和一个“配方步骤”表。其想法是允许在不同的配方中重复使用不同的配方步骤。我遇到的问题与以下事实有关:在配方上下文中,配方步骤的显示顺序很重要,即使它不遵循配方步骤表主键顺序,因为此顺序将由用户设置 我想做一些类似的事情: recipe-step table: id | stepName | stepDescription ------------------------------- 1 | step1 | description1 2 | step2

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

我想做一些类似的事情:

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 ... 配方步骤表: id |步骤名称|步骤描述 ------------------------------- 1 |步骤1 |说明1 2 |步骤2 |说明2 3 |步骤3 |说明3 ... 配方表: 往复步 --------------- 1 | 1 1 | 2 1 | 3 ... 这样,步骤在步骤列中显示的顺序就是我需要维护的顺序

我对这种方法的关注是:

  • 如果必须在两个现有步骤之间添加新步骤,如何查询它?如果我只需要切换序列中已有的两个步骤的顺序,该怎么办
  • 如何确保订单保持一致性?如果我只是在配方表中插入或更新一些内容,它会在表的末尾弹出,对吗
你有没有其他的方法可以这样做?我还想过在配方步骤表中包含上一步和下一步列,但我认为这样使配方步骤可重用会更加困难。

在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

,但如何处理需要在两个现有步骤之间添加新步骤的情况?这意味着我必须再次更改接下来所有步骤的步骤顺序?因此,我实际上会更新与某个配方相关的所有步骤,即使我只需要添加一个。难道没有其他更简单的选择吗?我该如何查询类似的内容呢?您必须更新所有配方步骤,或者只计算其他步骤之间的顺序值,如
1.5