0
点赞
收藏
分享

微信扫一扫

数据库学习笔记04——关系数据库2

有点d伤 2022-03-23 阅读 113

文章目录


第三节.关系的完整性

  • 所谓完整性是关系 需要 满足的某种约束条件,关系的值需要满足约束条件
  • 三类完整性:实体完整性、参照完整性、用户定义完整性
    • 前两个是关系模型必须满足的,称为关系的两个不变性
    • 最后一个是具体领域的具体约束

(一)实体完整性

  • 实体完整性是针对基本关系而言的,一个基本表通常对应现实世界的一个实体集,每个实体之间应该有某种唯一标识
  • 关系模型中以主码作为唯一性标识
  • 简单来说就是,候选码中的属性即主属性不能取空值

(二)参照完整性

关系间的引用

  • 实体与实体间的联系都是用关系来描述的,自然存在着关系与关系间的引用

  • 两个关系间的引用

    • 学生的专业号必须是学校有的专业号,两个专业号之间是引用关系,学生关系的专业号引用专业的专业号

    • 学生(学号,姓名,性别,专业号,年龄)

      专业(专业号,专业名)

  • 两个以上关系的引用

    • 学生(学号,姓名,性别,专业号,年龄)
    • 课程(课程号,课程名,学分)
    • 选课(学号,课程号,成绩)
  • 同一关系内部属性间的引用

    • 学生(学号,姓名,性别,专业号,年龄,班长

    • 班长引用的学生关系中的学号

外码

  • 设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码
    • R和S可以是相同的关系,也可以是不同的关系
    • S的主码Ks和F必须定义在同一个域上
    • 外码并不一定要与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别
    • 说白了就是F不是R的码但是S的码,F是R的外码,外码的作用是表示关系之间的联系

参照完整性(外码取值要求)

  • 若属性(或属性组)F 是关系R 的外码,它与关系S 的主码Ks 相对应(关系R 和S 不一定是不同的关系),则对于R 中每个元组在F 上的值必须为:

    • 或者取空值(F 的每个属性值均为空值)
    • 或者等于S中某个元组的主码值
  • 理解1:

    • 学生(学号,姓名,性别,专业号,年龄)
    • 专业(专业号,专业名)

    学生没选专业之前他的专业号就是空值,当专业确定之后专业号取值必须在专业关系中选择

  • 理解2:

    • 学生(学号,姓名,性别,专业号,年龄)
    • 课程(课程号,课程名,学分)
    • 选课(学号课程号,成绩)

    选修关系的主属性不能取空值,只能取相应被参照关系中已经存在的主码值

  • 理解3:

    • 学生(学号,姓名,性别,专业号,年龄,班长)
    • 空值表示还没有选班长
    • 非空值表示班长学号必须是本关系的学号之一

(三)用户定义的完整性

  • 例子:课程(课程号,课程名,学分)
    • “课程号”属性必须取唯一值(实体完整性)
    • 非主属性“课程名”也不能取空值(用户定义完整性,这是人为希望的,规定不能是null)
    • “学分”属性只能取值{1,2,3,4}(用户定义完整性,这是认为希望的,规定值域的范围)

第四节.关系代数

  • 关系代数是一种抽象的查询语言,它用关系运算来表达查询
  • 运算对象是关系,结果是关系,两大类:传统的集合运算符和专门的关系运算符
  • 传统的仅涉及到行,专门的涉及到行和列

(一)传统集合运算

  • 前提

    • 目(属性个数)要相同
    • 相应的属性要取自同一个域
  • 运算

    • 结果属性个数不变,有属于R或属于S的元组组成,可以换顺序

    • 一定注意:结果是一行一行的看,看哪一行不同则加到一起

    • 元组元组元组

  • 前提
    • 目(属性个数)要相同
    • 相应的属性要取自同一个域
  • 运算:
    • 属于R 而不属于S 的所有元组组成 ,不能换顺序
    • 把R中元组依次和S每一个比较,如果S没有则就是结果之一

  • 前提
    • 目(属性个数)要相同
    • 相应的属性要取自同一个域
  • 运算:
    • 既属于R又属于S的元组组成 ,可以换顺序

笛卡尔积

  • 前提

    • 严格地讲应该是广义的笛卡尔积,笛卡尔积的元素是元组
    • R: n目关系,k1个元组
    • S: m目关系,k2个元组
  • 运算

    • 实质上的拼接,前边的每一个元组与后面的元组依次拼接,不能调换顺序

      • 一共是m+n列

      • 元组的前n列是关系R的一个元组

      • 后m列是关系S的一个元组

      • k1×k2个元组

(二)专门的关系运算

基础符号

  • R,t属于R,t[Ai]
    • 设关系模式为 R(A1,A2,…,An),它的一个关系设为R
    • t属于R 表示t是一个元组
    • t[Ai] 表示元组t中属性Ai的一个分量
  • A,t[A], A取反
  • A:所有属性的一部分,称为属性列或属性组
  • t[A]=(t[Ai1],t[Ai2],…,t[Aik])表示元组 t 在属性列A上k个分量的集合
  • A非,表示把所有属性列中A的部分去掉。
  • tr连接ts(类似于广义的笛卡尔积)
  • R为n目关系,S为m目关系
  • tr 属于R,ts属于S, tr连接ts称为元组的连接
  • tr连接ts是一个n + m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组
  • 象集——
    • 给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x在R中的象集定义为Zx={ t[Z]|t∈R,t[X]=“x” }
    • 它表示R中属性组X上值为x的所有元组在Z上分量的集合
    • 即固定一个,选出与固定的这个有关的分量

选择

  • 选择又称为限制

  • 在关系R中选择满足给定条件的元组
    σ F ( R ) = t ∣ t 属 于 R ∧ F ( t ) = T r u e σF(R) = {t|t属于R∧F(t)= True} σF(R)=ttRF(t)=True

    • F:选择条件,是一个逻辑表达式,基本形式为: X1θY1

    • θ表示比较运算符,它可以是>,≥,<,≤,=或<>

    • 选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算

    • 选择就是根据要求的条件选择行来查询

投影

  • 从R中选择出若干属性列组成新的关系
    π A ( R ) = t [ A ] ∣ t I ^ R πA(R) = { t[A] | t ÎR } πA(R)=t[A]tI^R
    ​ A:R中的属性列

  • 投影操作主要是从列的角度进行运算

  • 但是有一种特殊的情况,如果只选择一个列,可能会有很多重复的分量,DBMS会自动去重,所以把重复元组就去掉了

连接

  • 连接也称为θ连接
  • 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
  • 分类:
    • 等值连接:θ为=的连接运算,从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组
    • 自然连接:是一种特殊的等值连接,把重复的属性列去掉,从行和列的角度运算
    • 一般连接:从行的角度,根据θ取值来进行连接
  • 悬浮元祖
    • 两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组
    • 外连接:
      • 如果把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接
      • 左外连接:如果只把左边关系R中要舍弃的元组保留就叫做左外连接
      • 右外连接:如果只把右边关系S中要舍弃的元组保留就叫做右外连接
      • 外连接 = 左外连接+右外连接,外连接的方法就是做一个百搭元组,把所有的分量都置成null

  • 给定关系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上投影的集合
  • 步骤:
    • 1.划分X、Y、Z,只有R有的是X,只要S有的是Z,公共的是Y
    • 求关系R中X属性各个分量在Y上的象集
    • 关系S对Y做投影
    • 包含S对Y上投影的象集对应的属性分量
  • 简而言之,最关键的三个步骤就是,划分后的求象集、找S对Y的投影,比较包含
  • 出现至少、全部等字眼用除

未完待续

举报

相关推荐

0 条评论