我在MySql DB中有3个表,分别名为Users,Deals和Sales。现在,“用户”表与“交易”表具有一对多的关系,“交易”表与“销售”表具有一对多的关系。
现在我没有在用户和销售之间建立任何直接的一对多关系(但是它们已经通过外键Deal_id(Sales)-> user_id(Deals)-> User间接引用了。所以如果我要搜索销售通过用户,我可以轻松地运行联接查询并通过user_id获得销售。
我还可以通过将user_id外键放在Sales表中来在User和Sale之间建立直接的一对多关系。
从良好实践和/或性能的角度来看,哪种方法更好?
答案 0 :(得分:0)
这取决于实际的关系。如果sales
确实取决于deals
,那么您可以从那里查找用户。例如,如果sales
确实是deals
的子类型,那就是正确的。或者,如果用户由于某些原因在deal
上进行了更改,那么它会自动为相应的sale
进行更改吗?
但是,如果sales
是一个独立实体,并且与users
有关系,那么您将希望在“销售”中包含该列。如果销售中包含许多交易,则尤其如此,但我认为您的数据模型则相反。
按照您所说的,通过联接查找值听起来很合理。这会影响性能,但是如果索引正确,查询应该可以。