我有一个食品订购系统,有主要项目,如拿铁,长黑,白色,浓咖啡,美式咖啡等。每个项目存储在DB如下。
* db缺少不必要的列
+----+----------------+-------------+
| id | item_name | price |
+----+----------------+-------------+
| 1 | latte | 2.0000 |
+----+----------------+-------------+
| 2 | long black | 2.5000 |
+----+----------------+-------------+
| 3 | flat white | 3.0000 |
+----+----------------+-------------+
| 4 | americano | 2.0000 |
+----+----------------+-------------+
我需要为每个项目添加子选项,但每个项目都有唯一的选项集,例如americano
将具有牛奶类型,糖类型。扁平的白色也会有牛奶类型,但需要是不同的菜单,因为americano可能不需要牛奶选项,因此将有不同的子菜单。例如。
Flat white milk menu
+----+----------------+------------+
| id | item_name | submenu_id |
+----+----------------+------------+
| 1 | soy | 1 |
+----+----------------+------------+
| 2 | rice | 1 |
+----+----------------+------------+
| 3 | regular | 1 |
+----+----------------+------------+
| 4 | trim | 1 |
+----+----------------+------------+
americano milk menu
+----+----------------+------------+
| id | item_name | submenu_id |
+----+----------------+------------+
| 5 | soy | 2 |
+----+----------------+------------+
| 6 | rice | 2 |
+----+----------------+------------+
| 7 | regular | 2 |
+----+----------------+------------+
| 8 | trim | 2 |
+----+----------------+------------+
| 9 | no Milk | 2 |
+----+----------------+------------+
然后可能会有一个常见的项目,如糖...
sugar
+----+----------------+------------+
| id | item_name | submenu_id |
+----+----------------+------------+
| 10 | Sugar | 3 |
+----+----------------+------------+
| 11 | no Sugar | 3 |
+----+----------------+------------+
将层次结构存储在数据库中的最佳方法是什么?例如,平白将需要值1,3
americano将需要2,3
。对于需要更多选项的东西,可能需要相同类型的系统。我需要能够将它们拉出来并使用javascript加载每个子选项。
答案 0 :(得分:0)
每个子选项是仅属于一个选项还是属于两个选项?我想糖会属于每种选择....
在这种情况下,您将需要三个表:一个选项表,例如您已经拥有(id / name / price),一个子选项表(id / name)和一个连接表(选项/子选项) 。您可以通过添加标志字段来组合选项和子选项表,但在这种情况下,您必须确保正确填充连接表。