我正在使用一个具有以下设计的数据库。我读到在数据库设计中使用闭路并不是一个好的实践,而且我有不止一个。但我不记得为什么。所以不确定这会对我有什么影响。这有什么危险的吗?

编辑:翻阅我的电子书,发现我正在读的是入门数据库设计,从新手到专业,publisher: APRESS。
他们只是警告不要这样做,但给出了一个模糊的理由。不,我们不使用触发器。有谁有更清楚的解释吗?
谢谢摘录,第109页:
是一家小公司的员工,他们分别为多个不同的小项目组之一工作。每个组及其所有员工都被安置在一个特定的房间中,其中包含多个groups.We可能需要的信息,例如每个员工所在的位置、特定员工的电话号码、查找特定组的位置、在每个组中工作的员工、在每个房间中的员工等等。一个可能的数据模型如图5-7所示。花点时间来了解数据模型及其包含的有关房间中组数的信息,等等。该模型具有冗余信息。你能看到是什么吗?

关于示例5-3,如果我们经常想要查找员工的电话号码,我们可能会认为图5-7中的Employee和Room之间的顶级关系将是一条有用的直接途径。但是,通过组的另一条路由可以很容易地获得相同的信息。我们可以找到员工的(只有一个)组,然后找到那个组(只有一个)的空间。这是一个非常简单的检索(在例5-2中,它不涉及困扰小旅舍的所有复杂的日期)。然而,这种额外的关系不仅是不必要的,而且是危险的。对于相同的信息,我们有两条路径,除非数据得到非常仔细的维护,否则我们就有可能得到两个不同的答案。每当员工更改组或组转移房间时,将有两个关系实例要更新。如果没有非常仔细的更新过程,我们最终可能会发现Jim是A组的,该组位于第12房间,而另一条路线可能直接将Jim与15号房间相关联。冗余信息很容易出现不一致的情况,应该始终删除。
发布于 2010-01-11 13:12:32
过去,在表组之间使用“闭环”引用(即关系循环中至少有3次)没有问题。我能想到的唯一问题是如果使用触发器,即使这样,也只有在更新触发器中的“循环”中的其他表时才会出现问题。
你有参考的地方,你读到这个建议,因为没有闭环?
如果您将链接复制到一个新窗口:http://imgur.com/ChFL1,则可以看到其他评论该图像的人。
发布于 2010-01-11 13:24:55
并非所有数据库都启用了延迟关系检查,而且并非所有数据库都允许在一条语句中将两个记录插入两个不同的表中。
假设您有一个FOREIGN KEY,从A到B,从B到A。
最初,两个表都是空的。
你要怎么插入第一张唱片?
您不能向A插入任何内容,因为它必须引用B中的一个记录(它是空的),同样,您也不能将任何东西插入到B中。
发布于 2010-01-22 19:44:07
我不会说“有封闭循环是不好的做法”。然而,它们确实引起了人们对一个潜在问题的关注。因此,检查所有闭路是否存在这个问题都是一个好习惯。
课本的例子在我看来是很清楚的。有两种方法可以确定雇员的位置/电话:
这就像为同一件需要保持同步的事物存储两个变量一样。有可能出了问题,变量最终得到了不同的值--然后你不得不问:“这两种方法中哪一种是正确的?”
因此,教科书示例突出了您必须关注我们的问题。然而,这个问题实际上归结为语义学。也就是说,这些关系意味着什么。在教科书示例中,两条通往Room的路径的含义完全相同。然而,如果Group -> Room仅仅是每位员工的“默认”,因为高级员工可以拥有自己的房间,或者员工可以临时被分配到小组以外的其他地方工作,那么这种额外的关系是合理的。
进入您的设计,这是您应该做的:
查找封闭的groups
的两条路径
例如,您有:
Slab
(原谅你对术语的理解可能是荒谬的。)这是否意味着您的测试样本可以同时放在两个不同的板子上?或者,这是否意味着您的测试样本将由一个板和一个线圈组成,这些线圈可能来自不同的板子(但不一定)?
https://stackoverflow.com/questions/2040604
复制相似问题