回答編集履歴

6

追記

2018/12/12 08:04

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -18,34 +18,66 @@
18
18
 
19
19
  <例>
20
20
 
21
+
22
+
23
+ 製品
24
+
25
+ |ID |名称|
26
+
27
+ |:--|--:|
28
+
29
+ |1 |製品A
30
+
31
+ |2 |製品B
32
+
33
+ |3 |製品C
34
+
35
+
36
+
37
+ 原料
38
+
39
+ |ID |名称|
40
+
41
+ |:--|--:|
42
+
43
+ |1 |原料n
44
+
45
+ |2 |原料z
46
+
47
+
48
+
49
+ 構成
50
+
21
- |ID |親ID|構成ID|名称|
51
+ |ID |親ID|構成ID|製品ID|原料ID
22
52
 
23
53
  |:--|:--:|:--:|--:|
24
54
 
25
- |1 |0| |原料n
55
+ |1 |0| ||1
26
56
 
27
- |2 |0| |原料z
57
+ |2 |0| ||2
28
58
 
29
- |3 |0| |製品A
59
+ |3 |0| |1|
30
60
 
31
- |4 |3|1|(原料n)
61
+ |4 |3|1|||
32
62
 
33
- |5 |3|2|(原料z)
63
+ |5 |3|2|||
34
64
 
35
- |6 |0| |製品B
65
+ |6 |0| |2|
36
66
 
37
- |7 |6|3|(製品A)
67
+ |7 |6|3|||
38
68
 
39
- |8 |6|2|(原料z)
69
+ |8 |6|2|||
40
70
 
41
- |9 |0| |製品C
71
+ |9 |0| |3|
42
72
 
43
- |10 |9|6|(製品B)
73
+ |10 |9|6|||
44
74
 
45
- |11 |9|1|(原料n)
75
+ |11 |9|1|||
46
76
 
47
77
 
48
78
 
49
79
  下位ノードへの問い合わせは自己結合となり、`COALESCE(A.構成ID, A.ID)=B.親ID`とすることで、製品の展開が行える事となる。
50
80
 
51
81
  ※上記は構成を示すことを主としいて、実際には、原料や商品といったマスタを別に持ち、外部参照する方が良いと思います。
82
+
83
+ ↑イメージ合わせました

5

追記

2018/12/12 08:04

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -46,4 +46,6 @@
46
46
 
47
47
 
48
48
 
49
+ 下位ノードへの問い合わせは自己結合となり、`COALESCE(A.構成ID, A.ID)=B.親ID`とすることで、製品の展開が行える事となる。
50
+
49
51
  ※上記は構成を示すことを主としいて、実際には、原料や商品といったマスタを別に持ち、外部参照する方が良いと思います。

4

追記

2018/12/12 04:47

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -43,3 +43,7 @@
43
43
  |10 |9|6|(製品B)
44
44
 
45
45
  |11 |9|1|(原料n)
46
+
47
+
48
+
49
+ ※上記は構成を示すことを主としいて、実際には、原料や商品といったマスタを別に持ち、外部参照する方が良いと思います。

3

修正

2018/12/12 03:07

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -18,24 +18,28 @@
18
18
 
19
19
  <例>
20
20
 
21
- |ID |親ID|名称|構成ID
21
+ |ID |親ID|構成ID|名称|
22
22
 
23
23
  |:--|:--:|:--:|--:|
24
24
 
25
- |1 |0|製品A|
25
+ |1 |0| |原料n
26
26
 
27
- |2 |1|原料z|
27
+ |2 |0| |原料z
28
28
 
29
- |3 |1|原料n|
29
+ |3 |0| |製品A
30
30
 
31
- |4 |0|製品B|
31
+ |4 |3|1|(原料n)
32
32
 
33
- |5 |4|製品A|1
33
+ |5 |3|2|(原料z)
34
34
 
35
- |6 |4|原料z|
35
+ |6 |0| |製品B
36
36
 
37
- |7 |0|製品C|
37
+ |7 |6|3|(製品A)
38
38
 
39
- |8 |7|製品B|4
39
+ |8 |6|2|(原料z)
40
40
 
41
+ |9 |0| |製品C
42
+
43
+ |10 |9|6|(製品B)
44
+
41
- |9 |7|原料n|
45
+ |11 |9|1|(原料n)

2

追記

2018/12/12 02:46

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -13,3 +13,29 @@
13
13
  [SQLで木と階層構造のデータを扱う(1)―― 入れ子集合モデル](http://www.geocities.jp/mickindex/database/db_tree_ns.html)
14
14
 
15
15
  [階層構造(入れ子集合モデル)について](https://qiita.com/reflet/items/a454b40b57de81598732)
16
+
17
+
18
+
19
+ <例>
20
+
21
+ |ID |親ID|名称|構成ID
22
+
23
+ |:--|:--:|:--:|--:|
24
+
25
+ |1 |0|製品A|
26
+
27
+ |2 |1|原料z|
28
+
29
+ |3 |1|原料n|
30
+
31
+ |4 |0|製品B|
32
+
33
+ |5 |4|製品A|1
34
+
35
+ |6 |4|原料z|
36
+
37
+ |7 |0|製品C|
38
+
39
+ |8 |7|製品B|4
40
+
41
+ |9 |7|原料n|

1

推敲

2018/12/12 02:22

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -1,8 +1,8 @@
1
- 目的としては階層構造なので、ベタ打ちしたくないのであれば、**経路列挙モデル**ではなく**入れ子集合モデル**ということになります。
1
+ 目的としては階層構造なので、ベタ打ちしたくないのであれば、**経路列挙モデル**ではなく**入れ子集合モデル**ということになります。
2
2
 
3
3
 
4
4
 
5
- MySQLが8.0なら再帰クエリーが使えますが、そうでないならSQLには手間や制約(階層の深さ)がかりますが実現できないわけではありません。
5
+ MySQLが8.0なら再帰クエリーが使えますが、そうでないならSQLには手間や制約(階層の深さ)がかりますが実現できないわけではありません。
6
6
 
7
7
 
8
8