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

Database 为什么关系数据库中不允许重复行?,database,jdbc,rdbms,Database,Jdbc,Rdbms,在关于JDBC和关系数据库的文章中 诚信规则 关系表遵循某些完整性规则,以确保 它们包含的数据保持准确,并且始终可以访问。首先是 关系表中的行都应该是不同的。如果有 如果行重复,则可能会出现以下问题:解决两种可能的问题中的哪一种 选择是正确的 但如果行是重复的,则意味着两行中的所有字段都具有相同的值;当它们完全相同时,如何产生一个是正确的,另一个是错误的问题?行的重复是如何损害数据完整性的?主要原因可能是: 浪费空间来维护重复记录,这毫无意义。 在应用程序中选择数据时不必要地浪费内存空间。 规范

在关于JDBC和关系数据库的文章中

诚信规则

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


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

主要原因可能是:

浪费空间来维护重复记录,这毫无意义。 在应用程序中选择数据时不必要地浪费内存空间。 规范化约束:如果您的表有重复的记录,那么它根本不是一个规范化的表。 如果一个人有两个记录,那么这真的很混乱,因为可能还有一个客户具有相同的姓名、地址等。例如:银行客户。
因此,如果你没有定义一种方法来清楚地识别这个人,那么你将如何说帐户X属于哪个人。

这是一个哲学问题。但我觉得你可能投入太多了。我想说的是,问题实际上是数据库如何知道哪一行是要获取的正确行。在我设置的第一个系统中,我弄乱了键,并设法在表中获得重复的行。然后,问题是如何告诉db 20年前应该删除哪些行,我想应该使用postgres 5.x。它本身不会损害数据的完整性,但会损害数据的准确性和可访问性,因为不可能只获取所需的一行

举个例子:如果有人把一个人做成这样的桌子

create table person(
   name varchar not null,
   dateofbirth date not null,
   town varchar not null);
很明显,你迟早会得到重复的记录。我知道,第一个出生于1967年8月31日住在奥斯陆的约翰·史密斯是我的老同学,而第二个出生于1967年8月31日住在奥斯陆的约翰·史密斯是我一周前第一次见到的同事。但我无法在数据库中区分它们,也无法单独处理它们。所以如果我以后做一个

alter table person add connection;

那么我就不可能将正确的数据放入数据库系统

数据完整性,我们必须问的问题是,为什么一个表中允许有两个相同的记录,这有什么用途

你怎么知道你谈论的是哪张唱片?让我们以同卵双胞胎为例,他们可能在各个方面都匹配,但他们的名字不同,这样我们就可以识别与我们交谈的人

行的重复破坏了数据完整性,因为它破坏了RDBMS建立的基础规则

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

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


希望这是有意义的,并且在您必须更改行的某个值时有帮助,哪一行会更改?为什么表中有重复的行?复制代表什么?迂腐地说,复制在像电子商务商店这样的运营数据库中是一个坏主意,但在数据仓库中是好主意,两者都可以使用关系数据库。