外键的数据库关系直接与间接引用

时间:2019-02-19 16:06:37

标签: mysql sql foreign-keys

我在MySql DB中有3个表,分别名为Users,Deals和Sales。现在,“用户”表与“交易”表具有一对多的关系,“交易”表与“销售”表具有一对多的关系。

现在我没有在用户和销售之间建立任何直接的一对多关系(但是它们已经通过外键Deal_id(Sales)-> user_id(Deals)-> User间接引用了。所以如果我要搜索销售通过用户,我可以轻松地运行联接查询并通过user_id获得销售。

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

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

1 个答案:

答案 0 :(得分:0)

这取决于实际的关系。如果sales确实取决于deals,那么您可以从那里查找用户。例如,如果sales确实是deals的子类型,那就是正确的。或者,如果用户由于某些原因在deal上进行了更改,那么它会自动为相应的sale进行更改吗?

但是,如果sales是一个独立实体,并且与users有关系,那么您将希望在“销售”中包含该列。如果销售中包含许多交易,则尤其如此,但我认为您的数据模型则相反。

按照您所说的,通过联接查找值听起来很合理。这会影响性能,但是如果索引正确,查询应该可以。