sli*_*ier 10 mysql database-design
忍受我,我真的很难解释的事情,我甚至不知道这个问题的合适的标题
好的家伙我有这个问题
我已经有一个表名meal
+------+--------+-----------+---------+
| id | name | serving | price |
+------+--------+-----------+---------+
| 1 | soup1 | 2 person | 12.50 |
+------+--------+-----------+---------+
| 2 | soup2 | 2 person | 15.50 |
+------+--------+-----------+---------+
| 3 | soup3 | 2 person | 23.00 |
+------+--------+-----------+---------+
| 4 | drink1 | 2 person | 4.50 |
+------+--------+-----------+---------+
| 5 | drink2 | 2 person | 3.50 |
+------+--------+-----------+---------+
| 6 | drink3 | 2 person | 5.50 |
+------+--------+-----------+---------+
| 7 | frui1 | 2 person | 3.00 |
+------+--------+-----------+---------+
| 8 | fruit2 | 2 person | 3.50 |
+------+--------+-----------+---------+
| 9 | fruit3 | 2 person | 4.50 |
+------+--------+-----------+---------+
Run Code Online (Sandbox Code Playgroud)
好吧,现在我想让管理员从这张meal桌子创建一个组合餐
这样的意思是,一个组合餐可以有无限数量的餐
目前即兴谜题如何存储/链接组合餐到我不想存储下面的东西
+------+--------------+-----------+-----------+
| id | combo_name | serving | meal_id |
+------+--------------+-----------+-----------+
| 1 | combo1 | 2 person | 1,4,7,9 |
+------+--------------+-----------+-----------+
| 2 | combo2 | 2 person | 2,5,8 |
+------+--------------+-----------+-----------+
| 4 | combo3 | 2 person | 3,5,6,9 |
+------+--------------+-----------+-----------+
Run Code Online (Sandbox Code Playgroud)
看看meal_id专栏,我不认为这是存储数据的好方法
Qua*_*noi 22
创建多对多链接表:
combo_id meal_id
1 1
1 4
1 7
1 9
2 2
2 5
2 8
3 3
3 5
3 6
3 9
Run Code Online (Sandbox Code Playgroud)
选择给定组合的所有餐点:
SELECT m.*
FROM combo_meal cm
JOIN meal m
ON m.id = cm.meal_id
WHERE cm.combo_id = 1
Run Code Online (Sandbox Code Playgroud)
不,这绝对不是存储数据的好方法。combo_header一张桌子,一张桌子,你会更好combo_details。
combo_header会是这样的:
+------+--------------+-----------+
| id | combo_name | serving |
+------+--------------+-----------+
| 1 | combo1 | 2 person |
+------+--------------+-----------+
| 2 | combo2 | 2 person |
+------+--------------+-----------+
| 4 | combo3 | 2 person |
+------+--------------+-----------+
Run Code Online (Sandbox Code Playgroud)
然后,combo_details会是这样的:
+------+-----------+
| id | meal_id |
+------+-----------+
| 1 | 1 |
+------+-----------+
| 1 | 4 |
+------+-----------+
| 1 | 7 |
+------+-----------+
| 1 | 9 |
+------+-----------+
... / you get the idea!
Run Code Online (Sandbox Code Playgroud)
顺便说一句,通过在单个列中使用多个值,您违反了关系数据库的第一范式。
我建议的方式将让您回答查询,例如获取组合 1 的所有餐点名称,非常容易解决。
| 归档时间: |
|
| 查看次数: |
19816 次 |
| 最近记录: |