80
最 新 评 论
80
专 题 分 类
80
最 新 日 志
80
最 新 留 言
80
搜 索
用 户 登 录
友 情 连 接
我 的 好 友
80
博 客 信 息
80


《数据库设计与开发》第2章 | 2007/7/24 21:53:00

2.关系数据库与对象关系数据库

关系数据库管理系统(RDBMS)使用灵活,即使用户不是程序员,也可轻松快捷地写出一般的查询语句。关系数据库管理系统建立在关系模型基础之上。最近几年,一种更新的数据模型——对象-关系模型在许多产品中正逐渐取代关系模型。建立在对象—关系模型基础之上的数据库管理系统称为对象-关系数据库管理系统(ORDBMS)。对象-关系数据库管理系统也支持关系数据库管理系统中的数据。
本章将介绍多年来支配数据表达方式的关系模型的概念和规则,从关系代数固有的查询能力方面介绍关系模型的特性,还要深入介绍工业标准SQL(SQL-99)语言。本章还将介绍对象-关系模型的特性和对象-关系SQL语法。
完成本章的学习我们应掌握:
1.1 关系模型
1.2 关系代数
1.3 SQL
1.4 对象关系数据库

1.1 关系模型

1.1.1 关系数据库举例
数据库是为了特殊目的存储在一起的相关数据记录的集合。关系数据库是按照关系模型组织存放数据的数据库。我们给出几个关系数据库的例子。
(1)产品—代理—销售数据库(CAP) 顾客从代理商那里批发大量商品然后自己转销,顾客其实是零售商。顾客向代理商要求购买商品,每次订货要求有完整的记录。 2)网上录取数据库(SCT)
3)房屋销售数据库(HEC)

1.1.2 关系数据模型
单一的数据结构———关系
关系模型的数据结构非常单一。在关系模型中,现实世界的实体以及实体间的各种联系均用关系来表示。在用户看来,关系模型中数据的逻辑结构是一张二维表。
关系操作
关系模型给出了关系操作的能力,但不对RDBMS语言给出具体的语法要求。关系模型中常用的关系操作包括:选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、交(Intersection)、差(Difference)等查询(Query)操作和增加(Insert)、删除(Delete)、修改(Update)操作两大部分。查询的表达能力是其中最主要的部分。
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。
关系的三类完整性约束
关系模型允许定义三类完整性约束:实体完整性、参照完整性和用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,应该由关系型数据库管理系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。
关系模型与以往的模型德关系
关系模型与以往的模型(层次模型、网状模型)不同,它是建立在严格的数学概念的基础上的。在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。关系模型中称为关系、属性、元组。数据库中有两套术语:表、列、行;关系、属性、元组。
1.1.2.1 域和数据类型
在目前的DBMS产品中(ACCESS、FOX、ORACLE、DB2 UDB、INFORMIX),创建数据库首先确定该数据库有多少表,每一表的名称是什么,表中包含哪些列,表的列必须确定类型。比如说,表CUSTOMERS中的discnt列的类型是real(实型),city列的类型为char(20)(字符串)。
为什么在定义表的时候,必须给表的列加一个特定的类型呢?我们知道,在C或者Java等编程语言中,对于程序中使用的变量或常量等数据,事先应当申明其类型,具有相同类型的数据才可以进行一系列的比较和运算。数据库中给表的列加一个特定类型的原因也在于此。
在数据库原理或理论性文献中,一般地说,一个表的列的取值范围是在一集合D上,我们称D为域(Domain)。
定义1.1.1域(Domain) 域是一组具有相同数据类型的值的集合。
例如:自然数、整数、实数、字符串、日期、时间、{0,1}、{‘男’,‘女’}、{民族名|中国56个民族的名字}等等,都可以是域。
1.1.2.2 表和关系
定义1.1.2 笛卡尔积(Cartesian Product)
给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2, …,Dn 的笛卡尔积为:
D1×D2×…×Dn= {(dl,d2,…,dn)| di∈Di,i=1,2,…,n}
其中每一个元素(dl,d2,…,dn)叫作一个n元组(n-tuple)或简称元组(Tuple)。元素中的每一个值di叫作一个分量(Component)。
若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为:
m1×m2×…×mn 笛卡尔积可表示为一个二维表。表中的每行对应一个元组,表中的每列对应一个域。
定义1.1.3关系(Relation) D1×D2×…×Dn的子集叫作在域D1,D2, …,Dn 的关系,表示为R(D1,D2, …,Dn)
R这里只表示关系的名字,n是关系的目或度(Degree)。
关系是笛卡尔积的有限子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。n目关系必有n个属性。
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码(Candidate key)。若一个关系有多个候选码,则选定其中一个为主码(Primary key)。主码的诸属性称为主属性(Prime attribute)。不包含在任何侯选码中的属性称为非码属性(Non-key attribute)。
笛卡尔积中的许多元组是无实际意义的,从中取出有实际意义的元组来构造关系。在域的笛卡儿积中,我们称那些符合条件的元素为相关的,由此得到数学上的术语——关系。
表的列相对是稳定的,它描述表的结构。增加或删除列都不是常见的,我们也不希望在日常业务中这样。设计表的列布局就是数据库的逻辑设计。另一方面,表的内容是经常变化的,新的行被添加或被删除在日常业务中随时可能发生。数据库是关系的集合。组成关系的属性(列)的集合称为关系模式。数据库所有关系模式的集合构成数据库模式。
关系可以有三种类型:基本关系(基本表或基表)、查询表和视图表。基本表是实际存在的表,它是实际存储数据的逻辑表示。查询表是查询结果对应的表。视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
1.1.2.3 关系规则
基于笛卡尔积的子集的关系定义,在各种不同的商业数据库产品中又有一些规则,这些规则告诉我们在表结构中哪些变化是允许的,哪些检索操作是受限的,这些规则也是我们在进行数据库设计时需要充分考虑的。
关系规则是在关系模型的发明者E.F.Codd的一系列论文中提出,这些规则反映了特定的数学假设,目的是为了建立一个良好的关系结构。
出现新的对象-关系模型是因为人们认为从数学出发的关系规则有点太严格,无法容纳一些有价值的思想,特别是面向对象的系统分析思想出现之后。
规则1 列是同质的
每一列中的分量是同一类型的数据,来自同一个域。每一列为一个属性,要给予不同的属性名。该规则对应:设计表时,确定了表名之后,给每一个字段命名,并确定字段类型、长度。
注:不同的DBMS所支持的数据类型,能够处理的数据长度不一定相同。不同的DBMS当字段类型发生变化时,对已有数据的处理规则也不相同。例如:字段学号原来是字符型,现在该为数值型,那末已存在的字符型学号是否直接变成数值型。不同DBMS下的数据进行移动交换时,处理规则也不相同,数据导入导出时要特别注意此问题。对于来自于枚举型数值域的列,可通过参照表和被参照表的方式实现。
规则2 第一泛式规则
关系模型要求关系必须是规范化的,即要求关系中不允许含有多值属性和含有内部结构,遵守这样规则的表称为第一范式。关系的每一个分量必须是一个不可分的的数据项,不允许表中还有表。
第一范式规则是关系模型的基本规则,但在对象-关系数据库系统中,这一规则将不在是数据库设计的一个约束。以后我们会讨论对象-关系模型时知道,打破第一范式规则的途径是该模型中允许表中对象列的值是包含复杂类型的集合。用户可以自定义数据类型,某一字段可以是用户定义的复杂类型。
该规则表明重复字段在关系中是不允许的,这是关系数据库设计过程中的一个最基本的约束。例如,人事管理中常见的职工登记表有简历这一列,如果我们将简历这一列设计为备注型字段,则对曾经学习工作过的单位的查询基本不能完成,但如果将该列放入职工表的行中,则我们需要给表建立一定数目的列,这个数目要达到某一职工可能有的最多的学习工作单位数,但是这是不切实际的。一个有效的方法是将职工表分解成两部分,建立单独的职工表和简历表,职工表包括职工号等基本信息,简历表包括职工号、起始年月、终止年月、单位4个字段。
规则3 只能基于内容存取行规则
行的顺序可以任意交换,或者说,行是没有次序的,我们只可以通过行的内容即每一行中所存在的属性值来检索。因为关系是元组的集合,元组没有第一行、第二行之分。实际中,查询职工号为10001号职工的信息,没有查询第一行职工的信息。值得注意的是,关系模型要求关系中列也是没有次序的,列的顺序可以任意交换。这一点在“只能基于内容存取行”规则中已体现。
有些商业数据库系统打破了第三项规则,通过行标识(row identification,ROWID)提供一种用户检索表中行的方法。但其主要目的是帮助DBA检查在什么地方表中的行记录没有按正确方式存放。
规则4 行唯一性规则
任意两个元组不能完全相同,关系模型中关系是元组的集合,集合中完全相同的两元素只能被看作一个元素,集合不可以包含相同的元素。而且,规则3只能按列值存取要求元组必须唯一。
商业数据库系统中,很多并不是自动维护规则4的。
规则5 实体完整性规则
任意行在主键列上的取值都不允许为空值(NULL Value)。空值解释为未知的或者尚未定义的,当以后知道的情况下会重新填写该值。空值不同于数字0和空串。表的主键是用来唯一区分表的行的,不难想象,未知的或者尚未定义的实体我们是无法区分他们的。
1.1.3 数据模型
1.1.4 最常用的数据模型

阅读全文 | 回复(0) | 引用通告 | 编辑 | By: 皮皮爸爸

发表评论:

    大名:
    密码: (游客无须输入密码)
    主页:
    标题:
    80
Powered by Oblog.