2016-01-29 73 views
1

this introductory tutorial对JDBC和关系数据库,它是说,为什么在关系数据库中不允许重复行?

完整性规则

关系表中遵循一定的完整性规则,以确保它们包含 数据留准确,始终可以访问。首先,关系表中的 行应该都是不同的。 如果有 重复的行,可能会出现问题,解决两个可能的 选择中的哪一个是正确的。

但是,如果行重复,则意味着两个行中的所有字段都保持相同的值;当它们完全相同(重复)时,一个问题是正确的而另一个问题是不正确的? 行重复如何损害数据完整性?

+3

当你必须改变行的值之一,哪一行更改?为什么你的表中有重复的行?重复代表什么? –

+1

在学习数据库(比如电子商务商店)中,迂回复制是一个糟糕的主意,但在数据仓库中可以使用关系数据库。 –

回答

1

主要的原因可能是:空间维护重复记录这没有任何意义

  1. 浪费。
  2. 当您在应用程序中选择数据时,不必要的内存空间(主内存)浪费。
  3. 规范化约束:如果你的表有重复的记录,那么它根本就不是一个规范化的表。
  4. 如果单个人存在2条记录,那么它确实令人困惑,因为可能有另外一个客户具有相同的姓名,地址等。例如:银行客户。

因此,如果您没有定义明确识别人的方法,那么您如何说账户X属于哪个人。

1

这是一种哲学问题。但我认为你可能会投入太多。我会说这个问题真的是“数据库如何知道哪一行是正确的”。在我设置的第一个系统之一中,我弄乱了密钥并设法在表中获得重复的行。然后问题是如何告诉数据库哪些行摆脱(20年前,使用postgres 5.x我认为)。它本身并不损害数据的完整性,但它会损害“准确且始终可用”,因为无法仅提取所需的一行。

一个例子:如果有人让一个人表所示

create table person(
    name varchar not null, 
    dateofbirth date not null, 
    town varchar not null); 

很明显,你会得到重复记录迟早的事。我知道生活在奥斯陆的第一个约翰史密斯31.08.67是我的老同学,而住在奥斯陆的第二个约翰史密斯31.08.67是我一周前第一次见到的同事。但我无法在数据库中彼此告知他们,我无法单独处理它们。所以,如果我后来做

alter table person add connection; 

然后我不会有任何可能性将正确的数据放入数据库系统。

1

数据完整性,人们不得不问的问题是为什么两个相同的记录被允许在一个表中,为了什么目的。

你怎么知道你在谈论哪个记录?例如,让我们以相同的双胞胎为例,他们可能以各种方式匹配,但他们的名字,这样我们可以确定我们正在与谁谈话。

行的重复会破坏数据完整性,因为它违反了由RDBMS设置的创建规则。

如果发生重复,您将无法关联特定的一组数据,这是RDBMS的陈述目标,如您的问题所述。

从技术上讲,您可以使用相同数据的多行,但需要注意的是,您必须包含一个区分行的主键。

希望这是有道理的,并帮助

相关问题