2017-09-25 32 views
0

下面显示了两个表,其中一个具有员工详细信息并具有其地址。如果两个表都具有“一对一”关系(即一个员工只有一个地址,反之亦然),那么为什么不将这两个表合并成一个表,如下所示。具有1对1关系的多个表的用途

  • 两个表1对1的关系

enter image description here

  • 两个表组合成一个。

enter image description here

回答

0

有两种类型的数据库分析方法。 第一种形式是在使用表格,雇员和地址应该合并的情况下简化模式。 另一种方法称为第三种形式,它使表尽可能独立。在表格员工和地址的情况下,应该将其分开。没有正确或错误的方法,这是一个选择。 但是,如果数据库包含许多表格,则简化并获得第一个表格更明智,但没有义务。

+0

你可以自己决定。如果数据属于一个人,并且一个人总是只有一个地址,并且地址始终只属于一个人,则可以将数据加入一个表中,但是失去了灵活性。 如果一个地址属于两个empoyees呢?如果... 我使用两个名词(人物和地址)的事实已经表明最好让他们分开。 – Calaris

+0

如果一个地址属于两名员工,那么在起始规则的设计和定义中就会出现问题,因为这种关系不是“一对一”而是“多对一”。现在我们也可以在表格中添加一个列地址。没有任何东西可以阻止它在两个不同人员出现两次地址的情况下存在冗余数据的风险。 因为这个原因,我说我们必须把它留给怀孕的人来决定什么对每个病例​​最好。 – F0XS

+0

@FoxCy但是,如果两个员工拥有相同的地址,除非他们共用同一个房间,或者住在同一个房间内,这是非常不可能的。所以这种关系可以是“一对一”的关系是很自然的。所以在你说的这种情况下,只有个人选择有两张或一张桌子。但拥有多张桌子可以让事情更整洁,更有意义。是对的吗? –

0

如果你总是有1-1的关系,那么你有一个相互依赖的功能,所以你没有规范化的好处。

但是有可能是原因,要做到这一点:

  1. 更容易权限的差异管理。
  2. 便于管理空的表内的值
  3. 更快聚集
  4. 避免不必要的频繁更新运行重型触发器

在另一方面聚集穿过连接变得更加昂贵。

0

规范化是一个质量决策,而反规范化是一个性能决策。


如果你将加入两个表,并将它们存储为一体,你的阅读也因为你不必去通过查询来连接这两个表的结合后的数据进行工作的写入速度会更快。但是,如果您将表格分开,那么查看各个表格的数据可能对您更有意义,并且还可以自由修改一个表格的数据而不触及其他表格的数据。但是,要以1对1关系处理两个表中的连接数据,将会迫使您每次都写入(可能不必要的)连接查询。


这个决定是你最终做出的。国际海事组织,除非分隔表的表现低于接受程度,否则以更清晰的方式存储数据可能是一个更好的主意。