为什么关系数据库中不允许重复行?

时间:2016-01-29 21:19:27

标签: database jdbc rdbms

在JDBC和关系数据库的this introductory tutorial中,声明了

  

诚信规则

     

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

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

3 个答案:

答案 0 :(得分:2)

这是一个哲学问题。但我认为你可能会过多地投入其中。我会说问题实际上是“数据库如何知道哪一行是正确的获取”。在我设置的第一个系统中,我弄乱了键并设法在表中获得重复的行。然后问题是如何告诉db哪些行摆脱(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 :(得分:1)

主要原因可能是:

  1. 浪费空间来维护没有意义的重复记录。
  2. 在应用程序中选择数据时,不必要的浪费内存空间(主内存)。
  3. 规范化约束:如果您的表有重复记录,那么它根本就不是规范化表。
  4. 如果一个人存在2条记录,那么它真的令人困惑,因为可能会有另外一个客户具有相同的名称,地址等。示例:银行客户。
  5. 因此,如果您没有定义明确识别此人的方法,那么您将如何说帐户X属于哪个人。

答案 2 :(得分:1)

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

你怎么知道你在说什么唱片?让我们以同卵双胞胎为例,他们可能会以各种方式匹配他们的名字,这样我们就可以确定我们正在与谁交谈。

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

如果发生重复,您将无法与特定数据集相关联,这是您在问题帖子中所述的RDBMS的既定目标。

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

希望这有意义并且有所帮助