【问题标题】:Nested foreign keys (with multiple tables)嵌套外键(带有多个表)
【发布时间】:2012-12-15 17:47:30
【问题描述】:

我有三张桌子:

用户:id

文件夹:id、user_id

单词:id、folders_id

(每个表都有更多的列,但它们与这个问题无关)

一个用户包含多个文件夹,每个文件夹包含多个单词。

到目前为止一切顺利。我在 MySQL Workbench 的帮助下将这些表与外键互连。

MySQL-Workbench 对第一个连接 (folders.user_id -> user.id) 所做的与我预期的一样。但是当我添加第二个关系(words.folders_id->folders.id)时,它会自动在两列上生成一个索引:预期的一个folders.id,但也在第一个外键folders.user_id的列上

我一直认为,MySQL 数据库中的重复数据不是一个好的解决方案。但是为什么 MySQL-Workbench 建议我这样做呢?我能想到的唯一优点是,我可以直接从单词中选择用户的 id,而无需 JOIN。这是这个索引超过两列的目的吗?

感谢您向我解释这种现象。


我还没有找到解决方案,但是当我在谷歌图片中搜索diagrams of relationships in MySQL Workbench 时,这些嵌套的外键永远不会出现。所以我认为它们不是必需的,我只是在 MySQL Workbench 创建它们时继续删除它们。

【问题讨论】:

  • 您的words 表是否也有一个名为user_id 的列?
  • MySQL Workbench 自动为我生成此列 words.user_id。我现在的问题是,为什么它会产生这种“双倍数据”。

标签: mysql foreign-keys mysql-workbench


【解决方案1】:

你为什么不把查询写成如下:

select user.id from user
inner join folders on folders.user_id=user.id
inner join words on words.folder_id=folders.id

【讨论】:

  • 我就是这样做的。但我的问题是,为什么 MySQL Workbench 会向我提出另一种解决方案。
  • 这就是为您服务的方式吗?
  • 是的,这符合我的目的。它运行良好,但我的问题是另一个问题:为什么 MySQL Workbench 默认以另一种方式执行?这种方式对您在回答中描述的方式有什么好处吗?
  • 我认为,MySql 本身可以通过这种方式有效地组织数据。我没有看到任何其他原因。
猜你喜欢
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
相关资源
最近更新 更多