4

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

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

4

4 回答 4

9

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

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

SELECT author FROM Books;

可能会返回重复的行,但显然相似的关系查询:

π author (Books)

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

SELECT DISTINCT author FROM Books;

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

于 2012-10-10T09:19:09.523 回答
6

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

如果某物(例如 SQL 中的“表”)确实包含“两次相同的元组”,那么该物不是关系,并且该语言不是关系语言。充其量,当(且仅当)语言使用者对自己施加必要的自律时,语言可以以关系方式使用。

简介:关系 DBMS 确实不允许重复,并且典型的 SQL 引擎正是因为这个原因而不是关系 DBMS (ao)

于 2012-10-10T17:02:12.003 回答
1

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

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

于 2012-10-10T05:44:01.817 回答
-1

RDBMS 可能有重复,特别是如果它们没有很好地设置。设置 RDBMS 需要您了解规范化是什么。如果您有重复,这意味着您的表可能不是第一规范化形式。1st Normalization Form 中表格的定义是消除或消除重复值,因此如果您有重复/重复值,则需要首先通过消除重复值将您的表带入 1st Normalization Form 标准,然后再达到其 2nd规范化表格等。

于 2012-10-11T01:17:18.717 回答