SQL:数据库中的n到m关系,其中一个表

时间:2017-02-01 09:08:19

标签: sql database relationship intersection

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

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

E.g。 - 作者A写过第1册和第2册,作者A是作者B的朋友。 - 第1册与第2册相同的类型。

那么我有多个交叉表吗? 例如。作者 - 书籍关系表,作者 - 作者“朋友” - 关系表和书籍“流派”关系?

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

2 个答案:

答案 0 :(得分:0)

是的,这是相当标准的。如果书籍可以有多种类型,则Book-Genre表格从一侧包含Genre ID,而另一侧包含Book Ids则非常合适。作者 - 朋友关系有点棘手,因为交集表将连接到作者表两次(对于作者 - 朋友关系中的每个作者一次),但基本上是相同的。

正如您所确定的那样,这些与书籍作者表相同,该表以n:m为基础将书籍与作者联系起来。

查找学生 - 教师 - 课程示例,因为它们相似并且通常是n:m解释的一部分。

答案 1 :(得分:0)

要创建一个简单的1:n关系,只需一个FOREIGN KEY - 列来指定相关记录。

但是,无论何时想要建立m:n关系的模型,或者您可能需要向1:n关系添加其他信息,您都需要一个映射表。

  • 使用1:n关系映射表:想象一下,一本书可以只有一个当前读者。如果您在CurrentReaderID表格中使用FK Book,则在您更改了FK值后,您将无法找到以前的读者。
  • 使用m:n关系映射表:将关系视为对象本身及其自己的特定详细数据(when,validTo,createdBy ...)

是的:在设计良好的数据库中,您会发现多个表,其中包含广泛的不同关系/映射