mysql - 我如何建模这种关系(避免循环)?

标签 mysql

在 MySQL 中...这可能不是我所追求的关系的最佳示例,但这本质上是我在数据库中尝试做的事情(这从我的完整数据模型中非常简化)。

假设我们有一个名为“author”的表和一个名为“book”的表。

  • “DB.author”:author_id、author_name
  • 'DB.book':book_id、book_name、author_id (这是一种识别关系)

现在假设我们有一个名为 reader 的表,其中包含最喜欢的作者和最喜欢的书籍的列。每个读者都有一个最喜欢的作者,但他们并不都有最喜欢的书。如果他们确实有一本最喜欢的书,那一定是他们最喜欢的作者写的。

  • “DB.reader”:reader_id、reader_name、favorite_author_id、favorite_book_id

我不能只删除 favorite_author_id 列,因为 favorite_book_id 可能为空。是否可以对这种关系进行建模并避免循环?

最佳答案

也许有一个reader_favoritereader_id , favorite_type ,和favorite value哪里favorite_type可以是一本书或作者。然后您可以从reader LEFT JOIN至reader_favorite然后左连接到 bookauthor来自reader_favorite table 。

然后,您只需确保读者是否有 book 的条目。和author reader_favorite中最喜欢的类型表,这两个值(value)观一致,但这已经是一个问题了:没有伤害,没有犯规。

关于mysql - 我如何建模这种关系(避免循环)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26677321/

相关文章:

mysql - SQL 约束问题

php - MySQL GROUP BY - 获取该特定组中的项目

mysql - 将一些表中的一些列合并到一个新表中

PHP MySQL 更新查询不适用于变量

javascript - 状态下拉列表将不会验证(php)

mysql - 棘手 : Left join relation with row value

php - mysql表无数据时获取消息而不是表

mysql - 更新多个表中的公共(public)字段

php - MySQL数据库设计困惑|权限

Mysql使用多个条件选择数据