【问题标题】:Why is this ERD Entity one to many?为什么这个 ERD 实体是一对多的?
【发布时间】:2018-04-03 11:00:09
【问题描述】:

这是我的任务:现在是您从头开始创建完整 ERD 的机会。我们希望您创建一个 Web 应用程序,允许用户查看书籍列表(每本书都有书名和作者姓名)。此外,应该允许用户保存自己喜欢的书籍列表。

而下图就是解决办法。

看到解决方案,我可以理解一个作者可以写很多本书。一本书可以在许多收藏夹中。但是许多收藏夹中的一位用户?用户和收藏夹不应该是一对一的关系吗?一位用户有一个收藏夹列表?

【问题讨论】:

  • 一本书可以成为很多用户的最爱。或者,换句话说,许多用户可以收藏同一本书。

标签: mysql entity-relationship erd


【解决方案1】:

booksusers 之间的关系是 N:M,它是多对多的,并且通过称为 favourites 的关联实体(之间的表)实现>。这就是您通常在两个实体之间实现 N:M 关系的方式:通过创建一个“桥”表,您的两个表都具有 1:N 关系(一对多)。

在您的情况下,一个用户可以收藏多本书,就像一本书可以被许多用户收藏一样。这意味着 favourites 表中的候选键由 booksusers 表的主键组成,即 (user_id, book_id)。


如果您在 usersfavourites 表之间存在 1:1 的关系,这意味着一个用户只能收藏一本书,并且您不需要遵循该声明favourites 表,但可以将图书的主键放在 users 表中,从而使这种关系为 1:N(图书和用户之间)。

【讨论】:

  • 谢谢!现在开始有意义了。我还有一个问题,只是为了确保我明白这一点。为什么这里有关联表而不是多对多关系,之间没有桥梁?
  • 如果没有表格,就不可能实现多对多关系。这是因为如果您希望 users 表中的一行(这里:一个用户)与许多书(作为他们的最爱)有联系,并且您将 book_id 放在 users 表中,那么您将只有一个用户最喜欢的书。如果您想放置许多带有书籍 ID 的行,那么您的表用户不会识别用户(您将其识别为主键,因为一个用户仅由一行表示),而是您的表会将一行识别为连接在一个用户和一本书之间。
猜你喜欢
  • 2014-01-19
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 2021-06-15
  • 2011-02-16
相关资源
最近更新 更多