2014-01-28 168 views
2

我刚开始学习数据库,并且对使用一对多和多对多的关系感到困惑。一对多与多对多的关系

所以我想出了一个关于顾客和食物之间关系的简单例子。 客户点菜。

relationship

1)如果我使用一对多的关系,我会说,客户可以订购许多食品。

onetomany

基地上图中,

1)bob orders noodles and rice 
2)jane orders noodles and crab 

1)如果我使用多对多的关系,我会说,许多客户可以订购许多食品。 enter image description here

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 

无论我是否使用一对多或多对多的关系。纠正我,如果我错了。

回答

5

食物样本在一对多关系中工作良好:一位顾客可以订购很多菜肴。

的许多一对多关系更好地书样本描述:

作者可以写很多书(这将是一个一对多的关系)。但他也可以让合着者参与其中 - 一本书可以有很多作者。

+0

感谢您的解释。对不起,只是想问一下我的食品样本,如果我选择使用多对多的关系,会不会有什么错误?或者应该说,在关系数据库设计中,只要有意义,没有对错之分? – user2947249

+0

这真的取决于你想要什么 - 你需要知道哪些食品是由哪些顾客订购的?然后m2m可能是一个更快的解决方案(您也可以在o2m模型中实现此目的,但是您必须搜索所有客户)。如果您只需要知道每个客户订购的内容,那么o2m模型似乎更合适。 –

+0

我明白了,谢谢 – user2947249

3

一对多关系图很可能是误导性的,因为面条出现两次,而您应该只有一条记录(就像您在多对多图中正确显示的那样)。

您的示例是一个多对多的关系:客户可以订购多种食品,并且许多客户可以订购相同的食品。

如果您将其建模为一对多关系,您或者说客户只能订购一件商品,或者该商品只能由一名客户订购。

不要将参与与基数混淆:术语“一对多”表示关系“一方”一侧的实体发生(单一记录,例如面条)只能发生一次,而“许多”一侧的实体发生(例如鲍勃)可能会发生很多次。

的一个一对多的关系的一个例子,在面条餐厅链的场景: 雇员适用于一个分支(而且只有一个分支),而 同一分支将有许多员工在那里工作。