在JDBC和关系数据库的this introductory tutorial中,声明了
诚信规则
关系表遵循某些完整性规则以确保 它们包含的数据保持准确并始终可访问。首先, 关系表中的行应该都是不同的。 如果有的话 重复行,可能有问题解决两个可能的问题 选择是正确的。
但是如果行是重复的,则意味着两行中的所有字段都具有相同的值;当它们完全相同(重复)时,一个是正确而另一个是不正确的问题是如何产生的? 行的重复如何损害数据完整性?
答案 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)
主要原因可能是:
因此,如果您没有定义明确识别此人的方法,那么您将如何说帐户X属于哪个人。
答案 2 :(得分:1)
数据完整性,人们不得不问的问题是,为什么在表格中允许两个相同的记录,为此目的服务。
你怎么知道你在说什么唱片?让我们以同卵双胞胎为例,他们可能会以各种方式匹配他们的名字,这样我们就可以确定我们正在与谁交谈。
重复行会破坏数据完整性,因为它会破坏RDBMS设置的创建规则。
如果发生重复,您将无法与特定数据集相关联,这是您在问题帖子中所述的RDBMS的既定目标。
从技术上讲,你可以拥有多个具有相同数据的行,但需要注意的是,必须包含一个区分行的主键。
希望这有意义并且有所帮助