数据库系统概论 学习笔记(二)

第二章     关系数据库

本章要点:   
          1、掌握关系模型的三个组成部分及相关的概念知识  
          2、了解关系数据结构及形式化定义的相关概念  
          3、了解关系的完整性定义  
          4、掌握关系操作各操作的含义及运算应用  
          5、熟练掌握和运用关系代数及关系演算进行运算

 

2.1 关系模型概述

一、关系模型的组成
          关系模型由以下三部分组成:关系数据结构、关系操作集合、关系完整性约束。
二、单一的数据结构:关系
三、关系操作
         1、关系操作的特点:集合操作方式,也即操作的对象和结果都是集合。
         2、关系数据语言的分类:
                                                      |————关系代数语言
                                                      |
                                                      |                                      |——元组关系演算语言
                  关系数据库语言——|————关系演算语言——|
                                                      |                                      |——域关系演算语言
                                                      |
                                                      |————SQL语言
         3、常用关系操作:
               (1)查询操作,包括:
                         集合运算:并、差、交
                         专门的关系运算:广义笛卡尔积、选择、投影、连接、除
               (2)增加、删除、修改操作
四、关系的三类完整性约束  
          (1)实体完整性;(2)参照完整性;(3)用户定义的完整性。

2。2 关系数据库结构及形式化定义

注意:在关系模型中,无论是实体还是实体之间的联系均由单一的结构类型即关系(表)来表示。是建立在集体代数的基础上的。

一、关系数据结构
1、域(Domain)
         一组具有相同数据类型的集合。例如SQL Server数据库中的数据类型我们可以看作是域。我们应该理解,最重要的问题不在于域自身是什么,而在于如何在数据库中使用域中元素,如字符和字符串、整型和实型等;另外,值null是所有可能域的成员,表明值未知或不存在。
2、笛卡尔积(Cartesian Product)
         笛卡尔积的定义:
                  D1*D2*...*Dn={(d1,d2,..., dn) | di∈Di, i=1,2,...,n}
         笛卡尔积可表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域。
3、关系
          关系表示为:R(D1, D2, … Dn),R为关系名称,n是关系的Degree。
          特殊的关系:单元关系(上式中n=1时)和二元关系(n=2时)。
          在数学上将关系定义为一系列域上的笛卡尔积的子集。这一定义与对表的定义几乎是完全相符的,唯一的区别在于我们给表中的属性赋予了名称,而关系则没有。由于表实际上就是关系,因而在关系模型中,用数学名词关系和元组来代替表和行。
         应理解之定义:
                 候选码(candidate Key)、主码(Primary Key)、主属性(Prime attribute)、非码属性(Non-key attribute)、全码(All-Key)。
         关系的三种类型:
                 基本关系(基本表或基表)、查询表和视图表。这我们可以从SQL Server和Access数据库中得知这三种类型的实例。
         基本关系的六条性质:
                (1)列是同质的(Homogeneous);(2)不同的列可出自同一个域,不同的属性要给予不同的属性名;(3)列的顺序是无所谓的;(4)任意两个元组不能完全相同,就是说表的任意两行不能完全相同;(5)行的顺序也是无所谓的,这就是为什么在sql server表中插入记录的时候为什么总是插入在最后一行的原因了;(6)分量必须取原子值,就是说每一个分量都必须是不可分的数据项。必须满足范式(Normal form)的要求。

二、关系模式
1、关系模式的定义:
         关系的描述称为关系模式,它是一个5元组,可以表示为:R(U, D, dom, F),其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,dom为属性向域的映象集合,F为属性间数据的依赖关系集合。
2、关系模式与关系的联系(实际应用中两者都称之为关系)
         关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的(不过有时我们仍需改变数据库的结构,所以只能说是相对稳定的);关系是动态的、随时间不断变化的,因为我们在不断的更新数据库中的数据。

三、关系数据库
         关系数据库有型(关系数据库模式)和值(关系模式在某一时刻对应的关系的集合)之分。在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。

2。3 关系的完整性

注意:实体完整性和参照完整性是关系模型必须满足的约束条件,也称为关系的两个不变性。

一、实体完整性(Entity Integrity)
         规则:若属性A是基本关系R的主属性(Primary Key),则属性A不能取空值。
        看到这应该不会再对SQL Server中设定为主键的属性为空时出错感到奇怪了吧?
         说明:
             (1)对象为基本关系
             (2)具有唯一标识性
             (3)主属性不能为空
二、参照完整性(Referential Integrity)
         外码(foreign Key):假设F是关系R的属性(一个或一组),但不是R的码。如果F对应于关系S的主码K,那么F就是关系R的外码。
         参照关系与被参照关系:上述中的R就是参照关系,S为被参照关系(或目标关系)。有时也可能是同一个。
         规则:若如上所述属性F是关系R的外码(对应关系S的主码K),则对于R中每个元组(表中的每行)在F上的值必须为以下两者之一
                 (1)取空值(每个都为空);(2)等于S中某个元组的主码值(也就是说值已经在K上存在)。
三、用户定义的完整性(User-defined Integrity)
         针对某一具体关系数据库定义约束条件。比如:身份证必须为15位或18位,年龄必须为整数等等。这样就无须再在应用程序中进行约束了。


2。4 关系代数

主题:
         关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是用关系的运算来表达查询的。
         运算的三大要素:运算对象、运算符、运算结果。
         运算符种类:集合运算符(∪ - ∩)、专门的关系运算符(× σ   ∏ ∞ ÷)、算术比较符(> ≥ < ≤ = ≠)和逻辑运算符(┑ ∧ ∨)。


一、传统的集合运算符
         1、并(Union):R∪S={t|t∈R∨t∈S},t属于R或t属于S。
         2、差(Difference):R-S={t|t∈R∧t不属于S}。
         3、交(Intersection):R∩S={t|t∈R∧t∈S}。
         4、广义笛卡尔积:
         一般地,如果有关系r1(R1)和r2(R2),则关系r1×r2的模式是R1和R2串接而成的R。关系r(R)中包含所有满足下列条件的元组t:若t1∈r1,t2∈r2,则t由t1和t2拼接而成,且t[R1]=t1[R1],t[R2]=t2[R2]。

二、专门的关系运算
1、选择(Selection)
         选择运算给出满足给定谓词(条件)的元组。用小写希腊字母σ来表示选择运算,而将谓词写作σ的下标,并在σ后的括号中给出作为参数的关系。记作:
         σF(R)={t|t∈R∧F(t)='True'}
         例如,我们要找出职员表中所有广东省的员工,则写作:σ籍贯='广东'(职员表)。
         通常允许在选择谓词中进行比较,使用的比较运算符是=、≠、<、≤、>和≥。另外,还可以用连词and(∧)和or(∨)将多个谓词合并成一个较大的谓词。

        在关系代数运算中我们规定,凡是涉及到与空值null的比较,其结果都是false。在SQL Server 2000中,有一个关于空值处理的数据库选项ANSI_NULLS,它规定如下:
⑴将ANSI_NULLS设置为TRUE时:所有与NULL值比较的结果都是NULL;
⑵将ANSI_NULLS设置为FALSE时:如果两个参与比较的值都是NULL,那么比较的结果将是TRUE;否则如果只有一个值是NULL,那么比较的结果将是FALSE。


2、投影(Projection)
         关系R上的投影是从R中选择出若干属性列组成新的关系,投影后会取消原有关系中的某些列或玩组。记作:
                 ΠA(R)={t[A]|t∈R}
         例如,查询职员所在的姓名和部门:Π姓名,部门(职员表)。
3、连接(Join)
         从两个关系的笛卡尔积中选取属性间满足一定条件的元组。常用的有等值连接和自然连接两种。这里要记住,自然连接需取消重复列,其它连接操作只须考虑行。

        自然连接运算的计算过程分解如下:首先,自然连接运算形成它的两个参数的笛卡尔积;接着在笛卡尔积的结果上,基于两个参数的关系模式中都出现的属性进行属性相等的选择运算;最后还要去除结果关系模式中的重复属性,即关系模式中相同的属性在连接结果中只保留一个。
4、除(Division)  
         设r(R)和s(S)是两个关系,并且S≤R,即模式S中的每个属性都在模式R中出现。关系r÷s是模式R-S上的关系,即此模式中包含所有在R中而不在S中的属性。若元组t属于r÷s,当且仅当以下两个条件同时成立:
第一:t在∏r-S(R)中;
第二:对于s中的每一个元组ts,在r中都有元组tr同时满足以下两个条件:
① tr[S]=ts; ② tr[R-S]=t
特别要注意的是:①和②的含义是说r中的元组tr不仅在S上,而且在R-S上都有相同的值!即R-S中的元组t与S中的每一个元组ts的结对就是R中的元组tr 。

2.5 关系演算

主题:关系演算是以数理逻辑中的谓词演算为基础的。是一种非过程化语言。可分为:元组关系演算和域关系演算两种。
1、元组关系演算(代表语言ALPHA)
         元组关系演算的查询表达式为:
{t | φ(t)}
即,它是所有使谓词φ(t)为真的元组t的集合。在这里我们采用的是关系的元组变量t进行运算(这里隐含着t∈r),也就是说元组关系演算的结果是符合给定条件的元组的集合,也就是一个关系。
        元组关系演算的最初定义是由Codd在1972年给出的。元组关系演算以元组变量作为谓词变元的基本对象。一种典型的元组关系演算语言是E. F. Codd提出的ALPHA语言。这一语言虽然没有实际实现,但关系数据库管理系统INGRES所用的QUEL语言是参照ALPHA语言研制的,与ALPHA十分类似。

2、域关系演算(代表语言QBE)
域关系演算的查询表达式为:
{<x1,x2,…,xn>|φ(x1,x2,…,xn)}
其中x1,x2,…,xn代表域变量,φ代表演算公式。在这里我们采用的是域变量xi进行运算(这里隐含着xi从某个属性的域里取值,而不是从某个元组中取值),域变量从属性的域中取值,而不是从整个元组中取值。域关系演算的结果是符合给定条件的域变量值序列的集合,也就是一个关系。
        域关系演算以元组变量的分量即域变量作为谓词变元的基本对象。1975年由M. M. Zloof提出的QBE就是一个很有特色的域关系演算语言,该语言于1978年在IBM370上得以实现。
QBE是Query By Example(即通过例子进行查询)的简称,其最突出的特点是它的操作方式。它是一种高度非过程化的基于屏幕表格的查询语言,用户通过终端屏幕编辑程序以填写表格的方式构造查询要求,而查询结果也是以表格形式显示,因此非常直观,易学易用。


2。6     小结

         关系数据库是学习数据库系统概论的重点,此篇章非常详尽地介绍了关系代数、关系演算的相关知识,通过学习,对快要淡忘的各种运算方法又有了进一步的了解,相信对于理论知识的加强,在以后的工作中,能更快、更好的完成各项工作内容。以下是问题综述:
1、属性是用来描述实体集的,还是用来描述实体的?  
         属性是用来描述实体集的(如表中的字段名),具体到实体集中的每个实体而言就是这些属性的具体取值(字段值)。形式化地说,实体集的属性是将实体集中的实体映射到域的函数。
  
4 、在确定用实体集还是联系集时,一个可采用的原则是什么?  
        在确定用实体集还是联系集时一个可采用的原则就是:当描述发生在实体间的行为时最好采用联系集。
  
5 、关系和表是一回事吗?  
         严格地说,关系和表不一样。关系是一系列域上的笛卡尔积的子集,是一个集合。既然关系是集合就不允许在集合中有重复的元组。按照课件的解释表可以看成是由一行一行的内容组成的一个格式,每个表有多个列,每列有唯一的列名,而每个表也有一个唯一的名字。值得注意的是在关系数据库系统中,表中允许有重复的行存在,即允许有重复的记录。
  
6、NULL是表示一个属性值非法吗?  
         不对,NULL是一个合法的属性值。它表示该属性的值为空值,空值的含义有两层意思,一是表示属性没有值;二是表示属性的值未知。当属性值未知时还有两种情况,一是值缺失,表示属性有值,但是我们目前还没有该值的信息;二是不知道该属性有没有值。
  
7、 在关系代数和SQL中对查询结果的重复行的处理一样吗?  
         不一样。关系代数的运算结果仍然是一个关系,绝对不允许重复的元组在关系代数的结果中出现。而在SQL中,去掉查询结果中的重复行是一件非常耗时的操作,因此允许在SQL的查询结果中保留重复的行。可以通过DISTINCT选项说明SQL的查询结果是否要保留重复的行。   
8 、数据库中的视图和关系有什么区别?  
         视图是虚关系,在DBMS中只保存定义视图的SQL语句,而不保存视图的具体数据。当在查询中用到视图时,DBMS会根据其保存的视图的定义(即SQL语句)来得到有关的数据。如果在DBMS中保存视图的数据,这样的视图称之为实体化视图。而关系在DBMS中不仅存储有其定义,而且还存储有实实在在的数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值