【问题标题】:Database Relationship Direct vs Indirect Reference of Foreign keys外键的数据库关系直接与间接引用
【发布时间】:2019-07-13 04:55:54
【问题描述】:

我在 MySql 数据库中有 3 个表,名为 Users、Deals 和 Sales。现在 Users 表和 Deals 表是一对多的关系,而 Deals 表和 Sales 表是一对多的关系。

现在我没有在用户和销售之间设置任何直接的一对多关系(但它们已经通过外键 deal_id(Sales)-> user_id(Deals)->User 间接引用。所以如果我想搜索销售通过用户,我可以轻松地运行连接查询并通过 user_id 获取销售额。

我还可以通过将 user_id 外键放入 Sales 表中,在 User 和 Sale 之间创建直接的一对多关系。

现在从良好实践和/或性能的角度来看,哪种方法更好?

【问题讨论】:

  • 所以每笔交易都包含多个销售,并且所有这些销售(对于同一交易)属于同一个用户?
  • 是的,一笔交易只属于一个用户(正如我所说的,他们有一对多的关系)

标签: mysql sql foreign-keys


【解决方案1】:

这取决于实际的关系。如果sales 真的依赖于deals,那么您可以从那里查找用户。例如,如果sales 真的是deals 的子类型,这将是正确的。或者,如果用户因某种原因在deal 上发生更改,是否会自动更改为对应的sale

但是,如果sales 是一个独立实体并且与users 有关系,那么您需要将该列包含在`sales.如果销售由许多交易组成,则尤其如此,但我认为您的数据模型正好相反。

从您所说的来看,通过连接查找值听起来很合理。这会影响性能,但使用正确的索引,查询应该没问题。

【讨论】:

  • 你能解释一下你所说的“或者,如果用户因某种原因改变了交易”是什么意思
  • @Econ_newbie 。 . .如果您更新了用户的交易信息,这将如何影响销售?
  • 如果我更新用户中的任何列,用户的主键仍然是相同的。因此,由于外键引用仍然完好无损,因此没有任何变化。但是如果我删除用户,所有的孩子我。 e.交易和销售也会被删除
  • 此外,我不会更改交易表中的用户,因为特定交易将始终属于同一用户。但是假设我更改了一个交易并将另一个用户放入其中,该交易是 s
  • 。但是假设我更改了一个交易并将另一个用户放入其中,交易 id 仍然是相同的,它被引用为销售表的外键。所以在这种情况下,这笔交易的销售额仍然与更改的用户相关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
相关资源
最近更新 更多