这是我的问题的后续:How to record sequential collections of records in MySQL
简而言之,我想在MySQL中实现一个菜谱表和另一个指令表。配方是一系列连续的指令或其他配方。例如,您可以想象一个Peach_preserve
菜谱,一个使用Peach_tart
的Peach_preserve
菜谱,以及一系列其他步骤(说明)。Peach_preserve
可用于许多其他配方。
在我的上一个问题中,我被推荐了一种设计,允许在配方中为每个指令指定一个特定的顺序:
recipe
id name
1 Recipe1
2 Recipe2
recipe_instruction
recipe_id instruction_id sortorder
1 5 1
1 3 2
1 4 3
2 6 1
2 7 2
2 3 3
2 6 4
我现在想做的是把一个配方中的一个子组件可能是另一个配方而不是原子/离散指令的思想结合起来。所以我的想法是这样做:
recipe
id name
1 Recipe1
2 Recipe2
recipe_instruction
recipe_id step_id isRecipe sortorder
1 5 F 1
1 3 F 2
1 4 F 3
2 1 F 1
2 1 T 2
2 2 F 3
2 1 F 4
这里可以看到
Recipe1
由3条指令组成,Recipe2
由一条指令组成,然后是Recipe1
,然后是另外2条指令,其中一条是重复步骤1。我想用其他方法来捕捉这个想法,但是它们包含了一堆空条目。我不喜欢的是上面的键是由4个属性组成的。。。我的问题是:
在数据库中合并递归思想是个好主意吗?
如果是这样的话,是这样做的,还是可以改进?
快速编辑:我开始阅读层次结构。在我的例子中,每一个食谱可以有几个父母。
最佳答案
这是一种非常常见的技术。它用于在数据库中存储分层数据(称为递归数据)。
但是,您必须管理应用程序中的完整性,因为不能使用外键,因为该关系是有条件与isRecipe标志相关联的。