严格的概念认识——关系、关系模型
上篇文章里,我们已经了解了关系数据库设计的一般流程。在这篇文章里,我想把大家带入一个严格的、明朗的关系数据库世界里。看了本篇文章,希望能在大家脑海中建立一个这样的印象:数据库及其设计是一件严谨的事,数据库本身由于它的严谨性决定了它的科学性及可靠性。
这篇文章的内容会涉及一些集合论的知识,没这方面根底的朋友不用担心,我尽量用通俗的文字加以解释,希望大家学习愉快。另外,由于本人知识限制,有些集合论的知识可能讲得不是那么严谨,希望这方面的朋友不吝指导,我这里点到为止。
在给定关系的概念之前,我引入两个概念
域:域是一组具有相同数据类型的值的集合。相对于数据类型,它更包含一个“取值范围”,当然后半句不是严谨的,但确是非常符合数据库要求的。
笛卡尔积:我们知道每个域都有一个取值范围,通俗地讲就是能有“好多”值;笛卡尔积就是
“几个域的所有取值的组合方式”的集合。
元组:笛卡尔积所代表的集合的每一个集成元素叫元组,又跟据域的个数,有1元组、2元组、n元组之说。这个元组相当于数据库里的每一行。
分量:元组中的每一个值叫做分量。
关系
好了,无聊的东西到此为止,以下是跟我们主题直接相关的,上篇中,我提到:关系就是指联系么?以下将给出关系的定义:
D1*D2*...*Dn的子集叫做在域D1,D2,...,Dn上的关系。
注:Dn表示一个域,D1*D2*...*Dn表示所有这些域的笛卡尔积。
可见“关系”其实是集合论中的一个概念,从本质上来说,关系是一个集合,所以它有好多集合操作,这些操作包括:
选择(select)、投影(project)、接连(join)、除(divide)、并(union)、差(except)、交(intersection)、及笛卡尔积。
灵活地撑握这些运算非常重要,很可能,正因为你比人家多撑握一个操作,而比别人写出性能更优的sql代码,甚至帮助企业解决一个数据库的查询瓶颈。
属性
好了,到这里关系的概念大家应该已经清楚了。顺水推舟,我们来讲讲并系里面的“属性”。
候选码:如果关系中的某一个属性组的值能唯一地标识一个元组,那么这组属性称为候选码。
主码:设计时,可以选定一个候选码为主码。
主属性:候选码中的属性称为主属性。
非主属性:不包含在任何候选码中的属性称为非主属性,或非码属性。
这些概念在将来学习范式的时候非常重要,这里大家只要留心记得就可以。
关系模式
刚刚我讲了,关系理论上讲是一个集合,集合也是一个具体的“值”;而关系模式呢?相对于值,它是型,类型的意思。也就是具有相同数据结构的关系。
请了解一下关系模式的表示方法
R(U,D,Dom,F)
R:关系的名称
U:关系的属性集合
D:属性所对应域的集合
Dom:属性与域的映射关系
F:在关系内部属性与属性的依赖关系。
给出这个表示方法的目的并不是让大家如何地理解它,而是希望大家能从中体会出关系与关系模型的区别,从而更好地了解关系及关系模型的概念。
好了,这篇文章到此为止。从本质上了解一样东西是不是很爽,呵呵,下一讲,我会跳过“概念模型设计”,而讲范式及函数依赖。感谢大家花时间阅读。
摘自:galimatoo的专栏
相关新闻>>
- 发表评论
-
- 最新评论 更多>>