如何在MySQL中实现多对多层次结构

时间:2012-03-13 20:13:42

标签: mysql hierarchical-data

这是我的问题的后续跟进:How to record sequential collections of records in MySQL

简而言之,我想在MySQL中实现一个食谱表和另一个指令。配方是一系列连续的指令或其他配方。例如,您可以想象Peach_preserve食谱和使用Peach_tart的{​​{1}},以及一系列其他步骤(说明)。 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 由3条指令组成,Recipe1由一条指令组成,然后是Recipe2,然后是另外2条指令,其中一条是重复的我想到了其他方法来捕捉这个想法,但它们涉及一堆空条目。我在上面不喜欢的是,密钥是由4个属性组成的......

我的问题是:

  1. 在db中包含递归的想法是个好主意吗?
  2. 如果是这样,这是方法吗,还是可以改进?
  3. 快速编辑:我开始阅读层次结构。在我的例子中,每个食谱可以有几个父母。

1 个答案:

答案 0 :(得分:2)

这是一种非常常见的技术。它用于在db中存储分层数据(您称之为递归)。

但是,您必须管理应用程序中的完整性,因为无法使用外键,因为该关系是以isRecipe标志为条件的。