一、关系模型简述
- 一个关系就是一个table
- 关系模型--》处理table的东西,主要由三部分组成
- 描述DB各种数据的基本结构形式(Table/relation)
- 描述table之间所可能发生的各种操作(关系运算)
- 描述这些操作应遵循的约束条件(完整性约束)
所以:关系模型的三要素为:基本结构,基本操作,完整性约束(后面详细讲述)
- 关系运算(关系模型的运算):分为关系代数运算 和 关系演算;
- 关系代数运算:基于集合的运算。每次运算的单位都是集合
- 关系演算又分为元组演算和域演算,两者基于逻辑的演算(运算符号一般有 存在,与,大小与……)
- 元组演算运算单位为元组(一般用一个字母t表示)
- 域演算运算单位为示例(一般用一堆字母比如a,b,c)
提一句:数据库语言 其实就是把抽象的语言转换为计算机能识别的语言
二、关系的定义:
表:表通俗来讲就是一个关系
表的各个部分名字
如何严格定义一个表呢?
- 首先定义列的取值范围,称为“域(Domain)”
域: 一组具有相同数据类型的值的集合。 该集合中元素的个数称为域的基数。
例如,上表中,域D1=man集合={李基,张鹏},基数=2;D2=women集合={王方,刘玉},基数=2;也可以有域D3=humen集合={李基,张鹏,王方,刘玉,李建,张睿,张峰},基数=7……
- 再定义 “元组”及所有可能组合成的元组:笛卡尔积
解释:比如笛卡尔积会存在一个元素为:{李基(从D1中任取一个),王方(从D2中任取一个),李建 (从D3中任取一个)}
上图右侧白表中 为 全部笛卡尔积,共2*2*3=12个
解释:例如元素 {李基,王方,李建 } ,这就是3-元组,李基就是一个分量
这个笛卡尔积基数为12。(2*2*3=12)
但不是所有的笛卡尔积都有意义,所以提出关系概念
比如,在上面丈夫,妻子,孩子关系中:{李基,王方,张睿}是没有意义的。
可以说:关系就是有意义的笛卡尔积
区分一下:度(degree)=有几列,基数=有几行=元祖的数目
ps:关系模式R(A,:D1,A,:D2,...,A:D,) 中属性向域的映象在很多DBMS中一般直接说明为属性的类型、长度等例如:
Student( S# char(8), Sname char(10), Ssex char(2).Sage integer, D# char(2), Sclass char(6) )
区分关系模式与关系 :
总结:定义关系的步骤:
1.指出有多少列,2.说清楚每列数据的取值范围,3,支出所有的元组 4.指出有意义的元组
三、关系的特性
1)列是同质:每一列中的分量来自同一域,是同一类型的数据
比如sex列中如果用汉字(男女)表示,就不可以用数字(1,0)表示(不是同一类型),不可以是 不男不女(域内没有)
2)不同的列可来自同一域,称其中的每一列为一个属性,不同的属性要给不同的属性名
例如:家庭这个关系的三个列可以都来自person这一个域,但需要不同的属性名(丈夫,妻子,孩子)
3)行(列)位置互换性,关系以内容区分,不依靠位置来区分
4)实际上,表并不完全等同于关系。关系是个集合,任意两个元组不能完全相同。但在实际应用中,表中会有重复的行
5)属性不可再分,又称关系第一特性
这个属性不可再分,既包含列不可再分,又包含行不可再分
四、关系上的一些重要概念
1.候选码 (唯一标识一个元祖)
关系中可能有多组候选码,比如在一个关系中: 学号可以是,身份证号可以是,姓名+手机号也可以是 ,所以提出主码。
2.主码(Primary Key)/主键 当有多个候选码时,可以选定一个作为主码。
- DBMS以主码为主要线索管理关系中的各个元组
- 例如可选定属性S#作为“学生”表的主码,也可以选定属性组(SnameSaddress)作为“学生”表的主码。选定EmpID为Employee的主码。
3.主属性与非主属性
4.外码(作用:用来连接多个表)
五、完整性
1)实体完整性:
关系的主码中的属性值不能为空值
空值
- 不知道或无意义的值,关系模型中‘?’表示
- 不能参与算术、比较、逻辑运算
- 空值特殊处理
2)参照完整性:
外码只有两种可能:空值或者关联表中主码的属性值 。(外码一致性)
3)用户自定义完整性:
用户针对具体应用环境定义的约束条件。(针对属性与属性组合)
eg,年龄在0-100之间,名字在5个字符之间……