三 关系模型之基本概念

关系模型概述

关系模型研究什么

形象地说,一个关系(relation)就是一个Table

关系模型就是处理Table的,它由三个部分组成:
- 描述DB各种数据的基本结构形式(Table/Relation)
- 描述Table与Table之间所可能发生的各种操作(关系运算)
- 描述这些操作所应遵循的约束条件(完整性约束)

所以要研究,Table如何描述,有哪些操作、 结果是什么、 有哪些约束等。

关系模型的三个要素(简略)

  • 基本结构:Relation/Table
  • 基本操作:Relation Operator
    • 基本的
      • (并, UNION)
      • - (差, DIFFERENCE)
      • Χ (广义积,PRODUCT)
      • σ (选择, SELECTION)
      • (投影, PROJECTION)
    • 扩展的
      • (交,INTERSECTION)
      • ▷◁ (连接,JOIN)
      • ÷ (除, DIVISION)
  • 完整性约束
    • 实体完整性
    • 参照完整性
    • 用户自定义的完整性

关系模型与关系数据库语言的关系(简略)

关系运算 : (关系代数(基于集合的运算))和(关系演算(元组演算和域演算))

什么是关系

表的基本构成要素

表的严格定义(关系)

域(Domain)

首先定义“列”的取值范围“域(Domain)”

一组值的集合,这组值具有相同的数据类型(如整数的集合、字符串的集合、全体学生的集合,再如, 由8位数字组成的数字串的集合,由0到100组成的整数集合)

集合中元素的个数称为域的基数(Cardinality)

笛卡尔积(Cartesian Product)

再定义“元组”及所有可能组合成的元组:笛卡尔积

一组域D1, D2,..., Dn的笛卡尔积为:

D1×D2×...×Dn ={(d1 ,d2 ,...,dn)|di∈Di ,i=1,...,n}

笛卡尔积的每个元素(d1 , d2 , … , dn)称作一个n-元组(n-tuple)

  • 元组(d1 , d2 , ... , dn)的每一个值di叫做一个分量(component)
  • 元组(d1 , d2 , ... , dn)是从每一个域任取一个值所形成的一种组合,笛卡尔积是所有这种可能组合的集合, 即:笛卡尔积是由n个域形成的所有可能的n-元组的集合
  • Di的基数为mi,则笛卡尔积的基数,即元组个数为 m1Xm2X...Xmn

关系(Relation)

由于笛卡尔积中的所有元组并不都是有意义的,因此…
- 一组域D1 , D2 ,..., Dn的笛卡尔积的子集
- 笛卡尔积中具有某一方面意义的那些元组被称作一个关系(Relation)
- 由于关系的不同列可能来自同一个域,为区分,需要为每一列起一个名字,该名字即为属性名

关系模式

关系可用R(A1:D1 , A2:D2 , ... , An:Dn)表示,可简记为R(A1 , A2 , ... , An),这种描述又被称为关系模式(Schema)或表标题(Head)

R是关系的名字, Ai是属性, Di是属性所对应的域, n是关系的(degree), 关系中元组的数目称为关系的基数(Cardinality)

例如下图的关系为一3目关系,描述为

家庭(丈夫:男人,妻子:女人, 子女:儿童) 或 家庭(丈夫,妻子, 子女)

关系模式R(A1:D1 , A2:D2 , ... , An:Dn)中属性向域的映象在很多DBMS中一般直接说明为属性的类型、长度等

例如:

Student(S# char(8), Sname char(10), Ssex char(2), Sage integer, D# char(2), Sclass char(6))

Course(C# char(3), Cname char(12), Chours integer, Credit float(1), T# char(3))

SC(S# char(8), C# char(3), Grade float(1))

关系的特性

  • 列是同质:即每一列中的分量来自同一域,是同一类型的数据

  • 不同的列可来自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。

    例,我们定义一个域为Person = 所有男人、女人和儿童的集合 = {李基,张 鹏,王芳,刘玉,李健,张睿,张峰},则下述“家庭”关系的三个列将来自同 一个域Person, 因此需要不同的属性名“丈夫”“妻子”“子女”以示区分。

  • 列位置互换性、行位置互换性(无影响)

  • 理论上,关系的任意两个元组不能完全相同。(集合的要求:集合内不能有 相同的两个元素);现实应用中,表(Table)可能并不完全遵守此特性。(元组相同是指两个元组的每个分量都相同)

  • 属性不可再分特性(又被称为关系第一范式)

关系上的一些重要概念

候选码/候选键

关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码。(简言之,唯一标示)

例如: “学生(S#, Sname, Sage, Sclass)”,S#就是一个候选码,在此 关系中,任何两个元组的S#是一定不同的,而这两个元组的Sname, Sage, Sclass都可能相同(同名、同龄、同班),所以S#是候选码。

再如: “选课(S#, C#, Sname, Cname, Grade)”,(S#,C#)联合起来是一个候选码

有时,关系中有很多组候选码,例如: 学生(S#, Sname, Sage, Sclass, Saddress)其中属性S#是候选码,属性组(Sname, Saddress)也是候选码(同名同地 址的两个同学是不存在的)

再如Employee(EmpID, EmpName, Mobile)每一雇员有唯一的EmpID, 没有两个雇员有相同的手机号Mobile, 则 EmpID是候选码,Mobile也是候选码

主码/主键

当有多个候选码时,可以选定一个作为主码。

主属性与非主属性

包含在任何一个候选码中的属性被称作主属性,而其他属性被称作非主属性。

外码(Foreign Key)/外键

关系R中的一个属性组,它不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键。

关系模型中的完整性约束

实体完整性

关系的主码中的属性值不能为空值(不知道或无意义的值)。

参照完整性

如果关系R1的外码Fk与关系R2的主码Pk相对应,则R1中的每一个元组的Fk值或者等于R2中某个元组的Pk值,或者为空值。(简言之,外键要与那张表的主键对应,只能从中取,不能自己造)

用户自定义完整性

用户针对具体的应用环境定义的完整性约束条件。

比如要求名字在5个 汉字字符之内,年龄在[12, 35]之间,性别只能是“男”或“女”等。

名词总结

以家有儿女这部剧中的角色为例。

男人
夏东海
胡一统
女人
刘梅
玛丽
儿童
夏雪
夏雨
刘星

域(Domain)

一组值的集合,这组值具有相同的数据类型

D1=男人集合={夏东海,胡一统}

D2=女人集合={刘梅,玛丽}

D3=儿童集合={夏雪, 夏雨, 刘星}


基数

集合中元素的个数称为域的基数

基数就是有多少行。

D1域的基数为2

D2域的基数为2

D3域的基数为3

笛卡尔积的基数就是2 * 2 * 3 = 12


笛卡尔积

所有可能组合成的元组

男人 女人 儿童
夏东海 刘梅 夏雪
夏东海 刘梅 夏雨
夏东海 刘梅 刘星
夏东海 玛丽 夏雪
夏东海 玛丽 夏雨
夏东海 玛丽 刘星
胡一统 刘梅 夏雪
胡一统 刘梅 夏雨
胡一统 刘梅 刘星
胡一统 玛丽 夏雪
胡一统 玛丽 夏雨
胡一统 玛丽 刘星

元组

笛卡尔积的每个元素(d1 , d2 , … , dn)称作一个n-元组(n-tuple)

元组就是一行数据。

|夏东海|刘梅|夏雪|


分量

元组(d1 , d2 , ... , dn)的每一个值di叫做一个分量

夏东海是一个分量。刘梅是一个分量。夏雪是一个分量。


关系

一组域D1 , D2 ,…, Dn的笛卡尔积的子集

笛卡尔积中具有某一方面意义的那些元组被称作一个关系(Relation)

取笛卡尔积后的有意义的几行。

家庭

丈夫 妻子 子女
夏东海 刘梅 夏雪
夏东海 刘梅 夏雨
夏东海 刘梅 刘星

这是一个”家庭“关系,其他的都不能组成家庭!


属性名

由于关系的不同列可能来自同一个域,为区分,需要为每一列起一个名字,该名字即为属性名

原本是男人、女人、儿童,取名为丈夫、妻子、子女。


关系模式

关系可用R(A1:D1 , A2:D2 , … , An:Dn )表示,可简记为R(A1 , A2 , … , An ),这种描述又被称为关系模式(Schema)或表标题(head)


度或目

n是关系的度或目。
男人、女人、儿童,3个度(目)。

猜你喜欢

转载自blog.csdn.net/somniloquy_/article/details/82347242