我刚刚开始学习数据库,我很困惑使用一对多与多对多的关系。
所以我想出了一个关于顾客和食物之间关系的简单例子。 客户点菜。
1)如果我使用一对多关系,我会说客户可以订购许多食物。
基于上图,
1)bob orders noodles and rice
2)jane orders noodles and crab
1)如果我使用多对多的关系,我会说许多顾客可以订购许多食物。
1)bob orders noodles and rice
2)jane orders noodles and crab
我一直认为它是同样的事情。
bob still orders noodles and rice
and
jane still orders noodles and crab
无论我是使用一对多还是多对多关系。如果我错了,请纠正我。
答案 0 :(得分:12)
食物样本确实适用于一对多关系:一个顾客可以订购许多菜肴。
书籍样本更好地描述了多对多关系:
作者可以写很多书(这是一对多的关系)。但他也可以让合着者参与其中 - 一本书可以有很多作者。
答案 1 :(得分:5)
一对多的关系图可能会产生误导,因为面条出现两次,而你应该只有一条记录(就像你在多对多图中正确拥有的那样)。
您的例子是多对多关系:客户可以订购许多食品,许多客户可以订购相同的食品。
如果您将其建模为一对多关系,则要么说客户只能订购一件商品,或者该商品只能由一位客户订购。
不要将参与与基数混淆:术语“一对多”表示关系“一”侧的实体事件(单个记录,例如面条)只能出现一次,而实体“很多”方面的发生(例如Bob)可能会发生很多次。
面条 - 连锁餐厅场景中一对多关系的一个例子: 员工为分支机构(仅限一个分支机构)工作 同一个分支机构将有许多员工在那里工作。
答案 2 :(得分:1)
您的客户和食品示例为many-to-many
。
一种食物将被许多顾客食用。
同样,一个客户可以吃多种食物。
所以,多对多从两边都表示1-n。
鉴于Book没有共同作者,作者和图书是one-to-many
的正确示例。否则,它也是many-to-many
的示例。