是否有可能完全摆脱所谓的“虚假元组”?

时间:2015-11-18 22:22:17

标签: database-design relational-database normalization database-normalization

是否有可能完全摆脱所谓的“虚假元组”?

例如:在this example中,我没有看到基表的任何问题。

但是,加入后它仍然会产生虚假的元组。

2 个答案:

答案 0 :(得分:1)

在关系模式的分解中,“虚假元组”只是信息丢失的假设症状。这意味着在给定关系中表示的某些依赖性将由于将该关系分成两个或更多个组件而丢失。这是否是您需要解决的问题取决于失去的依赖对您的重要程度。

在您所参考的示例中,EmpRoleProj表告诉我们每个员工正在处理哪些项目。在Table1中,Table2设计了信息丢失 - 我们不能再说琼斯只在亚马逊项目上工作而不在尼罗河项目上工作。

作为数据库设计人员,您需要考虑丢失了哪些信息或完整性,然后决定要采取的操作:更改设计,添加额外的完整性约束或确定新的分解实际上是对之前的改进。

答案 1 :(得分:0)

如果关系R等于R1 JOIN R2 JOIN ...那么我们可以使用R1 JOIN R2 JOIN ...而不是R.显然。但是R1,R2,......将是R的投影。而如果我们采用R的投影R1',R2',......,其中R 等于R1'JOIN R2'JOIN ..那么我们不能使用R1'JININ R2'JOIN ...而不是使用R.显然。但R1'JININ R2'JOIN ......将类似于R 加上其他一些元组。与R和R1 JOIN R2 JOIN ...的值相比,它们是“虚假元组”。但他们属于在R1'JOIN R2'JOIN ......中。 那不是R 。要“摆脱虚假的元组”只是不要使用R1'JININ R2'JOIN ... for R 。但是,为什么你呢?只有当你认为任何旧的R RIN投影回到R.但是他们没有。但是,为什么他们?

所以你的问题很奇怪。我们想要替换那些由其他人加入的表。我们想要替换那些其他人的联接的表。所以我们总是“摆脱虚假的元组”没有那样做

规范化是关于替换其他人加入的表。当R = R1 JOIN R2 JOIN ...我们说在JD中存在一个JD(连接依赖)。与接收到的智慧相反,如果我们正在寻找并且我们知道我们知道什么,那么非常容易看到JD表的意思是。当R保持元组“ ... A1a ... A1b ... AND ... A2a ... A2b ... AND ...”时,是R1,R2,...在各自的属性集{A1a,A1b,...},{A2a,A2b,...},......上的连接,具有各自的含义“ ... A1a。 ..A1b ...... “,” ... A2a ...... A2b ... “,......我们自然设计的开始中大部分时间使用R1,R2,... 。收到的智慧也是不伴随FD(功能依赖性)的JD很少见。它们是,但仅仅因为大多数JD非常明显,我们的初始设计会避免它们。它们“很难找到”只是因为它们很容易找到。 (不分解每个不会导致问题的JD会有点复杂。)