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

时间:2013-05-14 06:15:10

标签: math relational-database

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

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

2 个答案:

答案 0 :(得分:4)

嗯,有C.J.Date的“数据库系统简介”和H. Darwen的“关系数据库理论简介”。两本都是优秀的书籍,我强烈建议你们阅读它们。

现在回答实际问题。在数学中,如果你有 n 设置A1,A2,...,An,你可以形成他们的笛卡儿积 A1 x A2 x ... x An,这是一组所有可能的n元组(a1,a2,...,an),其中ai是来自Ai的元素。根据定义,n-ary 关系 R是n个集合的笛卡尔积的子集

函数是二元关系 - 它们是Dom x Cod的子集。但是有更高的关系。例如,如果我们设置人类x人类x人类,我们可以通过取所有元组(x,y,z)来定义,例如,关系R,其中x和y是z的父母。

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

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

因此,每个具有关系的操作都有一个与谓词相对应的操作,所以当我们处理关系,连接和投影并过滤它们时,我们最终得到一个新的关系 - 我们知道谓词的真实集是什么:我们只是获取相应的谓词,和它们,并与存在量词结合,我们得到一个新的谓词,我们知道它的真实性。

编辑:现在,我必须注意,因为关系是一个集合,所以它的元组不是有序的。因此,表只是关系的模型:您可以使用表示相同关系的不同表。此外,在关系理论中习惯于使用更一般定义的元组和笛卡尔积。我将元组定义为(a1,a2,...,an) - 基本上是从{1,2,...,n}到A1 U A2 U ... U An的函数(其中我的图像必须是在艾)。在关系理论中,我们将一个元组作为一个函数从{name,name',...,name}到A1 U A2 U ... U An - 所以,它变成了一个记录,一个带有命名组件的元组。当然,这意味着记录的组件没有排序:(x:1,y:2),从{“x”,“y”}到N的函数,它将x映射到1,y映射到2,是相同的元组/记录为(y:2,x:1)。

所以,如果你拿一个表,交换行,交换列(用它们的标题!),你最终得到一个新表,它代表了相同的关系。

答案 1 :(得分:0)

This Wikipedia page详细介绍了模型背后的基本原理。从概念上讲,关键只是访问给定元组的一种方法,而不是元组本身的一部分 - 另见Codd's 12 rules,#2。