关系数据库基础.ppt
数 据 库 原 理 及 应 用(SQL Server 2005),第2章关系数据库基础,第2章关系数据库基础,任务目标:了解数据模型的分类,掌握关系模型的组成及相关概念;了解关系代数的基础知识,能运用关系代数进行传统的集合运算和专门的集合运算;掌握关系完整性的相关知识,能够对关系进行实体完整性、参照完整性和用户定义完整性约束;掌握关系规范化理论,能够使用1NF、2NF和3NF对关系进行规范化。,第2章关系数据库基础,2.1 关系模型的基本概念2.2 关系数据的基本运算2.3 关系的完整性2.4 关系规范化理论习题,2.1 关系模型的基本概念,2.1.1 关系模型,在数据库中,有些数据实体之间存在着某种联系,用来描述这些数据实体间关联形式的模型叫做数据模型。在数据库技术领域中,较为经典的数据模型有三种,分别是:层次模型;网状模型;关系模型,采用二维表结构描述数据实体间的关联,以记录组或数据表的形式组织数据,以便于利用各种地理实体与属性之间的关系进行存储和变换,不分层也无指针,是建立空间数据和属性数据之间关系的一种非常有效的数据组织方法。,2.1 关系模型的基本概念,2.1.1 关系模型,关系模型和层次、网状模型相比,有以下特点:1)数据结构简单(二维表)2)扎实的理论基础 3)关系运算 4)关系模式的数据独立性强 关系模型由三部分组成:关系数据结构;关系数据操作;关系数据完整性约束。,2.1 关系模型的基本概念,2.1.2 关系基本概念,在关系和关系数据库的学习中,需要先学习以下术语和相关概念。1.域域是一组具有相同数据类型的值的集合。2.元组关系中的每个元素是关系中的元组,可以用来表示一个实体。3.关系关系是一个规范化的二维表,表的每一行对应一个元组,表的每一列对应一个域,由于域可以相同,为了加以区分表中的列,必须对每列起一个名字,称为属性。,2.1 关系模型的基本概念,基本的关系满足以下特性:关系(二维表)中的每一行对应一个元组,即一个实体;表的每一列对应某个实体的一个属性。关系中的元组(实体)不能完全相同。关系中的属性名称不能重复。关系中的元组次序和属性次序可以互换。关系中的每个属性都是不可再分解的数据项。关系的属性中必须有一个是关键字,用来唯一标识一个实体。,2.1.2 关系基本概念,2.1 关系模型的基本概念,例:学生选课系统中,其概念模型中有学生实体、课程实体以及选课联系。,2.1.2 关系基本概念,关系选课,关系课程,关系学生,2.1 关系模型的基本概念,4.属性 描述实体或者联系的特性的列名称为属性,属性分为主属性和非主属性。主属性:主码的各个属性。非主属性:除了主属性之外的属性。例如,关系Student中的studentID、studentName、Sex是关系Student的属性。在关系Student的各属性中,主属性有studentID,非主属性有studentName和Sex。关系Course中的courseID、coursename、typename是关系Course的属性。在关系Course的各属性中,主属性有courseID,非主属性有coursename和typename。,2.1.2 关系基本概念,2.1 关系模型的基本概念,5.属性值 描述实体或者联系的具体数据称为属性值。属性值的取值范围是域。例如,关系Student中的20100101,20100105,张小丽,张国强,女,男等都是关系Student的属性值。关系Course中的342101,342103,C语言程序设计,数据库应用,专业课,基础课等都是关系Course的属性值。关系Student_Course中的20100102,20100108,342104,342101,70,81等都是关系Student_Course的属性值。,2.1.2 关系基本概念,2.1 关系模型的基本概念,6.关系型关系表的所有列标题,即所有属性名。例如,关系Student的关系型可表示成为:(studentID,studentName,Sex)关系Course的关系型可表示成为:(courseID,coursename,typename)关系Student_Course的关系型可表示成为:(studentID,courseID,Grade),2.1.2 关系基本概念,2.1 关系模型的基本概念,7.关键字 关系中用来唯一标识一个实体的某个属性或属性组。每个关系只能有一个关键字,又被称为主码或主键。例如,关系Student中的关键字是studentID属性。关系Course中的关键字是courseID属性。关系Student_Course中的关键字是studentID和courseID属性组,原理与关系Student_Course主属性的选取一样。,2.1.2 关系基本概念,2.1 关系模型的基本概念,8.外关键字 关系中用的某个属性或属性组不是本关系的关键字,而是另一个关系的关键字,又被称为外码或外键。例如,关系Student_Course中的studentID属性和courseID属性都是外关键字。在关系Student和关系Student_Course中没有外关键字。9.候选码 候选码是指可以作为关键字的属性或属性组。候选码可以有多个,可从候选码中选取一个或部分作为关键字。,2.1.2 关系基本概念,2.1 关系模型的基本概念,10.关系模式 用来描述关系的关系名称。关系模式通常可以简记为:关系名(属性名1,属性名2,属性名n)。如,学生关系模式通常可以简记为:Student(studentID,studentName,Sex)课程关系模式通常可以简记为:Course(courseID,coursename,typename)选课关系模式通常可以简记为:Student_Course(studentID,courseID,Grade),2.1.2 关系基本概念,2.1 关系模型的基本概念,1.关系数据库 关系数据库是指在一个给定的现实世界应用领域中,用于描述实体及实体之间联系的所有关系表的集合。2.关系数据库系统 采用关系数据模型构造的数据库系统,被称为关系数据库系统。关系数据库系统是目前使用最为广泛的数据库系统。,2.1.3 关系数据库,2.2 关系数据的基本运算,关系数据的运算是以关系代数为基础的。关系代数是一种抽象的查询语言,用于对关系的运算来表达各种操作,其运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括四类:集合运算符(并、差、交、笛卡尔积);专门的关系运算符(选择、投影、连接);算术比较符(大于、小于、等于、大于等于、小于等于、不等于);逻辑运算符(与、或、非)。,2.2.1 关系代数,2.2 关系数据的基本运算,比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的,所以关系代数的运算按运算符的不同主要分为传统的集合运算和专门的关系运算两类。,2.2.1 关系代数,专门的关系运算符,传统的集合运算符,2.2 关系数据的基本运算,传统的集合运算是二目运算。假设有两个关系R和S,t是元组变量,关系R为学习成绩优秀的学生,关系S为心理素质优秀的学生,分别如表2-6和表2-7所示。,2.2.2 传统的集合运算,表2-7心理素质优秀的学生关系S,表2-6 学习成绩优秀的学生关系R,2.2 关系数据的基本运算,2.2.2 传统的集合运算,1.并运算 任务 2-1 对以上R和S两个关系进行并运算。任务分析:按照学习成绩优秀的学生关系和心理素质优秀的学生关系,可知并运算RS表示学习成绩优秀或心理素质优秀的学生,可以得到RS的关系如下表2-8所示。,表2-8 并运算后的新关系,2.2 关系数据的基本运算,2.差运算 任务 2-2 对以上R和S两个关系进行差运算。任务分析:按照学习成绩优秀的学生关系和心理素质优秀的学生关系,可知差运算R-S表示学习成绩优秀的学生但心理素质没有达到优秀的学生,可以得到R-S的关系如下表2-9所示。,2.2.2 传统的集合运算,表2-9 差运算后的新关系,2.2 关系数据的基本运算,3.交运算 任务 2-3 对以上R和S两关系进行交运算。任务分析:按照学习成绩优秀的学生关系和心理素质优秀的学生关系,可知交运算RS表示学习成绩优秀同时心理素质也优秀的学生,可以得到RS的关系如下表2-10所示。,2.2.2 传统的集合运算,表2-10 差运算后的新关系,2.2 关系数据的基本运算,4.笛卡儿积运算 任务 2-4 假如在学生选课系统中,学生关系R如表2-11所示,选课关系S如表2-12所示,对以上R和S两关系进行交运算。任务分析:笛卡儿积是关系的连接,在形成的新关系中前m个属性来自R,后n个属性来自S,即新关系的属性为m+n;关系R的元组个数为a,关系S的元组个数为b,则新关系的元组个数为ab。,2.2.2 传统的集合运算,2.2 关系数据的基本运算,2.2.2 传统的集合运算,表2-13 笛卡儿积RS,表2-11 学生关系R,表2-12选课关系S,2.2 关系数据的基本运算,1选择运算 选择又称为限制。它是在关系R中选择满足给定条件的元组。任务 2-5 使用选择运算从学生关系R中选择男学生,学生关系R如表2-14所示。任务分析:运算过程中选择性别条件为“男”的元组组成新关系。进行过选择运算后的新关系如表2-15所示。,2.2.3 专门的关系运算,表2-14 学生关系R,表2-15 选择运算后新关系,2.2 关系数据的基本运算,2投影运算 关系R上的投影是从R中选择出若干属性列组成新的关系。任务 2-6 使用投影运算从表2-15所示关系中运算出学生姓名和性别情况。任务分析:运算过程中选择表2-15所示关系的“姓名”和“性别”情况组成新关系。进行过投影运算后的新关系如表2-16所示。,2.2.3 专门的关系运算,表2-16 选择运算后的新关系,2.2 关系数据的基本运算,3连接运算 连接也称为连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组,形成一个新的关系。连接分为两种:1)等值连接;等值连接是在关系R和关系S的连接中,比较条件为等于,则在笛卡儿积中,按等于的比较条件进行选择。2)自然连接。自然连接是一种特殊的等值连接,它要求两个关系R和S中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。此时,可以将自然连接运算过程理解为先进行等值连接,再去处重复属性列。,2.2.3 专门的关系运算,2.2 关系数据的基本运算,等值连接 任务2-7 学生、选课和课程关系如表2-17、表2-18和表2-19所示,使用等值连接进行关系运算。任务分析:以选课表中的courseID和studentID条件进行等值连接,观察等值连接的结果是具有重复属性的新关系。新关系如表2-20所示。,2.2.3 专门的关系运算,表2-17 学生关系(Student),表2-18选课关系(Student_Course),表2-19 课程关系(Course),2.2 关系数据的基本运算,2.2.3 专门的关系运算,表2-20 等值连接关系,2.2 关系数据的基本运算,2.2.3 专门的关系运算,表2-21 自然连接关系,自然连接 自然连接是一种特殊的等值连接,它要求两个关系R和S中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。此时,可以将自然连接运算过程理解为先进行等值连接,再去处重复属性列。任务2-8 根据任务2-7的结果,进行自然连接。任务分析:自然连接运算过程理解为先进行等值连接,再去处重复属性列。因此,可以在表2-20的基础上去处重复列。其结果如表2-21所示。,2.3 关系的完整性,任意一个关系通常对应现实世界的某一个实体,如学生关系对应于学生的集合,课程关系对应课程的集合。现实世界中的实体是可区分的,即它们具有自身特定的标识。相应地,关系模型中以主码作为唯一性标识。主属性不能取空值,即不能是“不知道”或“无意义”的值。如果主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与实体的定义相矛盾。实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。,2.3.1 实体完整性,2.3 关系的完整性,任务2-9 建立表“学生”,其中的属性“课程号”为主码,该主码唯一且不能为空。使用T-SQL语言定义“学生”表。任务分析:T-SQL语言的相关知识将在本书第五章介绍,此处从T-SQL语言定义数据表的角度帮助读者理解实体完整性规则。使用T-SQL语言创建某表“课程”的语句如下:CREATE TABLE COURSE(courseID char(8)NOT NULL PRIMARY KEY,coursename varchar(20)null,typename varchar(18)null)从表的定义中可以看到“courseID char(8)NOT NULL PRIMARY KEY”,对“课程”表的主属性“PRIMARY KEY”指明了“NOT NULL”。依据以上T-SQL语句进行了表的创建后,当有基于此表的数据输入、修改等操作时,数据库管理系统自动对输入和修改的数据进行检查,从而可以保障数据的有效性。,2.3.1 实体完整性,2.3 关系的完整性,实体与实体之间往往存在某种依存关系,这种依存关系叫做联系。在关系模型中实体及实体间的联系都是用关系来描述的,这样就自然存在着关系与关系间的引用,即关系参照的完整性。在一个关系模型中,关系R中的外码对应另一个关系S的主码(关系R和S不一定是不同的关系),关系R中外码的取值要参照另一个关系S主码的取值。此时,R为参照关系,S为被参照关系。参照完整性规则:定义外码与主码之间的引用和参照规则,参照关系的外码取值不能超出被参照关系的主码取值。,2.3.2 参照完整性,2.3 关系的完整性,任务2-10 新建一个关系“选课”,与任务2-9中关系“课程”形成参照关系和被参照关系,此时“选课”中外码courseID的值不能超过“课程”中courseID的值。使用T-SQL语言定义参照完整性。任务分析:T-SQL语言的相关知识将在本书第五章介绍,此处从T-SQL语言实现参照完整性约束的角度帮助读者理解参照完整性。使用T-SQL语言创建某表“选课”的语句如下:CREATE TABLE Student_Course(studentID char(10)NOT NULL,courseID char(8)NOT NULL,Grade Tinyint,PRIMARY KEY(studentID,courseID),FROEIGN KEY(courseID)REFERENCES Course(courseID)当对“选课”中插入数据时,数据库管理系统检查其插入的courseID值是否在“课程”的courseID属性值中,如果存在则可插入,如不存在则不能插入。,2.3.2 参照完整性,2.3 关系的完整性,2.3.3 用户定义完整性,实体完整性和参照性适用于任何关系数据库系统,而用户自定义的完整性规则是针对某一具体数据库的约束条件。不同的关系数据库系统根据其应用环境的不同,往往需要一些特殊的约束条件,用户定义的完整性就是针对某一具体关系数据库进行的条件约束,它反映的是具体应用所涉及的数据所须满足的要求。关系模型应能提供定义和检验这类完整性的机制,以便用统一的处理这些条件要求。因此,在实际应用中,应用程序的编程人员不需考虑这类完整性规则。,2.3 关系的完整性,任务2-11 对关系“学生”,其中的属性“性别”的取值范围必须满足“男”或“女”,使用T-SQL语言定义用户完整性约束(CHECK约束)。任务分析:T-SQL语言的相关知识将在本书第五章介绍,此处从T-SQL语言实现用户定义完整性约束的角度帮助读者理解用户定义完整性。使用T-SQL语言创建某表“学生”的语句如下:CREATE TABLE STUDENT(studentID char(10)NOT NULL PRIMARY KEY,studentName varchar(10)NOT NULL,Sex char(2)NULL CHECK(Sex=男 OR Sex=女))在对关系“学生”进行数据输入的时候,数据库管理系统自动检查所输入性别对应的值,所输入的Sex值只可能是“男”或者是“女”两种情况之一。,2.3.3 用户定义完整性,2.4 关系规范化理论,在数据库设计过程中,需要考虑到针对具体问题构造适合于这个问题的数据库模式,即在该数据库设计过程中应该构造几个关系模式,每个关系由哪些属性组成等。这是数据库设计的问题,确切地讲是关系数据库逻辑设计问题。关系数据库逻辑设计的好坏与其所含的各个关系模式设计的好坏相关。如果各个关系模式结构合理、功能简单明确、规范化程度高,就能确保所建立的数据库具有较少的数据冗余、较高的数据共享度、较好的数据一致性,并为数据库系统能够很好的应用于实际打下良好基础。不规范的关系设计会增大系统在运行过程中的数据冗余,进而可能由数据冗余为整个数据库系统带来其他运行的障碍。同时,还会带来数据的删除异常和插入异常等问题。因此,关系的规范化在数据库设计中起着很重要的作用。,2.4 关系规范化理论,在关系模式设计中,经常会遇到某一属性还具有子属性的情况。此时,可对其进行规范化,使其满足第一范式。1NF定义:设关系R,则关系R中所有属性不可再分,即消除非原子属性分量。例如:在关系“学生”中有“电话”属性,电话属性可能有家庭电话、手机、宿舍电话等子属性。如表2-22所示。,2.4.1 第一范式1NF,表2-22 学生信息表,2.4 关系规范化理论,2.4.1 第一范式1NF,任务 2-12 对以上关系进行规范化,使其满足1NF。任务分析:家庭电话、手机、宿舍电话三个属性属于“电话”属性的子属性。此时,可将“电话”属性进行分解。结果如表2-23所示。,表2-22 满足1NF的学生信息表,2.4 关系规范化理论,2.4.2 第一范式2NF,在关系模式设计中,如果非主属性存在对主码的部分函数依赖,则不满足2NF。此时,可对其进行规范化,使其满足第二范式。2NF定义:设关系R,则关系R中所有非主属性需完全函数依赖每个主码,即消除非主属性对主码的部分函数依赖。例如:假如某设计人员将学生“选课”关系设计为“Student_Course(studentID,studentName,Sex,courseID,coursename,typename,Grade)”,主码为studentID和courseID,则此时存在非主属性对主码的部分函数依赖。可能产生的问题:数据冗余:不同课程同一个选课学生的学生姓名、性别信息存在数据冗余。即一个学生可能选了多门课程,则在这个学生对应的多个课程实体中,存在大量学生姓名、性别的数据冗余。插入异常:如果有某门课程没有学生进行选择,则导致该门课程的信息无法正常插入,造成插入异常。删除异常:如果某学生只选择了一门课程,则在删除该门课程信息时,导致学生信息也被删除,造成删除异常。更新异常:更新过程实际是删除和插入过程的结合,所以也会带来更新异常。,2.4 关系规范化理论,2.4.2 第一范式2NF,任务 2-13 对以上关系进行规范化,使其满足2NF。任务分析:可以发现存在两种非主属性。一种是“Grade”,它完全由studentID和courseID同时决定,它对主码是完全函数依赖,另一种是“studentName,Sex,coursename,typename”,它们对主码并不是完全函数依赖,比如studentName只由studentID决定,而coursename只由courseID决定。此时,可将“选课”关系分解为两个关系:Student_Course(studentID,courseID,Grade)主码:studentID,courseIDCourse(courseID,coursename,typename)主码:courseID这样,两个新关系中的非主属性就分别完全函数依赖于各自的关系主码,从而达到了2NF。,2.4 关系规范化理论,在关系模式设计中,如果非主属性存在对主码的传递函数依赖,则不满足3NF。此时,可对其进行规范化,使其满足第三范式。3NF定义:设关系R,则关系R中所有非主属性需不传递函数依赖每个主码,即消除非主属性对每个主码的传递函数依赖。例如:假如某设计人员将“课程”关系设计为“Course(courseID,coursename,CoursetypeID,typename)”,主码为courseID,则此时存在非主属性对主码的传递函数依赖。可能产生的问题:数据冗余:同一课程类型的多门课程对应的类型名称存在数据冗余。即可能多门课程属于同一课程类型,此时,同一类型多门课程对应实体中存在课程类型名称的数据冗余。插入异常:在某课程类型没有对应课程的情况下,无法正常插入课程类型信息,造成插入异常。删除异常:某类型课程只有一门对应课程,当删除该课程信息时,导致删除课程类型信息,造成删除异常。更新异常:更新过程实际是删除和插入过程的结合,所以也会带来更新异常。,2.4.3 第三范式3NF,2.4 关系规范化理论,任务 2-14 对以上关系进行规范化,使其满足3NF。任务分析:可以发现“课程”关系中的主码courseID决定CoursetypeID,而CoursetypeID决定非主属性typename,即非主属性typename通过CoursetypeID传递函数依赖主码courseID,达不到3NF。此时,可将“课程”关系分解为两个关系,取消其传递依赖:Course(courseID,coursename,CoursetypeID)主码:courseIDCoursetype(coursetypeID,typename)主码:coursetypeID这样,由于分解为两个新关系,则取消了原有关系之间的传递依赖,且新关系中也不存在其他传递依赖,从而达到了3NF。,2.4.3 第三范式3NF,2.4 关系规范化理论,在关系模式设计中,如果不是每一个决定因素都包含关键字,则不满足BCNF。BCNF定义:设关系R,则关系R中所有属性都不传递函数依赖每个候选码,即消除属性对候选码的传递函数依赖。BC范式的要求比第三范式更加严格,是改进的第三范式。第三范式只关注非主属性和关键字之间的传递函数依赖关系,而BC范式则关注所有属性和每个候选码之间的传递函数依赖。当一个关系模式中有多个候选码,并且这些候选码具有公共属性时,就不能够满足BC范式。由此可见,满足BC范式的关系模式一定满足第三范式,但满足第三范式的关系模式不一定满足BC范式。,2.4.4 BC范式BCNF,2.4 关系规范化理论,2.4.5 关系规范化的实际应用,第2章关系数据库基础,本章小结:关系模型、关系基本概念;关系数据库基本运算;关系规范化。,Thank You!,