首先我们知道数据模型的三要素:数据结构,数据操作和完整性约束。
域:一组具有相同数据类型的值的集合。
笛卡儿积:给定一组域D1,D2,D3....Dn,它们之中可以有相同的域。所以这n个域的笛卡儿积可以表示为
D1xD2x...xDn={ (d1,d2,...,dn) | di属于Di,i=1,2,3,...,n }
其中每个元素(d1,d2,..dn)称为一个元组,简称元组。 每个di称为一个元组分量。
关系:D1xD2x...Dn中某个有一定定义的子集叫做在域D1,D2,...Dn上的关系,表示为R(D1,D2,...,Dn)。R为关系的名字,n是关系的目或度。
关系模型的数据结构非常简单,只包含单一的数据结构------关系。(这也是数据模型的优点,简单的数据结构)
概念模型中实体的属性,域,实体型,实体集在关系模型中分别用关系的属性,域,关系模式,关系实例来表示。
对关系中元组的分量的描述,用属性名表示,与定义关系的一组域对应。在同一关系中,属性名不能相同。
例如:学生可以用姓名,性别,年龄等属性来描述。
属性的取值范围。
不同属性可以有相同的域。(一般要求所有的域都是原子数据的集合。这种限制称为第一范式条件)
关系的描述称为关系模式。
可形式化表示为
R(U,D,Dom,F)
其中R为关系名,U为组成关系R的属性集合,D为属性组U中属性来自的域,Dom为属性向域的的映像的集合,F为属性间数据 的依赖关系集合。
关系模式通常可以表示为(A1,A2,A3,...,An),其中A1,A2,...,An为属性名,域名及属性向域的映像常常直接说明为属性的类型和长度。例如,学生(姓名,性别,年龄)
一个给定关系的某一时刻的元组的集合,即当前关系的值。关系R的实例记为r(R)。
关系模式是关系的型的描述,是静态的,稳定的。而关系实例(值)是关系的“当前”元组的集合,是动态的,随时间不断变化的,其变化通过关系的元组的改变表现出来的。
从程序设计语言角度来看,“关系”的概念对应“变量”,“关系模式”和“关系实例”相当于变量的类型定义和变量的值。
若关系中的某一属性或属性集能唯一标识一个元组,而任意一个真子集无该性质,则称为该属性或属性集为关系的候选键。(即候选键是能唯一标识一个元组的最小属性集)
例如,学生(姓名,性别,年龄),其中的姓名可以当候选键。
每个至少含有一个候选键,若一个关系有多个候选键,可以选择其中一个为主键。
包含候选键的属性集称为超键。超键能唯一标识元组,但不具有最小化性质。
若关系只有一个候选键,且这个候选键包含关系的所有属性,则称这个候选键为全键。
构成候选键的每个属性称为主属性。
不包含候选键中的属性称为非主属性。
若关系R的一个属性(集)F与关系S的主键K对应,即关系R中的某个元组的F上的值也是关系S中某个元组的Ks上的值,则称为该属性(集)F为关系R的外键。
例如,学生(学号,姓名,性别,年龄),学号为主键;
课程(课程号,课程名,先修课程号),课程号为主键;
选课(学号,课程号,成绩),其中学号和课程号为主键。
所以“课程”关系的“先修课程号”引用了“课程”关系的“课程号”属性,是“课程”关系的外键,“选课”关系中的“学号”和“课程号”又分别引用了“学生”关系和“选课”关系中的属性,也是这两个关系的外键。
当关系作为关系数据模型的数据结构时,需要给予如下的限定和扩充:
(1)限定关系数据模型中的关系必须是有限集合。
(2)通过为关系的每个属性附加一个属性名来取消元组分量的有序性。
所以归纳起来有如下性质:
1,元组个数有限性。
2,属性名唯一性。
3,属性的次序无关性。
4,元组的唯一性。
5,元组的次序无关性,即元组的顺序可以任意交换。关系是元组的集合,而不是元组的列表。
6,元组分量的原子性。
7,分量值域同一性。
从用户角度来看,关系模型的数据结构就是一张二维表,表中的每行对应一个元组,表中每列对应一个取值域。
表和关系实际上是不同的,表现在如下几方面:
(1)表中各列从左到右是有序,而关系中的属性是任意的。
(2)表中各行从上到下是有序的,而关系中元组的次序是任意的。
(3)表中可能包含重复的行,而关系中不能有重复的元组。
(4)表中至少有一个列,而关系可以存在没有任何属性,相当于空集合。
(5)表中可以包括空行,但关系中不允许。
(6)表是“平面的”或“二维的”,而关系是“n维的”,是n个域上的一个n元组的集合。
在关系模型中,数据库是由一个或多个关系组成。数据库的关系模式集合叫做关系数据库模式,或数据库模式。
在某一应用领域中,描述所有实体集及实体之间联系所形成的关系的集合就构成了一个关系数据库。