在this introductory tutorial对JDBC和关系数据库,它是说,为什么在关系数据库中不允许重复行?
完整性规则
关系表中遵循一定的完整性规则,以确保它们包含 数据留准确,始终可以访问。首先,关系表中的 行应该都是不同的。 如果有 重复的行,可能会出现问题,解决两个可能的 选择中的哪一个是正确的。
但是,如果行重复,则意味着两个行中的所有字段都保持相同的值;当它们完全相同(重复)时,一个问题是正确的而另一个问题是不正确的? 行重复如何损害数据完整性?
在this introductory tutorial对JDBC和关系数据库,它是说,为什么在关系数据库中不允许重复行?
完整性规则
关系表中遵循一定的完整性规则,以确保它们包含 数据留准确,始终可以访问。首先,关系表中的 行应该都是不同的。 如果有 重复的行,可能会出现问题,解决两个可能的 选择中的哪一个是正确的。
但是,如果行重复,则意味着两个行中的所有字段都保持相同的值;当它们完全相同(重复)时,一个问题是正确的而另一个问题是不正确的? 行重复如何损害数据完整性?
主要的原因可能是:空间维护重复记录这没有任何意义
因此,如果您没有定义明确识别人的方法,那么您如何说账户X属于哪个人。
这是一种哲学问题。但我认为你可能会投入太多。我会说这个问题真的是“数据库如何知道哪一行是正确的”。在我设置的第一个系统之一中,我弄乱了密钥并设法在表中获得重复的行。然后问题是如何告诉数据库哪些行摆脱(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;
然后我不会有任何可能性将正确的数据放入数据库系统。
数据完整性,人们不得不问的问题是为什么两个相同的记录被允许在一个表中,为了什么目的。
你怎么知道你在谈论哪个记录?例如,让我们以相同的双胞胎为例,他们可能以各种方式匹配,但他们的名字,这样我们可以确定我们正在与谁谈话。
行的重复会破坏数据完整性,因为它违反了由RDBMS设置的创建规则。
如果发生重复,您将无法关联特定的一组数据,这是RDBMS的陈述目标,如您的问题所述。
从技术上讲,您可以使用相同数据的多行,但需要注意的是,您必须包含一个区分行的主键。
希望这是有道理的,并帮助
当你必须改变行的值之一,哪一行更改?为什么你的表中有重复的行?重复代表什么? –
在学习数据库(比如电子商务商店)中,迂回复制是一个糟糕的主意,但在数据仓库中可以使用关系数据库。 –