关键词
关系模型,关系数据库,关系操作,完整性约束
关系模型
关系模型是目前最为重要的数据模型,关系数据库采用关系模型其数据的组织方式,关系模型建立在严格的数学概念之上。这是其他数据模型[1]所不具备的特征之一。
关系模型可以理解为一组关系,其中的每一个关系的数据结构都是一张规范化的二维表。关系模型要求关系是规范化,规范化的最基本条件就是关系的每一个分量都必须是不可再分的数据项,通俗的说法就是不存在大表中嵌套小表。如图所示的表格就不符合关系模型的基本要求。
下面是关系模型的常用术语及形象理解:
- 关系(Relation):一张表
- 元组(Tuple):表的一行,记录
- 属性(Attribute):表的一列
- 码(Key,也叫键):属性组,可唯一确定一个元组
- 域(Domain):属性的取值范围
- 分量:元组中的一个属性值
- 关系模式:对关系的描述,表头 如:学生(学号,姓名,性别,年龄,专业)
下面是严格术语定义:
- 域(Domain):域是一组具有相同数据类型值的集合。
- 笛卡尔积(Cartesian Product):设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成有序对,所有这样的有序对组成的集合叫做A与B的笛卡尔积,记作AxB.
关系模型的操作
关系模型中的操作都是集合操作,操作的对象和操作结果都是关系。关系模型隐藏了操作的具体细节,存储路径对用户透明,用户只需要告知要找什么干什么即可。
基本关系操作
基本的关系操作可以分为查询(Query)和更新(Update)两大类,其中的更新可细分为插入(Insert)、修改(Update)、删除(Delegate)。
关系的查询包括选择(Select)、投影(Project)、并(Union)、差(Except)、笛卡尔积(Cartesian Product),以及连接(Join)、除(Divide)、交(Intersection)等导出操作。
关系数据语言分类
关系数据语言分类可分为关系代数、关系演算、以及所谓的具有关系代数和关系演算双重特点的语言(如SQL)三大类。
关系代数通过对关系的运算来表达查询,关系演算通过谓词来表达查询,而SQL则是集DDL、DML、DCL和查询于一体的结构化查询语言。
关系模型的完整性约束
关系的完整性约束包括三大类:
- 实体完整性约束
- 参照完整性约束
- 用户定义完整性约束
实体完整性约束
实体完整性要求主属性不能为空,进一步的基本关系的主码也不能为空。
实体在现实世界都是可区分的,也就是说实体具有某种唯一性的标识来区别它们自身,关系模型中主码就是唯一性标识,主码中的属性不能为空,若为空的话就说明有不可区分的实体。
参照完整性约束
外码
一个关系模型A中的主码(可以是一个或者一组属性)对应于另外一个关系模型B中的一个或者一组属性,并且这个或者这组属性还不是关系模型B的码,则称且这个或者这组属性为关系模型B的的外码(Foreign Key)。关系模型B中的外码参照于关系模型A的主码。
参照完整性的规则
简单来说就是,外码可取空值(必须每个属性值均为空值)和非空值,取非空值时,外码必须存在于它参照的另外一个关系模型的主码中。
严格的定义如下:
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中的每一个元组在F上的值必须为以下两种情况之一:
- 情况一,取空值(F的每个属性值均为空);
- 情况二,等于S中的某个元组的主码值。
用户定义完整性约束
用户定义完整性约束反映的是某一具体应用的数据所要满足的语义要求,用户定义完整性约束是针对某一具体关系数据库的约束条件。
关系模型提供用户定义完整性约束可将各类验证和约束集中在一起统一处理,而不必将各种判断逻辑分散在具体的应用系统中。
关系数据库
支持关系模型的数据库就是关系数据库。
-
其他数据模型有层次模型、网状模型、面向对象模型、对象关系模型等。 ↩