Database 为什么需要连接表来实现多对多关系?

Database 为什么需要连接表来实现多对多关系?,database,many-to-many,junction-table,Database,Many To Many,Junction Table,这一直困扰着我,也许有人能帮我澄清一下 假设我有书,有作者:一本书可以由许多作者写,一个作者可以写很多书 为什么我不能用下面的模式来捕获它?为什么我需要一个连接表 Books -------- BookID (PK) AuthorID (PK) BookName 书 -------- 图书编号(PK) 作者(PK) 书名 作者 -------- 作者(PK) 作者姓名 因为要使一本书有多个作者,必须在Books表中创建一个重复的行。在您的示例中,这并不是那么糟糕,但是想象一下,如果Books表有

这一直困扰着我,也许有人能帮我澄清一下

假设我有书,有作者:一本书可以由许多作者写,一个作者可以写很多书

为什么我不能用下面的模式来捕获它?为什么我需要一个连接表

Books -------- BookID (PK) AuthorID (PK) BookName 书 -------- 图书编号(PK) 作者(PK) 书名 作者 -------- 作者(PK) 作者姓名
因为要使一本书有多个作者,必须在Books表中创建一个重复的行。在您的示例中,这并不是那么糟糕,但是想象一下,如果Books表有10列,或者20列或更多列。所有这些数据都将被复制,这增加了数据完整性随着时间的推移出现问题的风险。

但是,严格来说,尽管我的示例是非规范化的,并且存在重复数据的问题,但仍然可以捕获多对多关系,是吗?是的。你可以用不止一种方法,不同的设计会有其优缺点。但是Jason,我读的所有关于这方面的书籍和资料都表明,要解决多对多的关系,您需要第三个表。我假设您正在阅读的书籍和资源鼓励您使用最佳实践,即使用联接表。没有它也不是绝对不可能做到的,但它也不是一个被普遍接受的好设计。 Authors -------- AuthorID (PK) AuthorName