问一个简单的数据表设计问题(一对多一对多)

以为支持markdown,编辑了半天都是乱的

例子图片

ps: 以为支持markdown,编辑了半天,直接上图吧,为了大家看的方便

-------------分割线---------------
因为上边例子举的不合适,我直接讲我的业务场景吧:
用户下多个订单(最小粒度),操作合并多个订单为操作单,供应商根据操作单生成相应的执行单(比如:提货单、订舱单等)。即,订单(n)->操作单(1),执行单(n)->操作单(1).
在整个订单、操作单的流转过程中,要根据订单查到操作单,根据订单查到执行单。也能根据执行单查到所操作的订单。就这么个需求,还望大神指导。

我自己想了个方案:就是订单表、操作单表、执行单表、关系表(专门存储三者间的关系),不知道好不好

可以在 食材表和灶具表 建一个中间表 在在灶具表和食品表 建一个中间表 然后再配一个级联关系

你的业务场景有问题,应该是目标导向的:
要做10个葱花饼,需要选购30g葱花、150g面粉,需要用平底锅加工。
如果从原料出发,葱花+面粉也可以做花卷啊。

应该是4张表
食材(id,name,单位)
灶具(id,name)
食品(id,name,单位,灶具id)
配料表(食品id,食材id,配比) -- 前2个字段为主键,配比表示1单位食品需要多少单位食材

配料表数据举例(CSV格式)

食品id,食材id,配比
1,1,15
1,2,3
2,1,5
2,3,1

按照前面描述的业务,查询语句(SQL Server 格式)为

SELECT c.name AS 食品,
       10 AS 食品数量,
       c.单位 As 食品单位,
       b.name AS 灶具,
       a.name AS 食材,
       10 * d.配比 AS 食材数量,
       a.单位 As 食材单位
  FROM 配料表 d
  JOIN 食品 c
    ON d.食品id = c.id
  JOIN 灶具 b
    ON c.灶具id = b.id
  JOIN 食材 a
    ON d.食材id = a.id
 WHERE d.食品id = 1

结果(CSV格式)

食品,食品数量,食品单位,灶具,食材,食材数量,食材单位
葱花饼,10,个,平底锅,面粉,150,g
葱花饼,10,个,平底锅,葱花,30,g