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

Why are duplicate rows not allowed in a relational database?

this introductory tutorial 关于 JDBC 和关系数据库中,指出,

Integrity Rules

Relational tables follow certain integrity rules to ensure that the data they contain stay accurate and are always accessible. First, the rows in a relational table should all be distinct. If there are duplicate rows, there can be problems resolving which of two possible selections is the correct one.

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

主要原因可能是:

  1. space 的浪费用于维护没有意义的重复记录。
  2. 当您在应用程序中 select 数据时,不必要地浪费内存 space(主内存)。
  3. 规范化约束:如果您的 table 有重复记录,那么它根本就不是规范化的 table。
  4. 如果一个人有 2 条记录,那真的很混乱,因为可能还有一个客户具有相同的姓名、地址等。示例:银行客户。

所以如果你不定义一个方法来明确识别这个人那么你怎么说这个账户X属于哪个人。

这是一个哲学问题。但我认为你可能投入了太多。我会说问题真的是"How does the data base know which row is the correct to fetch"。在我设置的第一个系统中,我弄乱了键并设法在 table 中获得了重复的行。然后问题是如何告诉数据库要删除哪些行(20 年前,我认为使用 postgres 5.x)。它本身不会损害数据完整性,但会损害 "accurate and always accessible",因为不可能只获取您需要的一行。

举个例子:如果有人让一个人table喜欢

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

很明显你迟早会得到重复的记录。我知道第一个 John Smith 出生于 31.08.67,住在奥斯陆,是我的老 class 伙伴,而第二个 John Smith,出生于 31.08.67,住在奥斯陆,是我一周前第一次见到的同事。但我无法在数据库中将它们彼此区分,也无法单独处理它们。所以如果我以后做一个

alter table person add connection;

那么我就没有任何可能将正确的数据放入数据库系统。

数据完整性,人们不得不问的问题是为什么在 table 中允许两个相同的记录,这有什么用。

你怎么知道你说的是哪张唱片?以同卵双胞胎为例,除了名字之外,他们可能各方面都匹配,这样我们就可以识别我们正在和谁说话。

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

如果发生重复,您将无法关联到一组特定的数据,即您的问题 post.

中所述的 RDBMS objective

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

希望这有意义并有所帮助