标题：关系模型
简介
  关系模型是1970年由E.F.Codd提出的。
它和层次、网状模型相比，有以下特点：
1.数据结构简单（二维表格）
2.扎实的理论基础。
a.关系运算理论
b.关系模式设计理论
关系模型的基本假定是所有数据都表示为数学上的关系，就是说n个集合的笛卡儿积的一个子集，有关这种数据的推理通过二值（就是说没有NULL）的谓词逻辑来进行, 这意味着对每个命题都没有两种可能的求值: 要么是真要么是假。数据通过关系演算和关系代数的一种方式来操作。关系模型是采用二维表格结构表达实体类型及实体间联系的数据模型.
关系模型允许设计者通过数据库规范化的提炼，去建立一个信息的一致性的模型。访问计划和其他实现与操作细节由DBMS引擎来处理，而不应该反映在逻辑模型中。这与SQL DBMS普遍的实践是对立的，在它们那里性能调整经常需要改变逻辑模型。
基本的关系建造块是域或者叫数据类型。元组是属性的有序多重集（multiset），属性是域和值的有序对。关系变量（relvar）是域和名字的有序对(序偶)的集合，它充当关系的表头（header）。关系是元组的集合。尽管这些关系概念是数学上的定义的，它们可以宽松的映射到传统数据库概念上。表是关系的公认的可视表示；元组类似于行的概念。
关系模型的基本原理是信息原理：所有信息都表示为关系中的数据值。所以，关系变量在设计时刻是相互无关联的；反而，设计者在多个关系变量中使用相同的域，如果一个属性依赖于另一个属性，则通过参照完整性来强制这种依赖性。
定义
关系模型：用二维表的形式表示实体和实体间联系的数据模型
网状数据库和层次数据库已经很好地解决了数据的集中和共享问题，但是在数据独立性和抽象级别上仍有很大欠缺。用户在对这两种数据库进行存取时，仍然需要明确数据的存储结构，指出存取路径。而后来出现的关系数据库较好地解决了这些问题。关系数据库理论出现于60年代末到70年代初。1970年，IBM的研究员E.F.Codd博士发表《大型共享数据银行的关系模型》一文提出了关系模型的概念。后来Codd又陆续发表多篇文章，奠定了关系数据库的基础。关系模型有严格的数学基础，抽象级别比较高，而且简单清晰，便于理解和使用。但是当时也有人认为关系模型是理想化的数据模型，用来实现DBMS是不现实的，尤其担心关系数据库的性能难以接受，更有人视其为当时正在进行中的网状数据库规范化工作的严重威胁。为了促进对问题的理解，1974年ACM牵头组织了一次研讨会，会上开展了一场分别以Codd和Bachman为首的支持和反对关系数据库两派之间的辩论。这次著名的辩论推动了关系数据库的发展，使其最终成为现代数据库产品的主流。
关系数据模型提供了关系操作的特点和功能要求，但不对DBMS的语言给出具体的语法要求。对关系数据库的操作是高度非过程化的，用户不需要指出特殊的存取路径，路径的选择由DBMS的优化机制来完成。Codd在70年代初期的论文论述了范式理论和衡量关系系统的12条标准，用数学理论奠定了关系数据库的基础。Codd博士也以其对关系数据库的卓越贡献获得了1981年ACM图灵奖。
关系数据模型是以集合论中的关系概念为基础发展起来的。关系模型中无论是实体还是实体间的联系均由单一的结构类型——关系来表示。在实际的关系数据库中的关系也称表。一个关系数据库就是由若干个表组成。
关系模式和关系的描述
关系模式是对关系的描述。
关系实际上就是关系模式在某一时刻的状态或内容。也就是说，关系模式是型，关系是它的值。关系模式是静态的、稳定的，而关系是动态的、随时间不断变化的，因为关系操作在不断地更新着数据库中的数据。但在实际当中，常常把关系模式和关系统称为关系，读者可以从上下文中加以区别。关系模式可以形式化地表示为：
R（U，D，dom，F）
R 关系名，U 组成该关系的属性名集合，D 属性组U中属性所来自的域，dom 属性向域的映象集合，F 属性间的数据依赖关系集合。例如：导师和研究生出自同一个域——人，取不同的属性名，并在模式中定义属性向域的映象，即说明它们分别出自哪个域：
dom（SUPERVISOR-PERSON）= dom（POSTGRADUATE-PERSON）=PERSON
关系模式通常可以简记为：
R (U) 或 R (A1，A2，…，An)
R 关系名，A1，A2，…，An 属性名，注：域名及属性向域的映象常常直接说明为属性的类型、长度。
关系数据库系统是支持关系模型的数据库系统。
关系模型所具有的特点是：概念单一、规范化、以二维表格表示。
关系模型的优点
（1） 数据结构单一
关系模型中，不管是实体还是实体之间的联系，都用关系来表示，而关系都对应一张二维数据表，数据结构简单、清晰。
（2） 关系规范化，并建立在严格的理论基础上
构成关系的基本规范要求关系中每个属性不可再分割，同时关系建立在具有坚实的理论基础的严格数学概念基础上。
（3）概念简单，操作方便
关系模型最大的优点就是简单，用户容易理解和掌握，一个关系就是一张二维表格，用户只需用简单的查询语言就能对数据库进行操作。
关系模型的组成
1. 关系数据结构单一的数据结构——关系
现实世界的实体以及实体间的各种联系均用关系来表示，从用户角度看，关系模型中数据的逻辑结构是一张二维表。
2. 关系操作集合常用的关系操作包括查询操作和插入、删除、修改操作两大部分。其中查询操作的表达能力最重要，包括：选择、投影、连接、除、并、交、差等。
关系模型中的关系操作能力早期通常是用代数方法或逻辑方法来表示，分别称为关系代数和关系演算。关系代数是用对关系的代数运算来表达查询要求的方式；关系演算是用谓词来表达查询要求的方式。另外还有一种介于关系代数和关系演算的语言称为结构化查询语言，简称SQL。
3. 关系的数据完整性包括：域完整性、实体完整性、参照完整性和用户自定义的完整性。
域完整性：指属性的取值范围，如性别取值应为男或女。
实体完整性(Entity Integrity)规则：若属性A是基本关系R的主属性，则属性A不能取空值。例如：在课程表（课程号，课程名，教师，周课时数，备注）中，“课程号”属性为主键，则“课程号”不能取相同的值，也不能取空值。
参照完整性规则：若属性（或属性组）F是基本关系R的外键，它与基本关系S的主键Ks相对应（关系R和S不一定是不同的关系），则对于关系R中每个元组在属性F上的值必须为：
1.或者取空值（F中的每个属性值均为空）；
2.或者等于S中某个元组的主键值。
例如：职工（职工号，姓名，性别，部门号，上司，工资，佣金）
部门（部门号，名称，地点）
其中职工号是“职工”关系的主键，部门号是外键，而“部门”关系中部门号是主键，则职工关系中的每个元组的部门号属性只能取下面两类值：
第1类：空值，表示尚未给该职工分配部门；
第2类：非空值，但该值必须是部门关系中某个元组的部门号值，表示该职工不可能分配到一个不存在的部门中，即被参照关系“部门”中一定存在一个元组，它的主键值等于该参照关系“职工”中的外键值。
域完整性、实体完整性和参照完整性是关系模型中必须满足的完整性约束条件，只要是关系数据库系统就应该支持域完整性、实体完整性和参照完整性。除此之外，不同的关系数据库系统根据其应用环境的不同，往往还需要一些特殊的约束条件，用户定义的完整性就是对某些具体关系数据库的约束条件。例如：选课表（课程号，学号，成绩），在定义关系选课表时，我们可以对成绩这个属性定义必须大于等于0的约束。
二维表格的基本术语
1.二维表格关系模型中，字段称为属性，字段值称为属性值，记录类型称为关系模型。关系模式名是R。记录称为元组，元组的集合称为关系或实例。一般用大写字母A、B、C、……表示单个属性，用小写字母表示属性值。关系中属性的个数称为“元数”，元组的个数称为“基数”。例子的关系元数为5，基数为2。有时也称关系为表格，元组为行，属性为列。
2.键键由一个或几个属性组成，分为以下几种：
a.超键：在关系中能唯一标识元组的属性集称为关系模式的超键。 中国网管联盟
b.候选键：不含多余属性的超键称为候选键。即在候选键中，若要再删除属性，就不是键了。
c.主键：用户选作元组标识的一个候选键称为主键。一般情况下，键指主键。
3.关系的定义和性质关系是个元数为K（K>=1）的元组的集合。
关系是一种规范化的表格，他有以下限制：
a.关系中的每一个属性值都是不可分解的。
b.关系中不允许出现相同的元组。
c.关系中不考虑元组之间的顺序。
d. 元组中属性也是无序的。
关系模式、关系子模式和存储模式
关系模型中，概念模式是关系模式的集合，外模式是关系子模式的集合，内模式是存储模式的集合。
1.关系模式
关系模式实际就是记录类型，包括：模式名、属性名、值域名及模式的主键。他不涉及物理存储方面的描述，只是对数据特性的描述。
2.关系子模式
子模式是用户所用到的那部分数据的描述。除了指出用户的数据外，还应指出模式和子模式之间的对应性。 中国.网管联盟 
3. 存储模式
关系存储时的基本组织方式是文件，元组是文件中的记录。由于关系模式有键，因此存储一个关系能用散列方法或索引方法实现。
关系模型的三类完整性规则
1.实体完整性规则
这条规则需求关系中元组在组成主键的属性上不能有空值。如有空值，那么主键值就起不了唯一标识元组的作用。
2. 参照完整性规则 
如果属性集K是关系模式R1的主键，K也是关系模式R2的外键，那么在R2的关系中，K的取值只允许有两种可能，或为空值，或等于R1关系中某个主键值。
使用时应注意：
a.外键和相对应的主键能不同名，只要定义在相同的值域上即可。
b.R1和R2也能是同一个关系模式，表示了属性之间的联系。
c. 外键值是否允许为空，应视具体问题而定。
3.用户定义的完整性规则
这是针对具体数据的约束条件，由应用环境而定。
关系模型的形式定义
一、三个组成部分：数据结构、数据操作和完整性规则。　
1. 关系模型的基本数据结构就是关系。
2. 关系运算分为关系代数和关系演算。
3.关系模型的三类完整性规则。
二、关系代数
关系数据库的数据操作分为查询和更新两类。查询语句用于各种检索操作，更新操作用于插入、删除和修改等操作。
关系查询语言根据其理论基础的不同分成两大类：
1.关系代数语言：查询操作是以集合操作为基础运算的DML语言。
2.关系演算语言：查询操作是以谓词演算为基础运算的DML语言。
关系代数的五个基本运算
关系代数是以关系为运算对象的一组高级运算的集合。关系定义为元数相同的元组的集合。集合中的元素为元组，关系代数中的操作可分为两类：
传统的集合操作：并、差、交、笛卡尔积。
扩充的关系操作：投影，选择，联接和自然联接，除。
1.并
设有两个关系R和S具有相同的关系模式，R和S的并是由属于R和S的元组构成的集合，记为R∪S。
注意：R和S的元数相同。 中国网管联盟 
2.差
设有两个关系R和S具有相同的关系模式，R和S的差是由属于R但不属于S的元组构成的集合，记为R－S。
注意：R和S的元数相同。
3.笛卡尔积
设关系R和S的元数分别为r和s。定义R和S的笛卡尔积是个(r+s)元的元组集合，每个元组的前r个分量(属性值)来自R的一个元组，后s个分量来自S的一个元组，记为R×S。
若R有M个元组，S有n个元组，则R×S 有m×n个元组。
4.选择
从关系中找出满足给定条件的所有元组称为选择。其中的条件是以逻辑表达式给出的 ，该逻辑表达式的值为真的元组被选取。这是从行的角度进行的运算，即水平方向抽取元组。经过选择运算得到的结果能形成新的关系，其关系模式不变，但其中元组的数目小于或等于原来的关系中的元组的个数，他是原关系的一个子集。
记为： δF（R）≡{t?t属于R∧F(t)=true}
5.投影
从关系中挑选若干属性组成的新的关系称为投影。这是从列的角度进行运算。经过投影运算能得到一个新关系，其关系所包含的属性个数往往比原关系少，或属性的排列顺序不同。如果新关系中包含重复元组，则要删除重复元组。 中国网管论坛 
记为：∏A（R）={t[A] ?t属于R} A为R中的属性列。
例如： ∏3，1（R）
关系代数的四个组合操作
1.交
关系R和S的交是由属于R又属于S的元组构成的集合，记为R∩S。R和S需求定义在相同的关系模式上。
R∩S≡ {t?t属于R∧t属于S}，R和S的元数相同。
2.联接
联接有两种：θ联接和F联接(θ是算术比较符，F是公式)。
⑴ θ联接
θ联接是从关系R和S的笛卡尔积中选取属性值满足某一θ操作的元组，记为：
R?×i θj?S，这里i和j 分别是关系R和S中第 i个、第j个属性的序号。
R?×i θj?S≡ δi θ (r+j)（ R×S ）
如果θ是等号“=”，该联接操作称为“等值联接”。
⑵F联接
F联接操作是从关系R和S的笛卡尔积中选取属性值满足某一公式F的元组，记为：
R?×F?S，这里的F是形为F1∧F2∧…∧Fn的公式，每一个f都是形为i θj的式子，而i和j 分别是关系R和S中第 i个、第j个属性的序号。 
中国网管联盟
3.自然联接
两个关系R和S的自然联接用R?×?S表示。具体计算过程如下：
①计算R×S
②设R和S的公共属性是A1，……，Ak，挑选R×S中满足R .A1=S.A1,……，R.Ak=S.Ak的那些元组
③去掉S.A1,……， S.Ak的这些列。
如果两个关系中没有公共属性，那么其自然联接就转化为笛卡尔积操作。
4.除法
给定关系R(X,Y)和S(Y,Z)，其中X，Y，Z为属性组。R中的Y和S中的Y能有不同的属性名，但必须出自相同的域集。R和S的除运算得到一个新的关系P(X)，P是R中满足下列条件的元组在X属性上的投影：元组在X上分量值x的象集YX包含S在Y上投影的集合。
关系代数表达式及其应用实例
在关系代数运算中，把由五个基本操作经过有限次复合的式子称为关系代数表达式。这种表达式的结果仍然是个关系。能使用关系代数表达式表示各种数据查询操作。
例题：设教学库中有三个关系：
学生关系S(S#，SNAME，AGE，SEX) 
学习关系SC(S#，C#，GRADE) 
课程关系C(C#，CNAME，TEACHER) 
下面用关系代数表达式表达各个查询语句
1.检索学习课程号为C2的学生学号和成绩。
2.检索学习课程号为C2的学生学号和姓名。
3.检索选修课程名为MATHS的学生学号和姓名。
4.检索选修课程号为C2或C4的学生学号。
5.检索至少选修课程号为C2或C4的学生学号。
6.检索不学C2课的学生姓名有年龄。
7.检索学习全部课程的学生姓名。
1. ∏S#，GRADE（δC#=‘C2’（SC）)
或∏1，3（δ2=‘C2’