我知道发帖太晚了,但我使用该网站作为我自己的参考,所以我想在这里给出一个答案,以供自己将来参考。我希望你(和其他人)觉得它有帮助。
让我们假设是一群超级爱因斯坦专家设计了我们的数据库。我们超完美的数据库有3张表,它们之间定义了如下关系:
TblA 1:M TblB
TblB 1:M TblC
Notice there is no relationship between TblA and TblC
在大多数情况下,这样一个简单的数据库很容易导航,但在商业数据库中,通常不可能在设计阶段说出数据、表甚至整个数据库的所有可能用途和用途组合,尤其是随着系统的建立和其他系统的集成或切换或退出。这个简单的事实催生了一个建立在称为商业智能的数据库之上的整个行业。但我离题了...
在上面的例子中,结构很容易理解,很容易看出你可以从 TblA 连接到 B,再到 C,反之亦然,以获得你需要的东西。它也非常模糊地突出了这样做的一些问题。现在将这个简单的链扩展到 10 或 20 或 50 条关系。现在突然之间,您开始设想对您的场景的需求。简单来说,就是从 A 到 C 的连接,反之亦然,或者从 A 到 F,或者从 B 到 Z,或者随着我们系统的增长。
确实有很多方法可以做到这一点。上面提到的一个是最受欢迎的,即通过所有链接。主要问题是它非常慢。您添加到链中的表越多,这些表增长得越多,并且您想要通过它越远,就会变得越来越慢。
解决方案 1:寻找通用链接。如果你教过加入 A 到 C 的理由,它一定在那里。如果不明显,建立一种关系,然后加入它。即,要加入 A 到 B 到 C 必须有一些共性,否则你的加入将产生零结果或大量结果(笛卡尔积)。如果您知道这种共性,只需将所需的列添加到 A 和 C 并直接链接它们。
关系的规则是它们必须有存在的理由。而已。如果你能找到从 A 链接到 C 的充分理由,那就去做吧。但你必须确保你的理由不是多余的(即它已经以其他方式处理)。
现在警告一句。有一些陷阱。但是我没有很好地解释它们,所以我会推荐你my source而不是在这里谈论它。但请记住,这涉及到一些沉重的东西,所以这个关于粉丝和鸿沟陷阱的视频实际上只是一个起点。您可以在没有关系的情况下加入。但我建议先看这个视频,因为这超出了大多数人在大学里学习的内容,并且深入到了 BI 和 SAP 人员的领域。这些人,虽然他们可以编程,但他们的日常工作就是专门研究这种事情。如何让海量数据相互交流并有意义。
这个视频是我在这个主题上看到的更好的视频之一。他的其他一些视频值得一看。我从他身上学到了很多。