我可以就我的个人 MySQL 项目征集一些意见吗?特别是多对多关系

Could I get some input on my personal MySQL project? Specifically with Many to Many relationships

我最近刚从大学毕业,想继续掌握我的数据导向技能。我通过使用 MySQL Workbench.

在我的本地笔记本电脑上设置我自己的个人数据库来做到这一点

我的数据库的目的是记录我从 2018 年底开始阅读的书籍。我从头开始使用 ERD 从概念上设计我的数据库,并了解它们之间的关系如何在不同实体之间发挥作用。我定义了几个多对多关系,这导致了我的第一个主要问题

我设计的多对多关系是否合乎逻辑且有意义?

(我在我的 ERD 中包含了一个 link 来帮助你们可视化我的数据库)

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

许多不同的书可以有许多不同的类型与之相关联。因此需要在书之间建立多对多的关系table 和类型 table.

许多不同的书可以被许多不同的读者阅读,许多读者可以阅读许多不同的书因此需要在 Book 和 [=51= 之间建立多对多的关系].

My ERD

我很确定这些关系在逻辑上是有意义的,但第二意见总是有帮助的。

第二个主要问题是:

(假设多对多关系是正确的) 我怎样才能创建一个 JOIN 使我能够可视化与我的书籍相关的流派数据库和另一个 JOIN 以可视化哪些读者阅读了哪些书籍?

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

是的,您需要多对多关系 Book/Genre 和 Book/Reader。

您可能还需要 Book/Author 的多对多。 Some books 有多位作者。

向作者查询我读过的书:

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_IDba.Book_ID 相当,而且我不需要 Book table 的任何属性来进行此查询, 所以我跳过了 Book table.

的连接

ReaderGenre之间的link是不必要的,很可能会导致数据异常。例如,如果我读了一本被标记为科幻小说的书,但我的 Reader 记录和该类型之间没有 link,我真的读过它吗?