第 15章 关系数据库
第 15章 关系数据库
15.1 关系和关系模式 15.2关系数据库概述
15.3 关 系 代 数 15.4元组关系演算简介
15.5 域关系演算简介 15.6 三种关系运算的等价性
15.7 关系数据库标准语言 SQL
15.8 FoxPro的 SQL命令
15.9 全关系型数据库系统的十二条基本准则简介
第 15章 关系数据库
15.1 关系和关系模式
15.1.1 关系
1.
定义,给定一组域 D 1,D 2,…,D n,它们的笛
D 1× D 2× …× D n={(d 1,d 2,…,d n)|d
i∈ D i}
例 若 D 1={0,1},D 2={a,b},D 3={x,y,z},则 D
1× D 2× D 3 为,{(0,a,x),(0,a,y),
(0,a,z),(0,b,x),(0,b,y),(0,b,z),(1,a,x),(1,a,y); (1,a,z),(1,b,x),
(1,b,y),(1,b,z)} 。
第 15章 关系数据库
笛卡尔积中的每一元素 (d1,d2,…,dn)称为一个 n元组
(n--tuple),简称元组 。 元组中的每一个 di称为一个分量
( Component), 亦称属性, 分量是有序的 。
若所有的 Di都为有限集, 基数为 mi,则笛卡尔积也
为有限集, 基数为:
?
?
?
n
i
imm
1
笛卡尔积所包容的信息是十分有限的,但当研究
的对象是其子集时,情况就不同了。
第 15章 关系数据库
2,关系的数学定义
(1) 定义 。
D1× D2× …× Dn的子集称为在域 D1,D2,…,Dn上的关
系 (Relation), R(D1,D2,….,Dn) 表示 。 这里,
R是关系名, n是关系的目或度 (degree)。
关系是元组的集合 。 每个关系都有一个关系名,
每个属性也有一个属性名 。
(2) 可用一个二维表来表示一个关系 。
表名为关系名, 每一行为一个元组, 每一列为一
个属性, 每列起首标以属性名 。
第 15章 关系数据库
3,关系数据库的关系
关系数据库的关系与上述数学上的关系有所不同,
① 每一列都是不可分的数据项, 且来自同一域 。
② 每列有一个属性名, 不同列有不同的属性名,
但可出自同一域 。
③ 任意两个元组不能完全相同 。
④ 列之间的次序,行之间的次序都是不重要的。
第 15章 关系数据库
15.1.2关系模式
关系的描述称为关系模式 。 一个有名关系的关系
模式常简记为它的属性名序列 。
若一个关系的名为 R,其所有属性名分别为 A1,
A2,…,An,则关系模式记为:
R (A1,A2,…,An)
事实上, 除了上述内容外, 关系模式还应描述:
各属性的值域, 属性与域之间的映像关系, 各属性间
的数据依赖以及一组完整性约束条件 。 因此, 关系模
式的形式化定义是一个多元组 。
R(U,D,DOM,I,F)
第 15章 关系数据库
多元组中, R为关系名; U是组成 R的有限属性集;
D是各属性的值域; DOM 是属性列到域的映射; I是
一组完整性约束条件; F是属性间的一组依赖关系 。 但
一般都简化为用 R(U)表示 。
关系模式是一个框架, 是关系的结构, 不随时间而
变化的 。 关系是关系模式在某一时刻的, 当前值,, 它
是随着各元组的增删, 随着元组各属性值的改变而不断
变化的 。 实际使用中, 常把关系模式和关系统称为关系,
可根据上下文加以区分 。
一个系统中所有关系的当前值, 称为 关系数据库 。
第 15章 关系数据库
15.2 关系数据库概述
15.2.1
关系模型是用关系(即二维表)来表示实体以及
实体间的联系的。
15.2.2
关系操作指对关系进行的存储操作和检索 ( 查询 )
操作 。 关系操作有代数方式和逻辑方式两种, 即关系
代数和关系演算, 它们在功能上是等价的 。
第 15章 关系数据库
SQL( Structured Query Language,结构化查询 )
语言是一种兼有关系代数和关系演算特点的语言, 它
集查询 ( Query), 操纵 ( Manipulation), 定义
( Definition) 和控制 ( Control) 四个功能于一身, 是
一种通用的, 功能极强的关系数据库操纵语言 。 关于
SQL语言在后面的章节中将进一步介绍 。
第 15章 关系数据库
15.2.3
在讲完整性约束之前,首先要弄清数据库中的几个
概念。
(1) 关键字或码 ( Key) 。
可惟一标识关系中每一个元组的属性 ( 组 ) 称为该
关系的候选码; 若一个关系中有多个候选码, 则选取其
中一个为主关键字 ( 或叫主码 ) 。 包含在候选码中的属
性叫主属性 。
(2) 外部键或外部码 ( Foreign Key) 。
设有两个关系 R和 S,其中属性 ( 组 ) X是关系 S的
第 15章 关系数据库
关键字, 但不是关系 R的关键字, 则把 X叫做关系 R的外
部码 ( 外部键 ) 。
1,实体完整性 ( Entity Integrity)
如果一个属性是某个关系的主关键字组成部分, 则
该属性就不能取空值 。 实体完整性约束的理由是:
① 一个基本关系通常对应现实世界的一个实体集;
② 现实世界的实体是可区分的, 即它们具有某种唯
一性标识;
第 15章 关系数据库
③ 在关系模型中由主关键字作为惟一性标识;
④ 如果主关键字取空值, 说明存在某个不可标识
的实体, 这和 ② 相矛盾, 所以主关键字不能取空值 。
2,( Referential Integrity)
设有两个基本关系 R和 S,属性组 A是 S的主关键字,
是 R的外部码, 则对于 R中 S的取值只有两种可能性:
① 取空值; ② 等于 S中某个元组的主关键字值 。
第 15章 关系数据库
3,用户定义的完整性 ( User Definitional
Integrity)
实体完整性和参照完整性约束是关系数据模型的
两个最基本的完整性约束 。 而用户自定义的完整性是
针对某一个具体数据库的约束条件, 由应用环境决定,
它反映的是某一具体应用所涉及的数据必须满足的语
义要求 。
第 15章 关系数据库
15.3 关系代数
15.3.1 传统的集合运算
传统的集合运算是二目运算, 共有四种运算 。 设关
系 R和 S具有相同的目, 且相应属性都取之于同一域,
1,并 (Union)
关系 R和 S的并记为 R∪ S,其结果仍为 n目关系,由属
于 R或属于 S的元组组成。
第 15章 关系数据库
2,差 (Difference)
关系 R和 S的差记为 R-S,其结果仍为 n目关系,由属
于 R但不属于 S的元组组成。
3,交 (Intersection)
关系 R和 S的交记为 R∩S,结果仍为 n目关系, 由既
属于 R又属于 S的元组组成 。 R∩S
R∩S=R-(R-S)
4,广义笛卡尔积 (Extended Cartesian Product)
R和 S分别为 n目和 m目关系, 则其广义笛卡尔积
R× S是一个 n+m目关系 。 其元组的前 n个分量由 R的一个
元组提供, 后 m个分量由 S的一个元组提供 。
第 15章 关系数据库
15.3.2专门的关系运算
1.
(1) R为关系模式 R(A1,A2,…,An)的一个关系, 则 t∈ R
表示 t是 R的一个元组; t[ Ai] 表示 t在属性 Ai上的那个
分量 。
(2)R 和 S 分别为 n 目和 m 目关系, 且有
t1=(r1,r2,…,rn)∈ R,t2=(s1,s2,…,sm)∈ S,则此两个元组的连
串 (r1,r2,…,rn,s1,s2,…,sm)构成了另一个 n+m目关系的一个
元组 。 t1 t2
第 15章 关系数据库
(3) 若 R(A1,A2,…,An)是一个关系 。 A={A i1,…,Aij
,…,Aik},且 Aij∈ {A1,A2,…,An},则 A称为 R的一个属性列,
表示从 {A1,A2,…,An}中去掉 A后剩余的那些属性列 。 t[ A]
=(t[ Ai1],t[ Ai2],…,t[ Aik] ) 为 t在属性列 A上各分量的
集合 。
(4) 给定一个关系 R(X,Z),X和 Z都是属性组 。 当
t[ X] =x时, x在 R中的像集 (Image Set)
Zx={t[ Z] |t∈ R,t[ X] =x}
Zx表示 R中属性组 X上值为 x的所有元组在 Z上分量的集合 。
第 15章 关系数据库
2,专门的关系运算
(1) 选择 (Selection)。
已知 F是一个逻辑表达式, 运算对象为属性名 (或其
序号 )和常数, 则 σF(R)为关系 R上使 F为逻辑真的所有元
组组成的一个新关系 。
(2) 投影 (Projection)。
关系 R上的投影是根据要求从 R中选择若干属性列组
成另一关系, 然后从中去掉重复元组后得到的新关系 。
(3) 连接 (Join)。
连接也称 θ连接 。
第 15章 关系数据库
(4) 自然连接 (Natural Join)。
若 R和 S的公共属性列为 B,则 R和 S
R× S 的含义如下,首先, 求 R和 S在属性组 B上的等
值连接; 然后, 在所得关系上去掉重复属性组 B,即得
R和 S的自然连接 。
第 15章 关系数据库
15.4 元组关系演算简介
元组关系演算是以元组为变量的,
{t|φ(t)}
表示 。 式中, t为元组变量; φ(t)为原子公式或原子
公式和运算符组成的公式, 表示所有使 φ为真的元组的
集合 。
1,φ(t)的基本形式 ——
(1) R(t),R为关系名 。 意为 t是 R中的一个元组 。
(2) t[ i] θu [ j],t和 u都是元组变量, θ为算术比较符 。
公式表示 t的第 i个分量和 u的第 j个分量满足比较关系 θ。
第 15章 关系数据库
(3) t[ i] θc 或 cθt[ i],c为常数 。 表示 t的第 i个分
量与 c之间满足 θ关系 。 例如, t[ 1] >2 表示 t的
第一个分量大于 2。
2,φ(t)
φ(t)的三类运算符是算术比较符, 全称量词和存在
量词, 逻辑运算符 。
① 算术比较符的优先级最高 。
② 全称量词 。
③, ∧, ∨ 的优先级最低 。 其中,
,∨ 最低 。
第 15章 关系数据库
3,公式 φ(t)的定义
① 原子公式是公式 。
② 若 φ1为公式, φ1也为公式 。 φ1为真 (假 )时,
φ1为假 (真 )。 若 φ2也为公式, 则 φ1∧ φ2,φ1∨ φ2也
为公式 。
③ 若 φ是公式, 则 ( t)φ也是公式 。 若至少有一
个 t使 φ为真, 则 ( t)φ为真 。
④ 若 φ是公式, 则 ( t)φ也是公式 。 当所有的 t都
使 φ为真时, ( t)φ才为真 。
⑤ 在需要时,可对公式使用括号。 括号的优先
第 15章 关系数据库
15.5 域关系演算简介
域关系演算的运算符与元组关系演算相似, 但域
关系演算中的变量是元组分量, 简称域变量 。
{t1,t2,…,tk|φ (t1,t2,…,tk)}
式中, t1,…,tk为域变量, φ是由原子公式和运算符
组成的公式 。 域关系演算表达式是使得 φ为真的那些
t1,t2,…,tk所组成的元组的集合 。
第 15章 关系数据库
φ (t1,…,tk)
① R(t1,…,tk)。 其中, R为 k元关系, t1为域变量或
常数 。 R(t1,…,tk)是由分量 t1,…,tk组成的, 属于 R的元组 。
② t1 θ uj 。 ti为元组 t的第 i个分量,uj是元组 u的第 j个
分量 。 t1θ uj表示域变量 t1与 uj应满足 θ 关系 。
③ t1θ c或 c θ t1。 它表示域变量 t1与常数 c之间满足 θ
关系。
第 15章 关系数据库
15.6 三种关系运算的等价性
前面讨论三种关系运算时, 都未加任何限制 。 这
对定义的关系代数来说, 是没有问题的, 但对关系演
算有可能产生无限关系 。
安全限制的办法是定义一个有限的符号集 DOM(φ),
只有 DOM(φ)中的符号才能出现在 φ中, 才能出现在中
间结果的关系和最终结果的关系中 。
有了安全限制后, 关系代数, 元组关系演算和域
关系演算的表达能力都是等价的, 可以相互转换 。
第 15章 关系数据库
15.7 关系数据库标准语言 SQL
15.7.1 SQL语言的发展
SQL( Structured Query Language) 意为结构化查
询语言 。 它首先由 Boyceh和 Chamberlin在 1974年提出 。
1979年, 在 IBM公司的 San Jose Research Laboratory研
制成功典型的关系数据库管理系统 System R上首次运
用了 SQL语言 。
目前 ANSI正在酝酿新的 SQL标准,SQL3。 现在的
DBMS一般均参照 SQL92。
第 15章 关系数据库
15.7.2 SQL的特点
SQL的主要特点有:
1,功能一体化
与非关系模型 ( 层次, 网状模型 ) 的数据语言不同,
SQL语言集数据定义, 数据操纵, 数据控制于一体,
所以 SQL语言可以实现数据库生命周期的全部活动 。
2,语言简洁易学
SQL语言的语法简单, 容易学习和使用 。 只用 8个
动词,Create,Drop,Select,Insert,Update,Delete、
Grant,Revoke即完成了核心功能 。
第 15章 关系数据库
3,高度非过程化
用 SQL语言进行数据操作时, 用户只需提出, 做
什么,, 无需指明, 如何做,, 即用户不必了解存取
路径 。 存取路径的选择和 SQL语句的具体执行过程由
系统自动完成 。
4,关系数据库的公共语言
由于目前主要的关系型 DBMS均支持 SQL,因此
用户可将使用 SQL的技能从一个 DBMS转到另一个
DBMS,程序也可较方便地进行移植 。
第 15章 关系数据库
15.7.3 SQL语言的基本概念
SQL语言支持关系数据库的三级模式结构,如图
15 -- 3所示。
第 15章 关系数据库
图 15—3 QL支持关系数据库的三级模式结构
第 15章 关系数据库
图 15—3中, 基本表即是独立存在的表 。 每个基本表
对应一个存储文件, 一个基本表可有若干索引 。 存储文
件和索引构成了内模式 。 每一视图是从若干基本表导出
的虚表, 数据库中只存储视图的定义, 不存储视图中的
数据 。 视图也是关系 。 SQL中的一个数据库一般包含了
若干个基本表和视图 。
第 15章 关系数据库
15.7.4 SQL语句分类
1,SQL
(1)定义基本表 ——CreateTable。它的一般格式如下:
CreateTable〈 表名 〉 {〈 列名 1〉〈 类型 〉
[ NOTNULL][,〈 列名 2〉〈 类型
[ NOTNULL],..] };
其中, 表名是所要建立的基本表名, 它可以由一
个或多个属性 ( 列 ) 组成, NOTNULL选项说明该属性
不能为空 。
第 15章 关系数据库
SQL的基本数据类型如图 15—4所示。
图 15—4 SQL的基本数据类型
第 15章 关系数据库
例 1 本例在数据库中建立了一个新的, 空的基本
表, 表名为职工 。 它由职工号, 姓名, 性别, 出生日
期和婚否五个属性组成, 并且要求职工号不能为空 。
CREA TETABLE
职工号 INT NOT NULL,
姓名 CHAR(8),
性别 CHAR(2),
年龄 INT,
婚否 CHAR(4)) ;
第 15章 关系数据库
(2)修改基本表 ——ALTER TABLE
一般格式,ALTER TABLE〈 表名 〉
[ ADD〈 新列名 〉 〈 类型 〉 ]
[ MODIFY〈 列名 〉 〈 类型 〉 ] ;
其中, 表名指要修改的基本表, ADD子句用于增
加新列, MODIFY子句用于修改原有的列定义 。 注意
在修改基本表定义语句中, NOTNULL选项是不允许的 。
第 15章 关系数据库
例 2 向职工表中增加, 部门, 属性列, 数据类型为
字符型 。
ALTER TABLE职工 ADD部门 CHAR(6)
(3)建立索引 ——CREATEINDEX
一般格式,CREATE[ Unique] INDEX〈 索引名 〉
ON〈 表名 〉
(〈 列名 〉 [ 〈 ASC/DESC〉 ] [, 〈 列名 〉
[ 〈 ASC/DESC〉 ]],..);
第 15章 关系数据库
只能在基本表上建索引, 索引只供系统加速查询
使用, Unique任选项表示每一个索引只对应惟一的数
据记录 。 ASC/DEC任选项指定索引值的排列次序, 缺
省值为 ASC。
第 15章 关系数据库
例 3 给职工表按职工号建惟一索引 。
CREATE UNIQUE INDEX职工 -
ON职工(职工号)
(4) 建立视图 ——CREATEVIEW。
一般格式,CREATE VIEW〈 视图名 〉
[ (列表名 )] AS〈 SELECT语句 〉
[ 〈 列名 〉 [ withcheckoption]]
第 15章 关系数据库
其中, 列表名给出视图中列名的名字, 数目应与子
查询 SELECT子句中给出的列名一致 。 若省略, 则使用
SELECT子句中给出的列名;有 withcheckoption任选项时,
表示视图作修改插入时, 由系统检查插入或更新后的行
必须满足的条件
第 15章 关系数据库
例 4 在职工表上建立关于生产科的职工视图 。
CREATEVIEW职工 -
ASSELECT职工号, 职工名, 性别,
FROM
WHERE部门=, 生产科,
(5)删除基本表, 索引, 视图 ——DROP
一般格式,DROPTABLE〈 表名 〉
DROPINDEX〈 索引名 〉
DROPVIEW〈 视图名 〉
第 15章 关系数据库
删除基本表时, 表中的数据和建立在该表上的索
引都将自动被删除掉, 建立在此表上的视图定义虽保
留, 却无法再被引用;删除索引时, 把有关索引的描
述也从数据字典中删除 。
为了举例方便, 这里先定义一个简单的, 职工 -项
目, 数据库, 如图 15—5所示的三张表 。
第 15章 关系数据库
图 15—5,职工 -项目”数据库
第 15章 关系数据库
1,简单查询
一个 SELECT语句可以分解成三个部分:查找什么
数据, 从哪里查找, 查找的条件是什么 。 一般称只查找
一个表就可以得到答案的查询为简单查询 。
例 1 表的浏览 。
SELECT*
FROM
该语句将列出职工表的所有记录 。, *” 代表了全部
的属性列,
SELECT职工号, 姓名, 性别, 年龄, 婚否, 职称, 部
门 FROM职工
第 15章 关系数据库
15.8 FoxPro的 SQL命令
FoxPro支持 SQL。 在 FoxPro中, SQL包含如下一
些命令,
CREATE CURSOR,CREATE TABLE,CREATE
QUERY,INSERT—SQL,MODIFY QUERY,SELECT—
SQL命令等 。
1,CREATECURSOR命令
格式, CREATECURSOR〈 库文件名 〉 (〈 字段情况
清单 〉 )/FROMARRAY〈 数组名 〉
第 15章 关系数据库
2,CREATETABLE/DBF命令
格式, CREATETABLE/DBF〈 库文件名 〉 (〈 字段
情况清单 〉 )/FROMARRAY〈 数组名 〉
3,CREATEQUERY命令
格式,CREATEQUERY[ 〈 文件名 〉 /?] ;
本命令打开一个 RQBE窗,用户可交互地产生一个查
询 (SQLSELECT命令 )。
4,INSERT—SQL命令
格式 1,INSERT INTO〈 库文件名 〉 [ (〈 字段名清
单 〉 )] VALUES(〈 表达式清单 〉 )
第 15章 关系数据库
格式 2,INSERT INTO〈 库 文 件 名 〉
FROMARRAY〈 数组名 〉 /FROM MEMVAR
5,MODIFYQUERY命令
格式,MODIFYQUERY [ 〈 文件名 〉 /? ]
[ NOWAIT] 本命令打开一个 RQBE窗,用户可交互地
修改一个已存在的查询文件 (或产生之 )。 该文件的扩展
名为,QPR,可以用 DO命令执行之 。
第 15章 关系数据库
6,SELECT—SQL命令
格式, SELECT[ ALL/DISTINCT] 〈 检索项表 〉
FROM〈 库文件项表 〉 [ INTO〈 目标 〉 /TOFILE〈 文
件名 〉 [ ADDITIVE ] /TOPRINTER [ PROMPT ]
/TOSCREEN ] [ PREFERENCE〈 特征名 〉 ]
[ NOCONSOLE] [ PLAIN] [ NOWAIT] [ WHERE
〈 库文件连接条件 〉 [ AND/OR〈 过滤条件 〉 ]
[ GROUPBY〈 组合列表 〉 ] [ HAVING 〈 过滤条
件 〉 ] [ UNION [ ALL ] 〈 SELECT 命令 〉 ]
[ ORDERBY〈 列名及列号表 〉 ]
第 15章 关系数据库
本命令从一个或几个库文件中检索数据 。 本命令
既可用于命令窗或程序中,也可用于 RQBE窗,功能极为
丰富 。 若 SETTALK为 ON,执行本命令时,将显示时间及
生成记录数 。 (记录数同时送系统内存变量,..-TALLY。 )
第 15章 关系数据库
INTO〈 目标 〉,选用本项时, 〈 目标 〉 可以为
ARRAY〈 数组名 〉 ;CURSOR〈 临时文件
名 〉 ;DBF/TABLE〈 库文件名 〉 。 本项规定了检索结果
的去处 。 选用本项,则检索结果不送显示器 ;否则,送
Browse窗显示 。
(1)ARRAY〈 数组名 〉,检索结果送入此 〈 数组
名 〉 。 若 〈 数组名 〉 不存在,则自动建立之 。 (检索无结
果时,不建立该数组 。 )
(2)CURSOR〈 临时文件名 〉,检索结果送 〈 临时文
件名 〉 。
第 15章 关系数据库
(3)DBF/TABLE〈 库文件名 〉,检索结果送 〈 库文件
名 〉 (默认扩展名为,DBF)。
AND/OR〈 过滤条件 〉,本项规定了只有满足 〈 过滤
条件 〉 的记录才能被检索 。 〈 过滤条件 〉 由一系列用
AND/OR连接的条件 (可用 NOT)组成 。 每一个条件可为以
下八种形式之一,
(1)〈 字段名 1〉 〈 比较符 〉 〈 字段名 2〉 。
(2)〈 字段名 〉 〈 比较符 〉 〈 表达式 〉 。
(3)〈 字段名 〉 〈 比较符 〉 ALL(〈 子查询 〉 ):该
〈 字段名 〉 必须与所有 〈 子查询 〉 结果满足比较符才行 。
第 15章 关系数据库
(4)〈 字段名 〉 〈 比较符 〉 ANY/SOME(〈 子查
询 〉 ):该 〈 字段名 〉 只要与一个 〈 子查询 〉 结果满足
比较符即可 。
(5)〈 字段名 〉 [ NOT] BETWEEN〈 起始值 〉
AND〈 终止值 〉,给出 〈 字段名 〉 值必须在 /不在该范围
内才行 。
(6)[ NOT] EXISTS(〈 子查询 〉 ):〈 子查询 〉 必须
有真正结果才行 。
(7)〈 字段名 〉 [ NOT] IN〈 值表 〉,〈 字段名 〉 必
须是 /不是 〈 值表 〉 中的一个 。
(8)〈 字段名 〉 [ NOT] IN(〈 子查询 〉 ):〈 字段名 〉
必须是 /不是子查询结果之一 。 以上,〈 子查询 〉 也是一
条 SELECT命令 。
第 15章 关系数据库
15.9 全关系型数据库系统的
十二条基本准则简介
关系型数据库系统 (RDBMS)虽然是当前最广泛使用
的数据库系统, 但到目前为止, 还没有一个系统是全关
系型数据库系统 。 因此, 有必要制定一个全关系型数据
库系统的准则 。 下面介绍 E.F.Cold提出的十二条准则 。
只有遵循这些准则的 DBMS才是全关系型的 。
准则 0:一个 RDBMS必须能完全通过自身的关系能
力来管理数据库 。
准则 0是下面十二条准则的基础 。 不满足准则 0的
DBMS都不是 RDBMS。
第 15章 关系数据库
准则 1:信息准则 。 RDBMS的所有信息都应在逻辑一
级用同一个方法 ——表 (Table)中的值显示出来 。
准则 2:保证访问原则 。 依靠表名, 主码和列名的组
合, 应保证可以逻辑方法访问关系数据库中的每个数据项
(分量值 )。
准则 3:空值的系统化处理 。 空值是, 不知道, 或
,无意义, 的值, 它不是一个具体的值 (如零, 空字符串
等 )。
准则 4:基于关系模型的动态的联机数据字典 。 数据
库的描述在逻辑级上应和一般数据采用相同的表示方法,
使得授权用户能使用查询一般数据所用的关系语言来查询
数据库的描述信息 。
第 15章 关系数据库
准则 5:统一的数据子语言准则 。 一个关系系统可
以有几种语言和多种终端使用方法 。
准则 6:视图更新准则 。 所有理论上可更新的视图
也应该允许由系统更新 。
准则 7:高级的插入, 修改和删除操作 。 把一个基
本关系或导出关系作为单一的操作对象进行处理 。 这不
仅适合于数据检索而且适合于数据的插入和删除 。
准则 8:数据的物理独立性 。 无论数据库的数据在
存储表示或存取方法上作任何变化, 应用程序和终端活
动都保持逻辑上的不变性 。
第 15章 关系数据库
准则 9:数据的逻辑独立性 。 当对基本关系进行理论
上信息不受损害的任何变化时, 应用程序和终端活动都保
持逻辑上的不变性 。
准则 10:数据完整性的独立性 。 关系数据库的完整性
约束条件必须是用数据子语言定义并存储在数据字典中,
而不是在应用程序中定义 。
准则 11:分布独立性 。 无论是在原来的 DBMS只管理
非分布式数据 。
准则 12:无破坏准则 。 如果一个关系系统具有一个低
级 (一次一个记录 )语言, 该语言不能破坏或绕过完整性准
则和用高级关系语言表达的约束条件 。
第 15章 关系数据库
15.1 关系和关系模式 15.2关系数据库概述
15.3 关 系 代 数 15.4元组关系演算简介
15.5 域关系演算简介 15.6 三种关系运算的等价性
15.7 关系数据库标准语言 SQL
15.8 FoxPro的 SQL命令
15.9 全关系型数据库系统的十二条基本准则简介
第 15章 关系数据库
15.1 关系和关系模式
15.1.1 关系
1.
定义,给定一组域 D 1,D 2,…,D n,它们的笛
D 1× D 2× …× D n={(d 1,d 2,…,d n)|d
i∈ D i}
例 若 D 1={0,1},D 2={a,b},D 3={x,y,z},则 D
1× D 2× D 3 为,{(0,a,x),(0,a,y),
(0,a,z),(0,b,x),(0,b,y),(0,b,z),(1,a,x),(1,a,y); (1,a,z),(1,b,x),
(1,b,y),(1,b,z)} 。
第 15章 关系数据库
笛卡尔积中的每一元素 (d1,d2,…,dn)称为一个 n元组
(n--tuple),简称元组 。 元组中的每一个 di称为一个分量
( Component), 亦称属性, 分量是有序的 。
若所有的 Di都为有限集, 基数为 mi,则笛卡尔积也
为有限集, 基数为:
?
?
?
n
i
imm
1
笛卡尔积所包容的信息是十分有限的,但当研究
的对象是其子集时,情况就不同了。
第 15章 关系数据库
2,关系的数学定义
(1) 定义 。
D1× D2× …× Dn的子集称为在域 D1,D2,…,Dn上的关
系 (Relation), R(D1,D2,….,Dn) 表示 。 这里,
R是关系名, n是关系的目或度 (degree)。
关系是元组的集合 。 每个关系都有一个关系名,
每个属性也有一个属性名 。
(2) 可用一个二维表来表示一个关系 。
表名为关系名, 每一行为一个元组, 每一列为一
个属性, 每列起首标以属性名 。
第 15章 关系数据库
3,关系数据库的关系
关系数据库的关系与上述数学上的关系有所不同,
① 每一列都是不可分的数据项, 且来自同一域 。
② 每列有一个属性名, 不同列有不同的属性名,
但可出自同一域 。
③ 任意两个元组不能完全相同 。
④ 列之间的次序,行之间的次序都是不重要的。
第 15章 关系数据库
15.1.2关系模式
关系的描述称为关系模式 。 一个有名关系的关系
模式常简记为它的属性名序列 。
若一个关系的名为 R,其所有属性名分别为 A1,
A2,…,An,则关系模式记为:
R (A1,A2,…,An)
事实上, 除了上述内容外, 关系模式还应描述:
各属性的值域, 属性与域之间的映像关系, 各属性间
的数据依赖以及一组完整性约束条件 。 因此, 关系模
式的形式化定义是一个多元组 。
R(U,D,DOM,I,F)
第 15章 关系数据库
多元组中, R为关系名; U是组成 R的有限属性集;
D是各属性的值域; DOM 是属性列到域的映射; I是
一组完整性约束条件; F是属性间的一组依赖关系 。 但
一般都简化为用 R(U)表示 。
关系模式是一个框架, 是关系的结构, 不随时间而
变化的 。 关系是关系模式在某一时刻的, 当前值,, 它
是随着各元组的增删, 随着元组各属性值的改变而不断
变化的 。 实际使用中, 常把关系模式和关系统称为关系,
可根据上下文加以区分 。
一个系统中所有关系的当前值, 称为 关系数据库 。
第 15章 关系数据库
15.2 关系数据库概述
15.2.1
关系模型是用关系(即二维表)来表示实体以及
实体间的联系的。
15.2.2
关系操作指对关系进行的存储操作和检索 ( 查询 )
操作 。 关系操作有代数方式和逻辑方式两种, 即关系
代数和关系演算, 它们在功能上是等价的 。
第 15章 关系数据库
SQL( Structured Query Language,结构化查询 )
语言是一种兼有关系代数和关系演算特点的语言, 它
集查询 ( Query), 操纵 ( Manipulation), 定义
( Definition) 和控制 ( Control) 四个功能于一身, 是
一种通用的, 功能极强的关系数据库操纵语言 。 关于
SQL语言在后面的章节中将进一步介绍 。
第 15章 关系数据库
15.2.3
在讲完整性约束之前,首先要弄清数据库中的几个
概念。
(1) 关键字或码 ( Key) 。
可惟一标识关系中每一个元组的属性 ( 组 ) 称为该
关系的候选码; 若一个关系中有多个候选码, 则选取其
中一个为主关键字 ( 或叫主码 ) 。 包含在候选码中的属
性叫主属性 。
(2) 外部键或外部码 ( Foreign Key) 。
设有两个关系 R和 S,其中属性 ( 组 ) X是关系 S的
第 15章 关系数据库
关键字, 但不是关系 R的关键字, 则把 X叫做关系 R的外
部码 ( 外部键 ) 。
1,实体完整性 ( Entity Integrity)
如果一个属性是某个关系的主关键字组成部分, 则
该属性就不能取空值 。 实体完整性约束的理由是:
① 一个基本关系通常对应现实世界的一个实体集;
② 现实世界的实体是可区分的, 即它们具有某种唯
一性标识;
第 15章 关系数据库
③ 在关系模型中由主关键字作为惟一性标识;
④ 如果主关键字取空值, 说明存在某个不可标识
的实体, 这和 ② 相矛盾, 所以主关键字不能取空值 。
2,( Referential Integrity)
设有两个基本关系 R和 S,属性组 A是 S的主关键字,
是 R的外部码, 则对于 R中 S的取值只有两种可能性:
① 取空值; ② 等于 S中某个元组的主关键字值 。
第 15章 关系数据库
3,用户定义的完整性 ( User Definitional
Integrity)
实体完整性和参照完整性约束是关系数据模型的
两个最基本的完整性约束 。 而用户自定义的完整性是
针对某一个具体数据库的约束条件, 由应用环境决定,
它反映的是某一具体应用所涉及的数据必须满足的语
义要求 。
第 15章 关系数据库
15.3 关系代数
15.3.1 传统的集合运算
传统的集合运算是二目运算, 共有四种运算 。 设关
系 R和 S具有相同的目, 且相应属性都取之于同一域,
1,并 (Union)
关系 R和 S的并记为 R∪ S,其结果仍为 n目关系,由属
于 R或属于 S的元组组成。
第 15章 关系数据库
2,差 (Difference)
关系 R和 S的差记为 R-S,其结果仍为 n目关系,由属
于 R但不属于 S的元组组成。
3,交 (Intersection)
关系 R和 S的交记为 R∩S,结果仍为 n目关系, 由既
属于 R又属于 S的元组组成 。 R∩S
R∩S=R-(R-S)
4,广义笛卡尔积 (Extended Cartesian Product)
R和 S分别为 n目和 m目关系, 则其广义笛卡尔积
R× S是一个 n+m目关系 。 其元组的前 n个分量由 R的一个
元组提供, 后 m个分量由 S的一个元组提供 。
第 15章 关系数据库
15.3.2专门的关系运算
1.
(1) R为关系模式 R(A1,A2,…,An)的一个关系, 则 t∈ R
表示 t是 R的一个元组; t[ Ai] 表示 t在属性 Ai上的那个
分量 。
(2)R 和 S 分别为 n 目和 m 目关系, 且有
t1=(r1,r2,…,rn)∈ R,t2=(s1,s2,…,sm)∈ S,则此两个元组的连
串 (r1,r2,…,rn,s1,s2,…,sm)构成了另一个 n+m目关系的一个
元组 。 t1 t2
第 15章 关系数据库
(3) 若 R(A1,A2,…,An)是一个关系 。 A={A i1,…,Aij
,…,Aik},且 Aij∈ {A1,A2,…,An},则 A称为 R的一个属性列,
表示从 {A1,A2,…,An}中去掉 A后剩余的那些属性列 。 t[ A]
=(t[ Ai1],t[ Ai2],…,t[ Aik] ) 为 t在属性列 A上各分量的
集合 。
(4) 给定一个关系 R(X,Z),X和 Z都是属性组 。 当
t[ X] =x时, x在 R中的像集 (Image Set)
Zx={t[ Z] |t∈ R,t[ X] =x}
Zx表示 R中属性组 X上值为 x的所有元组在 Z上分量的集合 。
第 15章 关系数据库
2,专门的关系运算
(1) 选择 (Selection)。
已知 F是一个逻辑表达式, 运算对象为属性名 (或其
序号 )和常数, 则 σF(R)为关系 R上使 F为逻辑真的所有元
组组成的一个新关系 。
(2) 投影 (Projection)。
关系 R上的投影是根据要求从 R中选择若干属性列组
成另一关系, 然后从中去掉重复元组后得到的新关系 。
(3) 连接 (Join)。
连接也称 θ连接 。
第 15章 关系数据库
(4) 自然连接 (Natural Join)。
若 R和 S的公共属性列为 B,则 R和 S
R× S 的含义如下,首先, 求 R和 S在属性组 B上的等
值连接; 然后, 在所得关系上去掉重复属性组 B,即得
R和 S的自然连接 。
第 15章 关系数据库
15.4 元组关系演算简介
元组关系演算是以元组为变量的,
{t|φ(t)}
表示 。 式中, t为元组变量; φ(t)为原子公式或原子
公式和运算符组成的公式, 表示所有使 φ为真的元组的
集合 。
1,φ(t)的基本形式 ——
(1) R(t),R为关系名 。 意为 t是 R中的一个元组 。
(2) t[ i] θu [ j],t和 u都是元组变量, θ为算术比较符 。
公式表示 t的第 i个分量和 u的第 j个分量满足比较关系 θ。
第 15章 关系数据库
(3) t[ i] θc 或 cθt[ i],c为常数 。 表示 t的第 i个分
量与 c之间满足 θ关系 。 例如, t[ 1] >2 表示 t的
第一个分量大于 2。
2,φ(t)
φ(t)的三类运算符是算术比较符, 全称量词和存在
量词, 逻辑运算符 。
① 算术比较符的优先级最高 。
② 全称量词 。
③, ∧, ∨ 的优先级最低 。 其中,
,∨ 最低 。
第 15章 关系数据库
3,公式 φ(t)的定义
① 原子公式是公式 。
② 若 φ1为公式, φ1也为公式 。 φ1为真 (假 )时,
φ1为假 (真 )。 若 φ2也为公式, 则 φ1∧ φ2,φ1∨ φ2也
为公式 。
③ 若 φ是公式, 则 ( t)φ也是公式 。 若至少有一
个 t使 φ为真, 则 ( t)φ为真 。
④ 若 φ是公式, 则 ( t)φ也是公式 。 当所有的 t都
使 φ为真时, ( t)φ才为真 。
⑤ 在需要时,可对公式使用括号。 括号的优先
第 15章 关系数据库
15.5 域关系演算简介
域关系演算的运算符与元组关系演算相似, 但域
关系演算中的变量是元组分量, 简称域变量 。
{t1,t2,…,tk|φ (t1,t2,…,tk)}
式中, t1,…,tk为域变量, φ是由原子公式和运算符
组成的公式 。 域关系演算表达式是使得 φ为真的那些
t1,t2,…,tk所组成的元组的集合 。
第 15章 关系数据库
φ (t1,…,tk)
① R(t1,…,tk)。 其中, R为 k元关系, t1为域变量或
常数 。 R(t1,…,tk)是由分量 t1,…,tk组成的, 属于 R的元组 。
② t1 θ uj 。 ti为元组 t的第 i个分量,uj是元组 u的第 j个
分量 。 t1θ uj表示域变量 t1与 uj应满足 θ 关系 。
③ t1θ c或 c θ t1。 它表示域变量 t1与常数 c之间满足 θ
关系。
第 15章 关系数据库
15.6 三种关系运算的等价性
前面讨论三种关系运算时, 都未加任何限制 。 这
对定义的关系代数来说, 是没有问题的, 但对关系演
算有可能产生无限关系 。
安全限制的办法是定义一个有限的符号集 DOM(φ),
只有 DOM(φ)中的符号才能出现在 φ中, 才能出现在中
间结果的关系和最终结果的关系中 。
有了安全限制后, 关系代数, 元组关系演算和域
关系演算的表达能力都是等价的, 可以相互转换 。
第 15章 关系数据库
15.7 关系数据库标准语言 SQL
15.7.1 SQL语言的发展
SQL( Structured Query Language) 意为结构化查
询语言 。 它首先由 Boyceh和 Chamberlin在 1974年提出 。
1979年, 在 IBM公司的 San Jose Research Laboratory研
制成功典型的关系数据库管理系统 System R上首次运
用了 SQL语言 。
目前 ANSI正在酝酿新的 SQL标准,SQL3。 现在的
DBMS一般均参照 SQL92。
第 15章 关系数据库
15.7.2 SQL的特点
SQL的主要特点有:
1,功能一体化
与非关系模型 ( 层次, 网状模型 ) 的数据语言不同,
SQL语言集数据定义, 数据操纵, 数据控制于一体,
所以 SQL语言可以实现数据库生命周期的全部活动 。
2,语言简洁易学
SQL语言的语法简单, 容易学习和使用 。 只用 8个
动词,Create,Drop,Select,Insert,Update,Delete、
Grant,Revoke即完成了核心功能 。
第 15章 关系数据库
3,高度非过程化
用 SQL语言进行数据操作时, 用户只需提出, 做
什么,, 无需指明, 如何做,, 即用户不必了解存取
路径 。 存取路径的选择和 SQL语句的具体执行过程由
系统自动完成 。
4,关系数据库的公共语言
由于目前主要的关系型 DBMS均支持 SQL,因此
用户可将使用 SQL的技能从一个 DBMS转到另一个
DBMS,程序也可较方便地进行移植 。
第 15章 关系数据库
15.7.3 SQL语言的基本概念
SQL语言支持关系数据库的三级模式结构,如图
15 -- 3所示。
第 15章 关系数据库
图 15—3 QL支持关系数据库的三级模式结构
第 15章 关系数据库
图 15—3中, 基本表即是独立存在的表 。 每个基本表
对应一个存储文件, 一个基本表可有若干索引 。 存储文
件和索引构成了内模式 。 每一视图是从若干基本表导出
的虚表, 数据库中只存储视图的定义, 不存储视图中的
数据 。 视图也是关系 。 SQL中的一个数据库一般包含了
若干个基本表和视图 。
第 15章 关系数据库
15.7.4 SQL语句分类
1,SQL
(1)定义基本表 ——CreateTable。它的一般格式如下:
CreateTable〈 表名 〉 {〈 列名 1〉〈 类型 〉
[ NOTNULL][,〈 列名 2〉〈 类型
[ NOTNULL],..] };
其中, 表名是所要建立的基本表名, 它可以由一
个或多个属性 ( 列 ) 组成, NOTNULL选项说明该属性
不能为空 。
第 15章 关系数据库
SQL的基本数据类型如图 15—4所示。
图 15—4 SQL的基本数据类型
第 15章 关系数据库
例 1 本例在数据库中建立了一个新的, 空的基本
表, 表名为职工 。 它由职工号, 姓名, 性别, 出生日
期和婚否五个属性组成, 并且要求职工号不能为空 。
CREA TETABLE
职工号 INT NOT NULL,
姓名 CHAR(8),
性别 CHAR(2),
年龄 INT,
婚否 CHAR(4)) ;
第 15章 关系数据库
(2)修改基本表 ——ALTER TABLE
一般格式,ALTER TABLE〈 表名 〉
[ ADD〈 新列名 〉 〈 类型 〉 ]
[ MODIFY〈 列名 〉 〈 类型 〉 ] ;
其中, 表名指要修改的基本表, ADD子句用于增
加新列, MODIFY子句用于修改原有的列定义 。 注意
在修改基本表定义语句中, NOTNULL选项是不允许的 。
第 15章 关系数据库
例 2 向职工表中增加, 部门, 属性列, 数据类型为
字符型 。
ALTER TABLE职工 ADD部门 CHAR(6)
(3)建立索引 ——CREATEINDEX
一般格式,CREATE[ Unique] INDEX〈 索引名 〉
ON〈 表名 〉
(〈 列名 〉 [ 〈 ASC/DESC〉 ] [, 〈 列名 〉
[ 〈 ASC/DESC〉 ]],..);
第 15章 关系数据库
只能在基本表上建索引, 索引只供系统加速查询
使用, Unique任选项表示每一个索引只对应惟一的数
据记录 。 ASC/DEC任选项指定索引值的排列次序, 缺
省值为 ASC。
第 15章 关系数据库
例 3 给职工表按职工号建惟一索引 。
CREATE UNIQUE INDEX职工 -
ON职工(职工号)
(4) 建立视图 ——CREATEVIEW。
一般格式,CREATE VIEW〈 视图名 〉
[ (列表名 )] AS〈 SELECT语句 〉
[ 〈 列名 〉 [ withcheckoption]]
第 15章 关系数据库
其中, 列表名给出视图中列名的名字, 数目应与子
查询 SELECT子句中给出的列名一致 。 若省略, 则使用
SELECT子句中给出的列名;有 withcheckoption任选项时,
表示视图作修改插入时, 由系统检查插入或更新后的行
必须满足的条件
第 15章 关系数据库
例 4 在职工表上建立关于生产科的职工视图 。
CREATEVIEW职工 -
ASSELECT职工号, 职工名, 性别,
FROM
WHERE部门=, 生产科,
(5)删除基本表, 索引, 视图 ——DROP
一般格式,DROPTABLE〈 表名 〉
DROPINDEX〈 索引名 〉
DROPVIEW〈 视图名 〉
第 15章 关系数据库
删除基本表时, 表中的数据和建立在该表上的索
引都将自动被删除掉, 建立在此表上的视图定义虽保
留, 却无法再被引用;删除索引时, 把有关索引的描
述也从数据字典中删除 。
为了举例方便, 这里先定义一个简单的, 职工 -项
目, 数据库, 如图 15—5所示的三张表 。
第 15章 关系数据库
图 15—5,职工 -项目”数据库
第 15章 关系数据库
1,简单查询
一个 SELECT语句可以分解成三个部分:查找什么
数据, 从哪里查找, 查找的条件是什么 。 一般称只查找
一个表就可以得到答案的查询为简单查询 。
例 1 表的浏览 。
SELECT*
FROM
该语句将列出职工表的所有记录 。, *” 代表了全部
的属性列,
SELECT职工号, 姓名, 性别, 年龄, 婚否, 职称, 部
门 FROM职工
第 15章 关系数据库
15.8 FoxPro的 SQL命令
FoxPro支持 SQL。 在 FoxPro中, SQL包含如下一
些命令,
CREATE CURSOR,CREATE TABLE,CREATE
QUERY,INSERT—SQL,MODIFY QUERY,SELECT—
SQL命令等 。
1,CREATECURSOR命令
格式, CREATECURSOR〈 库文件名 〉 (〈 字段情况
清单 〉 )/FROMARRAY〈 数组名 〉
第 15章 关系数据库
2,CREATETABLE/DBF命令
格式, CREATETABLE/DBF〈 库文件名 〉 (〈 字段
情况清单 〉 )/FROMARRAY〈 数组名 〉
3,CREATEQUERY命令
格式,CREATEQUERY[ 〈 文件名 〉 /?] ;
本命令打开一个 RQBE窗,用户可交互地产生一个查
询 (SQLSELECT命令 )。
4,INSERT—SQL命令
格式 1,INSERT INTO〈 库文件名 〉 [ (〈 字段名清
单 〉 )] VALUES(〈 表达式清单 〉 )
第 15章 关系数据库
格式 2,INSERT INTO〈 库 文 件 名 〉
FROMARRAY〈 数组名 〉 /FROM MEMVAR
5,MODIFYQUERY命令
格式,MODIFYQUERY [ 〈 文件名 〉 /? ]
[ NOWAIT] 本命令打开一个 RQBE窗,用户可交互地
修改一个已存在的查询文件 (或产生之 )。 该文件的扩展
名为,QPR,可以用 DO命令执行之 。
第 15章 关系数据库
6,SELECT—SQL命令
格式, SELECT[ ALL/DISTINCT] 〈 检索项表 〉
FROM〈 库文件项表 〉 [ INTO〈 目标 〉 /TOFILE〈 文
件名 〉 [ ADDITIVE ] /TOPRINTER [ PROMPT ]
/TOSCREEN ] [ PREFERENCE〈 特征名 〉 ]
[ NOCONSOLE] [ PLAIN] [ NOWAIT] [ WHERE
〈 库文件连接条件 〉 [ AND/OR〈 过滤条件 〉 ]
[ GROUPBY〈 组合列表 〉 ] [ HAVING 〈 过滤条
件 〉 ] [ UNION [ ALL ] 〈 SELECT 命令 〉 ]
[ ORDERBY〈 列名及列号表 〉 ]
第 15章 关系数据库
本命令从一个或几个库文件中检索数据 。 本命令
既可用于命令窗或程序中,也可用于 RQBE窗,功能极为
丰富 。 若 SETTALK为 ON,执行本命令时,将显示时间及
生成记录数 。 (记录数同时送系统内存变量,..-TALLY。 )
第 15章 关系数据库
INTO〈 目标 〉,选用本项时, 〈 目标 〉 可以为
ARRAY〈 数组名 〉 ;CURSOR〈 临时文件
名 〉 ;DBF/TABLE〈 库文件名 〉 。 本项规定了检索结果
的去处 。 选用本项,则检索结果不送显示器 ;否则,送
Browse窗显示 。
(1)ARRAY〈 数组名 〉,检索结果送入此 〈 数组
名 〉 。 若 〈 数组名 〉 不存在,则自动建立之 。 (检索无结
果时,不建立该数组 。 )
(2)CURSOR〈 临时文件名 〉,检索结果送 〈 临时文
件名 〉 。
第 15章 关系数据库
(3)DBF/TABLE〈 库文件名 〉,检索结果送 〈 库文件
名 〉 (默认扩展名为,DBF)。
AND/OR〈 过滤条件 〉,本项规定了只有满足 〈 过滤
条件 〉 的记录才能被检索 。 〈 过滤条件 〉 由一系列用
AND/OR连接的条件 (可用 NOT)组成 。 每一个条件可为以
下八种形式之一,
(1)〈 字段名 1〉 〈 比较符 〉 〈 字段名 2〉 。
(2)〈 字段名 〉 〈 比较符 〉 〈 表达式 〉 。
(3)〈 字段名 〉 〈 比较符 〉 ALL(〈 子查询 〉 ):该
〈 字段名 〉 必须与所有 〈 子查询 〉 结果满足比较符才行 。
第 15章 关系数据库
(4)〈 字段名 〉 〈 比较符 〉 ANY/SOME(〈 子查
询 〉 ):该 〈 字段名 〉 只要与一个 〈 子查询 〉 结果满足
比较符即可 。
(5)〈 字段名 〉 [ NOT] BETWEEN〈 起始值 〉
AND〈 终止值 〉,给出 〈 字段名 〉 值必须在 /不在该范围
内才行 。
(6)[ NOT] EXISTS(〈 子查询 〉 ):〈 子查询 〉 必须
有真正结果才行 。
(7)〈 字段名 〉 [ NOT] IN〈 值表 〉,〈 字段名 〉 必
须是 /不是 〈 值表 〉 中的一个 。
(8)〈 字段名 〉 [ NOT] IN(〈 子查询 〉 ):〈 字段名 〉
必须是 /不是子查询结果之一 。 以上,〈 子查询 〉 也是一
条 SELECT命令 。
第 15章 关系数据库
15.9 全关系型数据库系统的
十二条基本准则简介
关系型数据库系统 (RDBMS)虽然是当前最广泛使用
的数据库系统, 但到目前为止, 还没有一个系统是全关
系型数据库系统 。 因此, 有必要制定一个全关系型数据
库系统的准则 。 下面介绍 E.F.Cold提出的十二条准则 。
只有遵循这些准则的 DBMS才是全关系型的 。
准则 0:一个 RDBMS必须能完全通过自身的关系能
力来管理数据库 。
准则 0是下面十二条准则的基础 。 不满足准则 0的
DBMS都不是 RDBMS。
第 15章 关系数据库
准则 1:信息准则 。 RDBMS的所有信息都应在逻辑一
级用同一个方法 ——表 (Table)中的值显示出来 。
准则 2:保证访问原则 。 依靠表名, 主码和列名的组
合, 应保证可以逻辑方法访问关系数据库中的每个数据项
(分量值 )。
准则 3:空值的系统化处理 。 空值是, 不知道, 或
,无意义, 的值, 它不是一个具体的值 (如零, 空字符串
等 )。
准则 4:基于关系模型的动态的联机数据字典 。 数据
库的描述在逻辑级上应和一般数据采用相同的表示方法,
使得授权用户能使用查询一般数据所用的关系语言来查询
数据库的描述信息 。
第 15章 关系数据库
准则 5:统一的数据子语言准则 。 一个关系系统可
以有几种语言和多种终端使用方法 。
准则 6:视图更新准则 。 所有理论上可更新的视图
也应该允许由系统更新 。
准则 7:高级的插入, 修改和删除操作 。 把一个基
本关系或导出关系作为单一的操作对象进行处理 。 这不
仅适合于数据检索而且适合于数据的插入和删除 。
准则 8:数据的物理独立性 。 无论数据库的数据在
存储表示或存取方法上作任何变化, 应用程序和终端活
动都保持逻辑上的不变性 。
第 15章 关系数据库
准则 9:数据的逻辑独立性 。 当对基本关系进行理论
上信息不受损害的任何变化时, 应用程序和终端活动都保
持逻辑上的不变性 。
准则 10:数据完整性的独立性 。 关系数据库的完整性
约束条件必须是用数据子语言定义并存储在数据字典中,
而不是在应用程序中定义 。
准则 11:分布独立性 。 无论是在原来的 DBMS只管理
非分布式数据 。
准则 12:无破坏准则 。 如果一个关系系统具有一个低
级 (一次一个记录 )语言, 该语言不能破坏或绕过完整性准
则和用高级关系语言表达的约束条件 。