替代多对多的关系

时间:2016-12-07 21:37:10

标签: sql sql-server ssms

假设我有两张桌子 - 书和作者。一本书可以有很多作者,作者可以有很多书,这意味着他们有多对多的关系,我需要第三个表来实现它。

我真的想避免这种情况,因为我是初学者,这使我的查询更加复杂。

所以我的问题是:除了多对多之外,实现这种关系的最佳方式是什么?

我只是想在每个表中放一个外键,所以我在books表中有一个authoridFK,在authors表中有bookIdFK。但我不确定这种关系会是什么类型,我会纠正它以及它在ERD上的表现吗?

有人可以向我澄清这些吗?

2 个答案:

答案 0 :(得分:3)

“最佳”,最标准的方法是使用第三个表来维持关系。

至于查询复杂性,您可以查看在查询中使用JOIN或获取处理这些类型关系的ORM。

给定上下文的示例连接查询将返回所有作者的列表以及他们贡献的所有书籍如下所示:

select a.AuthorName, b.BookName 
from author a
  join AuthorBookMapping m on m.AuthorID = a.AuthorID
  join Book b on m.BookID = b.BookID

答案 1 :(得分:0)

中间表是建立关系的唯一正确方法。 这种逻辑不会使结构复杂化,但是相反,它允许遵循良好实践:

  • 每个数据项必须位于数据库中的唯一位置
  • 每个记录(对象)必须具有唯一的主键。

这样,您既可以将作者链接到他们的书,也可以将多位作者分配到同一本书,当然也可以将多本书分配给同一作者。

高级CRUD系统还允许您在书籍列表中显示作者并编辑这些关系。

这里是tutorial about relationships in a MySQL database

它说明了直接/间接关系以及识别/非识别关系的主要内容