正好看到一篇很棒的文章:Introduction to the Relational Algebra
对于数据库没有什么经验,前几天好奇关系数据库去查了两天资料,看了点书,下面是我自己的理解,希望对你有帮助:
1。
想象你要设计一个数据库。
当然,数据库是用来储存数据的。
如果数据是放在一个个表格里面的。
表格的每一行是否可以是一样的呢?
你可能知道,在一个rational database里,一个table里的每一个row都要是不同的。
因此,从结果上来看,rational database得到的是一张张的表,但是对于这些表存在着很多规则。
2。
为什么要设计规则,因为你有一些需求。
这个需求来自于两个方面:
(1) 有了这些规则之后,一个real world的模型,能够在这样的体系下建立起来。遗憾的是,一个数据模型不是完美的,有的 real world model 可能无法轻易在这个体系下实现。
(2)另一个需求是性能。你可能对数据库有很多操作,你希望保证性能。如果是multi-level的设计,你希望复杂的操作能够拆分成很基本的操作,而这些基本的操作,你要做的是优化它们的性能。
3。
数学里面很重要的东西是“定义”。
定义可以把很多东西的抽象层次提高。
举个例子,如果说什么是概率,那会引来两类不同人的争论,因为大家对“概率”的理解是不同的。
而我们现在课本里的概率,在定义概率的时候,并不是按照概率的interpretation来定义的,而是只要满足3条rules的东西就叫做概率。而所有的其他theorems都是从这3条rules推导而来的。
再举个例子,什么是向量?什么是点乘?它们也可以不像我们熟悉的那样,可以抽象化,只要满足一些rules的东西都能叫做向量,而对于这些向量,如果有某种操作,满足了一些另一些rules,我们还可以定义这种操作为 dot product。可以参考傅立叶变换,函数成了向量,一个积分式子成了dot product。
4。
回到上面的数据库。
满足一些rules的表格,就是数据库。
而满足一些rules的东西,在数学上也可以是relation。
因此,也就说,在relational database里面,表格需要满足的rules,使得一个table 成为了一个广义上的relation。
很遗憾“关系”在这里是个名词,而不是形容词。
relation是一个set。
这可能听起来很奇怪。
先来看一个binary relation。
假如有一个set A为{1,2,3},这个set中有3个元素。
而另一个 set B 为{a,b,c}。
所谓的relation是指集合C的一个子集。
集合C的每一个元素都是一个pair,集合C为:{(a,1),(a,2),(a,3),(b,1),(b,2),(b,3),(c,1),(c,2),(c,3)}
注意,这里说的是pair,而不是ordered pair,这意味着(a,1) 和(1,a)是一样的。
上面这个集合C有个名字,叫做集合A和集合B的 cardinal product。
刚刚是两个sets,其实可以推广到 更多个sets,那么它们的relation 可以有类似的定义,只是两个一组我们称之为pair,而两个以上的元素一组,我们一般用另一个词叫tuple。
上面说了 relation是一个set,一个set至少满足的条件是没有重复的。
现在来看一个 relational database里,一个table还可以看成什么?
一般来说,一个table,记录的是某个entity 的 attributes。举个例子,假如一个table叫做 STUDENT ,那么这个table里是记录的 students的数据,students
是entity,而描述一个entity ,在数据库里,我们记录它的数据,实际记录的是它的 attributes。
比如,有col 叫做 ID,有col 叫做 gender,等等,这些不是 student本身 而是用来描述student的attributes。
那么来看,每一个attribute,它是有自己的domain的。比如,ID,如果只能为1到10000,那么这就是 ID的 domain。 gender呢,只能为 male和 female两种,那么这就是gender的 domain。
ID可以看成是一个set,gender也可以看成一个set,那么所有的attributes都能看成是sets。一个table可以看成是 这些sets的 relation。
现在,一个table的每一行,实际上是一个tuple。一个relation中没有相同的tuples,这对应了table中每两行都不同。
一个table的某种状态,是一种relation。而这些所有的状态,都是一张包含了所有可能的 rows的table,这个relation,的subset。
5。
为什么要叫 rational database?因为这个database 是由一个个 relations构成的。或者按照你以前的看法,这个database由一个个 tables组成,而满足了某些rules的table,实际上是一个个relations。
6。
relation背后有坚强的后盾。那是一门叫做 set theory的学问。里面有对 relation的各种定理,操作的方法。
接着,关于relational database的 inside analysis,回到了原本抽象的数学领域。
数据库里的基本操作也变成了 set theory里面对relation的操作,这个数据库的很多表现都是能够预测的了。
而更细节的 数学上的东西 如何来做inside analysis,我暂时没有再深入了解了。
希望这些内容对你有帮助。 |