关系数据库简介
1970年IBM公司的E.F.Codd提出关系数据模型
1972年提出了关系的第一、第二、第三范式
1974年提出了关系的BC范式
80年代后,关系数据库系统成为最重要、最流行的数据库系统
典型实验系统:System R、University INGRES
典型商用系统:ORACLE、DB2、SYBASE、INGRES、INFORMIX
单一的数据结构–关系
现实世界的实体以及实体间的各种联系均用关系来表示
逻辑结构–二维表
从用户角度,关系模型中数据的逻辑结构是一张二维表,关系模型是建立在集合代数的基础上。
关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义完整性。
其中实体完整性、参照完整性是关系模型必须满足的完整性约束条件,成为关系的两个不变性,应该由关系系统自动支持。
用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。
实体完整性规则是指若属性A是基本关系R的主属性,则属性A不能取空值。
空值就是“不知道”或“不存在”或“无意义”的值。
实体完整性规则的说明:
1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。
3)关系模型中以主码作为唯一性标识。
4)主码中的属性即主属性不能取空值。
主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第2)点相矛盾,因此这个规则称为实体完整性。
实体完整性规则规定基本关系的所有主属性都不能取空值。
针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。
关系代数是一种抽象的查询语言,是对关系的运算来表达查询。
关系代数的运算对象是关系,运算结果也是关系。
关系代数按运算符的不同可分为传统的集合运算和专门的关系运算两类。
集合运算是从关系的水平方向进行的角度进行。
专门的关系运算不仅涉及行而且涉及列。
关系运算包括:选择、投影、连接、除运算。
相关记号说明:
①关系模式为R(A1,A2,…,An),它的一个关系为R,t∈R表示t是R的一个元组。t[Ai]则表示元组t中相应于属性Ai的一个分量。
②若A={Ai1,Ai2,…,Aik},其中Ai1,Ai2,…,Aik是A1,A2,…,An中的一部分,则A称为属性列或属性组。
t[A]=(t[Ai1,],t[Ai2],…,t[Aik])表示元组t在属性列A上诸分量的集合。¬A 则表示{A1,A2,…,An}中去掉{Ai1,Ai2,…,Aik}后剩余的属性组。
③R为n目关系,S为m目关系,Tr∈R,Ts∈S,Tr ⌒Ts 称为元组的连接。Tr⌒Ts 是一个n+m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。
④给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x在R中的象集Zx={t[Z]|t∈R,t[X]=x},它表示R中属性组X上值为x的诸元组在Z上分量的集合。
关系演算是以数理逻辑中的谓词演算为基础的。按谓词变元的不同,关系演算可分为元组关系演算和域关系演算。
元组关系演算以元组变量作为谓词变元的基本对象。一直典型的元组关系演算语言是ALPHA语言。
ALPHA语言主要有GET,PUT,UPDATE,DELETE,DROP6条语句。
语句的基本格式是:
操作语句 工作空间名(表达式): 操作条件
表达式用于说明要查询的结果,它可以是关系名或(和)属性名。
操作条件是一个逻辑表达式,说明查询结果要满足的条件,用于将操作结果限定在满足条件的元组中,操作条件可以为空。
除此之外,还可以在基本格式的基础上加上排序要求、定额要求等。
为了讨论方便,先允许关系(的基数)是无限的。然后再对这种情况下定义的演算作适当的修改,保证关系演算中的每一个公式表示的是有限关系。
在元组关系演算系统中,称{t|Φ(t)}为元组演算表达式。其中t是元组变量,Φ(t)为元组关系演算公式简称公式。它由原子公式和运算符组成。
原子公式有三类:
1)R(t)
R是关系名,t是元组变量。R(t)表示t是R中的元组。于是,关系R可表示为{t|R(t)}
2)t[i]Θu[j]
t和u是元组变量,Θ是算术比较运算符。t[i]Θu[j]表示断言“元组t的第i个分量与元组u的第j个分量满足比较关系Θ”。
3)t[i]Θc或cΘu[i]
这里c是常量,该公式表示“t的第i个分量与常量c满足比较关系Θ”。
在关系演算中定义了“自由元组变量”和“约束元组变量”的概念。这些概念和谓词演算中的概念完全一样。若公式中的一个元组变量前有“全称量词”或“存在量词”,则称该变量为约束元组变量,否则称自由元组变量。
公式可以递归定义如下:
1)如果原子公式是公式。
2)如果Φ1,和Φ2是公式,则Φ1∧Φ2,Φ1∨Φ2,┐Φ1也是公式。分别表示为:
如果Φ1和Φ2同时为真,则Φ1∧Φ2才为真,否则为假;
如果Φ1和Φ2中一个或同时为真,则Φ1∨Φ2为真,仅当Φ1和Φ2同时为假时,Φ1∨Φ2才为假;
若Φ1为真,则┐Φ1为假。
3)若Φ是公式,则∃t(Φ)也是公式。其中符号∃是存在量词符号,∃t(Φ)表示:若有一个t使Φ为真,则∃t(Φ)为真,否则∃t(Φ)为假。
4)若Φ是公式,则∀t(Φ)也是公式。其中符号∀是全称量词符号,∀t(Φ)表示:如果对所有t,都使Φ为真,则∀t(Φ)为真,否则∀t(Φ)为假。
5)在元组演算公式中,各种运算符的优先次序为:
①算术比较运算符最高;
②量词次之,且∃的优先级高于∀的优先级;
③逻辑运算符最低,且┐的优先级高于∧的优先级,∧的优先级高于∨的优先级;
④加括号时,括号中运算符优先,同一括号内的运算符之优先级遵循①,②,③各项。
6)有限次地使用上述五条规则得到的公式是元组关系演算公式,其他公式不是元组关系演算公式。
一个元组演算表达式{t|Φ(t)}表示了使Φ(t)为真的元组集合。
关系代数的运算均可以用关系演算表达式来表示(反之亦然)。
下面用关系演算表达式来表示五种基本运算:
1)并,R∪S={t|R(t)∨S(t)}
2)差,R-S={t|R(t)∧┐S(t)}
3)笛卡尔积:
4)投影
5)选择
安全限制:把不产生无限关系的表达式称为安全表达式,所采取的措施称为安全限制。
安全限制通常是定义一个有限的符号集dom(Φ),dom(Φ)一定包括出现在Φ以及中间结果和最后结果的关系中的所有符号(实际上是各列中值的汇集),dom(Φ)不必是最小集。
当满足下列条件时,元组演算表达式{t|Φ(t)}是安全的:
1)如果t使Φ(t)为真,则t的每个分量是dom(Φ)中的元素。
2)对于Φ中的每一个形如(∃u)(W(u))的子表达式,若u使W(u)为真,则u的每个分量是dom(Φ)中的元素。
3)对于Φ中的每一个形如(∀u)(W(u))的子表达式,若u使W(u)为假,则u的每个分量必属于dom(Φ)。换言之,若u某一分量不属于dom(Φ),则W(u)为真。
关系演算的另一种形式是域关系演算。域关系演算以元组变量的分量即域变量作为谓词变元的基本对象。
QBE是Query By Example(即通过例子进行查询)的简称,它是基于屏幕表格的查询语言,用户通过终端屏幕编辑程序以填写表格的方式构造查询要求,而查询结果也是以表格形式显示。QBE中用示例元素来表示查询结果可能的情况,示例元素实质上就是域变量。
QBE操作框架