で多対多階層構造を実装する方法:要するにHow to record sequential collections of records in MySQLこれは、ここで私の質問からのフォローアップであるMySQLの
、私は、MySQLにレシピや命令の別のテーブルを実装します。レシピは、一連の指示書または他のレシピです。たとえば、Peach_preserve
レシピと、Peach_preserve
を使用するPeach_tart
と、一連の他の手順(手順)を想像することができます。 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
レシピA内にあるという考えを組み込むことですサブコンポーネントは、アトミック/離散命令ではなく、別のレシピである可能性があります。だから、私の考えでは、このようにそれを行うことです。
ここ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
あなたはそのうちの1つは他の2つの命令は、その後、Recipe1
その後、Recipe1
は、3つの手順で構成され、かつRecipe2
は、1つの命令で作られていることがわかりますステップ1の繰り返し。私はこのアイデアを捉える他の方法を考えましたが、それらはヌルエントリの束を含んでいます。私は上記に好きではないことは、キーが4つの属性で構成されていることである...
私の質問は以下のとおりです。
- DB内の再帰的なアイデアを組み込むことをお勧めしますか?
- もしそうなら、これを行う方法ですか、それとも改善することができますか?
クイック編集:私は階層を読み始めています。私の例では、それぞれ1つのレシピに複数の親を持つことができます。
これは、階層クエリまたはBOM(Bill of Material)クエリとも呼ばれます。これは、DB内のツリーの表現に関連しています。あなたがそれらの用語を研究していないなら、多分あなたはすべきです。このようなデータ構造を処理するためのシステムがいくつかあります。 –
それぞれの子が多くの親を持つことができるので、それがツリーであるかどうかはわかりません(つまり、あるレシピが複数のレシピのサブコンポーネントになる可能性があります)。 – JDelage
少なくともDAG(有向非循環グラフ)です。それが木であるかどうかは、あなたのツリーの定義に依存します。私は明らかに、ノードが複数の他のノードを指し示すようにすることができます。数学用語はそれを排除するかもしれない(math.stackexchange.comで議論する)。非循環データ構造でない場合、データにバグがあります(しかし、私はいくつかの挿入が非循環性を確認するか、承認された用語が何であれ)。しかし、6mmのナットのようなものは、多くの異なるアセンブリで使用することができるBOM(Bill of Material)タイプの構造です。 –