SQL:数据库中的 n 对 m 关系,关系介于一个 table 之间

SQL: n to m relationship in a database with relations inbetween one table

在谈论数据库中的 n 到 m 关系时,经常会提到交集 table。 例如。有作者和书籍,作者可以与多本书有关系,反之亦然。

但是:我如何建模这种关系,作者也可以在他们和书籍之间建立关系?

例如 - 作者 A 写了第一本书和第二本书,作者 A 是作者 B 的朋友。 - 第 1 本书与第 2 本书属于同一类型。

那么我有多个交集 table 吗? 例如。作者-书籍关系 table、作者-作者 "Friend"-关系 table 和书籍-书籍 "Genre" 关系?

我是数据库方面的初学者,SQL... 谢谢您的帮助, 安妮

是的,这是相当标准的。如果书籍可以有多个流派,那么 Book-Genre table 包含一侧的流派 ID 和另一侧的图书 ID 是非常合适的。 Author-Friend 关系有点棘手,因为交集 table 将加入作者 table 两次(author-friend 关系中的每个作者一次),但本质上是相同的.

如您所见,这些与 Book-Author table 相同,后者在 n:m 基础上将书籍与其作者链接。

寻找 student-teacher-course 个例子,因为它们相似并且通常是 n:m 解释的一部分。

要创建一个简单的 1:n relation-ship,用一个 FOREIGN KEY 列来指定相关记录就足够了。

但是,无论何时您想要为 m:n 关系建模,或者您可能需要向 1:n 关系添加额外信息,您都需要一个映射 table.

  • 映射 table 与 1:n 关系:想象一下,一本书可以正好有一个当前 reader。如果您在 Book table 中使用 FK CurrentReaderID,一旦您更改了 FK-value,您将无法找到以前的 reader .
  • 映射 tables 与 m:n 关系:将关系视为一个对象,具有自己的特定详细数据(when、validTo、createdBy...)

是的:在设计良好的数据库中,您会发现许多table具有范围广泛的不同关系/映射 其中。