表格如何像数学关系一样?

Ed *_*ine 0 math relational-database

我最近一直在复习 Codd 的关系代数和关系数据库。我记得关系是一组有序元组,函数是满足域中每个点必须映射到共域中单个点的附加属性的关系。从这个意义上说,每个表都定义了一个从主键到由所有其他列定义的余域空间的有限点函数。这是关系的意义吗?如果是这样,为什么关系代数不是函数代数,为什么不称其为函数数据库呢?

谢谢。顺便说一句,抱歉,如果这不是 stackoverflow 的正常形式(哈,一个数据库笑话!),但我查看了所有论坛,这似乎是最好的。

Jok*_*_vD 6

嗯,有 CJ Date 的《数据库系统简介》和 H. Darwen 的《关系数据库理论简介》。这两本都是很棒的书,我强烈推荐阅读它们。

\n\n

现在到实际问题。在数学中,如果有n 个集合 A1, A2, ..., An,您可以形成它们的笛卡尔积A1 x A2 x ... x An,它是所有可能的 n 元组 (a1, a2, ... .., an),其中 ai 是 Ai 中的一个元素。根据定义,n 元关系R 是n 个集合的笛卡尔积的子集。

\n\n

函数是二元关系 \xe2\x80\x94 它们是 Dom x Cod 的子集。但存在更高数量的关系。例如,如果我们采用集合 Humans x Humans x Humans,我们可以通过采用所有元组 (x, y, z) 来定义关系 R,其中 x 和 y 是 z 的父项。

\n\n

现在逻辑中有一个重要的概念:谓词。谓词是从笛卡尔集合 A1 x A2 x ... x An 到语句集的映射。让我们看一下谓词 P(x,y,z) =“x 和 y 是 z 的父母”。对于 Humans x Humans x Humans 中的每个元组 (x,y,z),我们从中获得一个陈述,无论是真还是假。给我们真实陈述的所有元组的集合,即谓词的真值集,是......一个关系!

\n\n

请注意,拥有一个真值集就是我们使用谓词实际需要的全部。因此,当我们对企业进行建模时,我们发明了一堆描述它的谓词,并将它们的真值集存储在关系数据库中。

\n\n

因此,每个关系操作都有一个对应的谓词操作,所以当我们对关系进行连接、投影和过滤时,我们最终得到一个新的关系 \xe2\x80\x94 并且我们知道哪个谓词是它的真相集合是:我们只需采用相应的谓词,并对它们进行与运算,并与存在量词绑定,我们就得到一个新的谓词,我们知道其真值集。

\n\n

编辑:现在,我必须注意,由于关系是一个集合,因此它的元组没有排序。因此,表只是关系的模型:您可以使用代表相同关系的不同表。此外,关系理论通常使用更一般定义的元组和笛卡尔积。我将元组定义为 (a1, a2, ..., an) \xe2\x80\x94 基本上是一个从 {1,2,...,n} 到 A1 U A2 U ... U An (其中 i 的图像必须在 Ai 中)。在关系理论中,我们把一个元组看成是一个从 { name, name\', ..., name } 到 A1 U A2 U ... U An \xe2\x80\x94 的函数,这样,它就变成了一条记录一个具有命名组件的元组。当然,这意味着记录的组件没有排序:(x: 1, y: 2),一个从 { "x", "y" } 到 N 的函数,它将 x 映射到 1,y 映射到 2,与 (y:2, x: 1) 是相同的元组/记录。

\n\n

因此,如果您使用一个表,交换行、交换列(及其标题!),您最终会得到一个新表,它表示相同的关系。

\n