Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能得到一些关于我个人MySQL项目的信息吗?特别是多对多关系_Mysql_Join_Many To Many_Erd - Fatal编程技术网

我能得到一些关于我个人MySQL项目的信息吗?特别是多对多关系

我能得到一些关于我个人MySQL项目的信息吗?特别是多对多关系,mysql,join,many-to-many,erd,Mysql,Join,Many To Many,Erd,我最近刚从大学毕业,希望掌握我的数据导向技能。我通过使用MySQL Workbench在本地笔记本电脑上建立自己的个人数据库来实现这一点 我的数据库的目的是记录我从2018年末开始阅读的书籍。我从零开始,使用ERD从概念上设计数据库,并了解它们在不同实体之间的关系。我定义了一些多对多关系,这引出了我的第一个主要问题 我设计的多对多关系是否合理合理? (我已经添加了一个指向我的ERD的链接,以帮助你们可视化我的数据库) 在设计多对多关系时,我的看法是: 许多不同的书籍可以有许多不同的体裁与之关联。

我最近刚从大学毕业,希望掌握我的数据导向技能。我通过使用MySQL Workbench在本地笔记本电脑上建立自己的个人数据库来实现这一点

我的数据库的目的是记录我从2018年末开始阅读的书籍。我从零开始,使用ERD从概念上设计数据库,并了解它们在不同实体之间的关系。我定义了一些多对多关系,这引出了我的第一个主要问题

我设计的多对多关系是否合理合理?

(我已经添加了一个指向我的ERD的链接,以帮助你们可视化我的数据库)

在设计多对多关系时,我的看法是:

许多不同的书籍可以有许多不同的体裁与之关联。因此需要在图书表和体裁表之间建立多对多关系

许多不同的书籍可以被许多不同的读者阅读,许多读者可以阅读许多不同的书籍因此需要在书籍和读者之间建立多对多的关系

我很确定这些关系在逻辑上是合理的,但第二种意见总是有用的

第二个主要问题是:

(假设多对多关系是正确的)我如何进行连接,使我能够可视化与数据库中的书籍相关联的流派,以及另一个连接,以可视化哪些读者阅读了哪些书籍?


我习惯于在基本表关系中使用联接,但在设计联接时,我没有使用多对多复合键表的经验。如何确保正确链接所有表并获得有效记录以显示

是的,你需要书/流派和书/读者之间的多对多关系

您可能还需要一个多对多的书籍/作者。有多个作者

要查询我读过的书籍的作者,请执行以下操作:

SELECT a.*
FROM Reader AS r
JOIN Book_Reader AS br ON r.Reader_ID = br.Reader_ID
JOIN Book_Author AS ba ON br.Book_ID = ba.Book_ID
JOIN Author AS a ON ba.Author_ID = a.Author_ID
WHERE r.Reader_ID = 'BillKarwin'
我有点作弊,因为我知道
br.Book\u ID
ba.Book\u ID
相当,并且我不需要
Book
表中的任何属性来进行此查询,所以我跳过了对
Book
表的连接


阅读器
流派
之间的链接是不必要的,可能会导致数据异常。例如,如果我读了一本被标记为科幻小说的书,但我的读者记录和该类型之间没有联系,我真的读过吗?

是的,你需要多对多的关系书/类型和书/读者

您可能还需要一个多对多的书籍/作者。有多个作者

要查询我读过的书籍的作者,请执行以下操作:

SELECT a.*
FROM Reader AS r
JOIN Book_Reader AS br ON r.Reader_ID = br.Reader_ID
JOIN Book_Author AS ba ON br.Book_ID = ba.Book_ID
JOIN Author AS a ON ba.Author_ID = a.Author_ID
WHERE r.Reader_ID = 'BillKarwin'
我有点作弊,因为我知道
br.Book\u ID
ba.Book\u ID
相当,并且我不需要
Book
表中的任何属性来进行此查询,所以我跳过了对
Book
表的连接


阅读器
流派
之间的链接是不必要的,可能会导致数据异常。例如,如果我读了一本被贴上科幻小说标签的书,但我的读者记录和这一类型之间没有联系,我真的读过吗?

从概念上讲,我更喜欢这样:一本书可以被许多不同的读者读,而一个读者可以从概念上读许多不同的书,我更喜欢这样:一本书可以被许多不同的读者阅读,而一个读者可以阅读许多不同的书