好了,在说关系数据库具体内容之前,我们得先了解几个基本概念,分别是域,笛卡尔积,关系。域指的是一组具有相同数据类型的值的集合(相同数据类型有整数,实数等),笛卡尔积指的是所有域的所有取值的一个组合,组合里面不可有重复元组,而元组指的是一条记录,分量指的是任意元组里面的任意一个列的取值。笛卡尔积算出来的结果是所有记录条的显示,记录条的个数称为基数,其可由每个域中的元素个数相乘可得。
而关系分三种类型,为基本关系(实际存在的表,是实际存储数据的逻辑表示),查询表(查询结果对应的表),视图表(由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据)。而每一种表(关系),我们通常会这么 R(D1,D2,…,Dn)去表示,其中R为关系名(表名),n为关系的目或度,当n=1,称该关系为单元关系或一元关系,当n=2,称该关系为二元关系,其他称n目关系,在关系中又会有一个概念为码,码有候选码,主码,全码三种,首先,我们先谈谈候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码,最简单的情况:候选码只包含一个属性。而当候选码包含全部的属性的时候,该候选码就是全码,候选码有多个,选择其中一个,那么被选中的就为主码。在候选码中的元素称为主元素,不在的叫非主属性或非码属性。三种关系中的基本关系有以下几条性质:
① 列是同质的(Homogeneous)
② 不同的列可出自同一个域
n 其中的每一列称为一个属性
n 不同的属性要给予不同的属性名
③ 列的顺序无所谓,,列的次序可以任意交换
④ 任意两个元组的候选码不能相同
⑤ 行的顺序无所谓,行的次序可以任意交换
⑥ 分量必须取原子值(这是规范条件中最基本的一条)
说完关系,现在我们谈谈关系模式,那么什么是关系模式呢?关系模式是型,关系是值,简单理解就是关系模式是对关系的描述,描述什么,描述元组集合的结构(属性构成,属性来自的域,属性与域之间的映像关系),元组语义以及完整性约束条件,属性间的数据依赖关系集合。好了,说完它的描述,那么它又是怎么去实现他的描述的呢?请看以下的定义方式:
根据上面的解释,所以我们可以知道关系模式是对关系的描述,是静态的,稳定的,而关系是值关系模式在某一时刻的状态或内容,其是动态的,随时间不断变化的,关系模式和关系往往统称为关系,那么怎么去判断关系是统称还是特指,根据上下文加以区别。
好,说完关系,关系模式,现在我们谈谈关系数据库。其是指在一个给定的应用领域中,所有关系的集合构成了一个关系数据库,然后关系数据库有可以说是分两大类组成,分为关系数据库的型和值,关系数据库的型毫无疑问就是指关系数据库模式,而关系数据库模式包括若干域的定义和在这些域上定义的若干关系模式,关系模式在某一时刻对应的关系的集合为关系数据库的值,简称为关系数据库。
下面我们讲讲对表的操作,也就是关系操作,常见的如下:
特点为:操作的对象和结果都是集合,一次一集合的方式。
好,下面我们学一个新的概念,关系数据库语言,其分类有三个,分别为关系代数语言,关系演算语言,具有关系代数和关系演算双重特点的语言。
我们先谈谈关系代数语言,其是用于对关系的运算来表达查询要求的,语言代表为ISBL。
而关系演算语言:其是用谓词来表达查询要求,分元组关系演算语言(谓词变元的基本对象是元组变量,代表有APLHA,QUEL)和域关系演算语言(谓词变元的基本对象是域变量,代表为QBE)。
最后说说具有关系代数和关系演算双重特点的语言,其代表有sql。
然后又要说一个新的概念,为关系的完整性,关系的完整性分三类,为实体完整性,参照完整性,用户定义的完整性,实体完整性其实就是有一个主键,而参照完整性就是引用别人的主键作为本表的外键,或者引用本表的主键作为本表的外键(其中,被应用的表为被参考关系或者是目标关系,引用别人主键的表为参照关系)。而用户定义的完整性其实就是不可为空呀,唯一呀。
最后,我们谈谈一个关系代数这个新的概念。
首先,我们首先先了解关系代数有什么关系代数运算符
好,在了解了上述的四大类运算符,现在我们说说传统的集合运算。
首先说说并,其就是如果有两个表(要有相同数量的列,并且每列的约束,定义要一样),那么他们就像我们算集合一样并起来。
然后说说差,前提条件也是一样,如果是a-b,那么就选择只在a中有,而在b中没有的记录。出发点为a,参照为b。
然后说说交,前提条件还是要一样,然后就和集合一样,只显示a和b都一样的记录。
最后说说笛卡尔积,就一个一个遍历写出全部的记录,假设a中有2条记录,b中有3条记录,c中有4条记录,那么经过笛卡尔积的处理一共有2*3*4=24条记录。
说完传统的集合运算,现在说说专门的关系运算,其有选择,投影,连接,除
就不多说了,直接看例子:
选择:
投影:
连接常见分等值连接和自然连接,还有一般连接,外连接,左外连接,右外连接。注意自然连接是特殊的等值连接,其会把重复的属性列去掉,且进行比较的分类必须是相同的属性组。好,具体怎么去实现这些连接,直接看例子领悟:
最后说一下除:
其很简单,首先,如果是a除b,那么a和b相同的列去掉,然后只剩下和b不同的列,再在相同的列中如果相同列的某条记录的值都一样,那么该记录的不是相同列的记录保留下来,最后剩下的就是除的结果。
原文:http://www.cnblogs.com/lpd1/p/7833272.html