2010-01-11 80 views
2

我正在使用以下设计的数据库。我认为在数据库设计中封闭循环并不是一个好习惯,而且我有不止一个。但我不记得为什么。所以不知道这可能会如何影响我。任何例子这可能是危险的?sql闭环关系;会出现什么问题?

schematic of part of our database

编辑:通过我的电子书去了,发现我正在读为开始数据库设计从入门到精通,出版商:A按。
他们只是警告这一点,但给出一个模糊的原因。不,我们没有使用触发器。任何人有更清楚的解释?
感谢 摘录,第109页:

一个小公司的员工谁了许多不同的 小项目组的每一个工作 。每 所有员工都装在一个 特别是房间较大的房间 住房若干组groups.We可能需要 信息,如每个 员工所在,特定 员工的电话号码,在哪里可以找到 特定组,其中员工 在每个组中工作,谁在每个 房间中,等等。一个可能的数据 模型如图5-7所示。以 时刻为例,了解数据模型 及其包含的信息约 房间中的组数,因此 针对此特定问题。 模型有冗余信息。你可以看到 是什么?

example figure

对于例5-3,如果我们 经常要找出雇员 电话号码,我们可能会认为,在图5-7 员工之间的 顶部关系和房间将是一个有用的 直接路线。然而,通过Group的替代路线,这个相同的 信息很容易得到 。 我们可以找到该员工的(仅限一个) 组,然后找到该组的(仅限一个 )空间。这是一个非常简单的 检索(它并不涉及所有 复杂的日期,困扰 例5-2的小宿舍)。 但是,额外的关系不是 只是不必要的,这是危险的。 对于相同的 信息有两条路线,我们冒险得到两个不同的答案 ,除非数据是非常仔细维护的 。每当 员工更改组或 班次时,将会有两个 关系实例进行更新。 不小心更新 程序,我们可以最终不得不 吉姆是在A组,这是在12 室,而其他途径可能 已经吉姆直接与房有关的 15冗余信息,很容易出现矛盾和应该始终将 删除。

+0

你的图片无效。 – 2010-01-11 08:23:37

+0

看不到“以下设计”。你的意思是TableA有FK参考TableB有FK参考TableC有FK参考TableA? – 2010-01-11 08:48:24

+0

固定链接设计URL – devio 2010-01-11 13:22:51

回答

1

我在过去使用表之间的“闭环”引用(即至少3个关系循环中)没有问题。我能想到的唯一问题是如果你使用触发器,并且即使这样,如果你正在更新触发器中的“循环”中的其他表,那也只会是一个问题。

对于没有闭环的阅读建议,您有参考吗?

为了谁评论说,如果你的链接复制到一个新窗口中的图像可以看到其他人:http://imgur.com/ChFL1

+0

添加了相关摘录,不,我们没有使用触发器。 – Slabo 2010-01-12 04:21:37

+0

你书中给出的例子有点做作。在您的设计中我没有看到任何主要问题,但由于您在[Slab] - > [Plate]和[Plate]之间存在关键关系,因此可能会在[Slab],[Plate]和[ReportCoolingBed]表格之间保持数据一致的问题[平板] - > [ReportCoolingBed],然后在[Plate]和[ReportCoolingBed]之间建立1-1关系。 它可能有助于查看每个表中使用的主键/外键的属性。 – Tony 2010-01-12 10:47:54

3

并非所有的数据库都推迟因果关系确认启用,不是所有的数据库允许插入两条记录到两个不同的表中一个声明。

想象一下,你有一个FOREIGN KEYABBA

最初,两个表都是空的。

你打算如何插入第一条记录?

你不能插入任何东西到A,因为它必须引用B(它是空的)中的记录,并且以同样的方式,你不能在B中插入任何东西。

+0

在我的情况下,我有一个从A到B的1-n关系,然后是从B到C的1-n关系,然后是从A到C的1-n关系。在不同的情况下,我们也有循环。 – Slabo 2010-01-12 04:26:38

+0

'@ Slabo':你刚刚描述的情况不包含循环。 – Quassnoi 2010-01-12 10:17:46

0

我不会说“封闭循环不是好习惯”。但是,他们确实提请注意潜在的问题。因此,检查所有闭环以解决此问题的可能性是一个好习惯。

教科书示例对我来说似乎很清楚。有2种方式中的位置/员工的电话可以判定:

  • 员工 - >集团 - >室 - >手机
  • 或员工 - >室 - >手机

这就像存储需要保持同步的同一事物的两个变量。有可能出现问题,变量最终会出现不同的值 - 那么你必须问:“哪两个是正确的?”

因此,课本示例突出显示了您必须关注的问题。然而,这个问题真的归结为语义。即这些关系意味着什么。在教科书示例中,到Room的两条路径的含义完全相同。但是,如果Group -> Room仅仅是每个员工的“默认”,因为高级员工可以获得自己的空间,或者员工可以暂时被分配到在其他地方以外的其他地方工作,那么额外的关系就是合理的。

移动到你的设计,这是你应该做的:

  • 看封闭式团体
  • 评估
  • 检查你有没有刚创建的关系的语义/用途/含义两条路径完全相同信息

例如,您有:

  • TestSample - >线圈 - >板
  • TestSample - >板 - >板

原谅的可能荒谬地了解您术语。)这是否意味着您的测试样本可以同时在2个不同的平板上?或者这是否意味着您的测试样品将由可能(但不一定)来自不同板的板和线圈组成?

相关问题