SQL结果何时可以包含重复项



我刚刚学习关系数据库,被告知它们不允许重复条目。起初我并不相信这一点,因为我编写的SQL查询返回的结果是重复的。这是因为系统不存储在一个关系中相同的集合,对吧?我的意思是,如果你有书籍和作者的关系,并且只选择作者,那么如果同一作者写了不同的书(例如select author from Books),那么可能会出现重复。同样,如果你使用join,那么你可能会得到重复的结果,对吧?还有其他情况吗?

基本上,当人们说rmdbs没有重复时,他们只是指信息存储(在一个表中)的方式,对吧?

关系数据库只由关系变量(关系"表")组成,根据定义,关系变量总是由唯一的元组("行")组成。关系数据库管理系统使用基于Codd关系代数的查询语言,该语言同样不能在结果中生成重复,因为关系代数中的每个结果也是一个关系,因此由唯一的元组组成。

您的困惑是因为您假设SQL是一种适当的关系语言,而SQL DBMS是关系语言。事实并非如此,他们也并非如此。当您开始将SQL与其在关系世界中的近似等价物进行比较时,事情会变得棘手。您的SQL查询:

SELECT author FROM Books;

可能返回重复的行,但明显类似的关系查询:

π author (Books)

不会。关系查询更像下面的SQL:

SELECT DISTINCT author FROM Books;

在SQL中,您必须非常小心,以避免在您不希望或不期望的地方出现重复。即使是经验丰富的SQL用户也会遇到这个问题。

关系是元组的集合。因为它们是集合,所以关系不能两次包含同一元组。

如果某个事物(例如SQL中的"表")确实包含"两次相同的元组",那么该事物就不是关系,该语言也不是关系语言。在最好的情况下,如果(并且只有当)语言使用者对自己施加必要的自律,语言才能以关系的方式使用。

简介:关系型DBMS确实不允许重复,典型的SQL引擎也不是关系型DBMS,正是因为这个原因(a.o.)

您可以很好地在表中放置重复项,除非表中有明确禁止的约束。

通常,一个表有一个主键,主键是一种约束,它不允许作为键一部分的字段重复,这样可以防止表有重复的记录。

RDBMS可能会有重复项,尤其是在设置不好的情况下。设置RDBMS需要你了解什么是规范化。如果你有重复的表,这意味着你的表可能不在第一规范化表单中。第一规范化表格中表的定义是消除或消除重复值,所以如果你有反复/重复的值,您需要先消除重复值,然后将表转换为第二个标准化表单,依此类推

最新更新