1、第一章 数据库系统概论,1.1 数据处理技术发展经历 数据(data)是人们描述客观事物及其活动的抽象符号表示,是人们相互之间进行思想文化交流的工具。 数据处理(data processing)是人们利用手工或机器对数据进行加工的过程。对数据进行的查找、统计、分类、修改、变换等运算都属于加工。,1.1.1 人工管理阶段 计算机只能用于科学和工程计算,计算机专业人员按用户计算要求编制出二进制代码程序,并把需要处理的少量数据以二进制的形式穿孔在程序代码之后,上机运算时同程序一起输入到内存中,运行程序时读取数据并处理,最后把运算结果输出出来。 1.1.2 文件管理阶段 数据与程序在存储位置上完全分开
2、,数据被单独组织成文件保存到外部存储器上,数据文件既可以为某个程序单独使用,也可以为多个不同的程序在不同的时间所使用。即数据文件可以被任何程序重复利用。,1.1.3 数据库管理阶段 数据与程序在存储位置上完全分开,数据被单独组织成文件保存到外部存储器上,数据文件既可以为某个程序单独使用,也可以为多个不同的程序在不同的时间所使用。即数据文件可以被任何程序重复利用。1. 数据结构化 2. 数据共享 3. 数据相对独立4. 数据粒度小 5. 数据操作界面独立 6. 数据由DBMS统一管理 DBMS是运行在操作系统之上的数据库管理系统软件,由它实施对外存上的数据库进行统一管理,并负责执行在DBMS之上
3、开发的应用程序对数据库的全部操作。 DBMS除了同操作系统配合按照用户的要求存取数据库中的数据外,主要还具有以下四个方面的管理控制功能。(1) 安全性控制 (2) 一致性控制 (3) 并发性控制(4) 数据库恢复,1.1.4 分布式数据库管理阶段 分布式数据库系统通过计算机网络和通信线路可以把分布在不同地域的、不同局域网环境下的、不同类型的数据库系统连接和统一管理起来。分布式数据库系统既支持客户的局部应用,又支持客户的全局应用。,1.2 概念数据模型,1.2.1 ER模型的有关概念 1. 实体实体(entity)是现实世界中存在的、可以相互区别的事物或活动。实体集(entity set)是指同
4、一类实体的集合。实体型(entity type)是对同类实体的共有特征的抽象定义。对于同一类实体,根据人们的不同认识和需要,可能抽取出的特征有所不同,因而定义出的实体型就可能不同。如你可以把人的姓名、出生日期、性别、身高、体重等特征定义为人的实体型。实体值(entity value)就是符合实体型定义的、对一个实体的具体描述。,2. 联系联系(relationship)是指实体之间的相互关系,它通常表示一种活动。如一张订单、一个讲座、一场比赛、一次选课等都是联系。联系集(relationship set)是同一类联系的集合。如一次展销会上的全部订单、一次会议安排中的全部讲座、一次比赛活动中的所
5、有比赛场次、一个班级同学的所有选课等都是相应的联系集。联系型(relationship tpe)是对同类联系的共有特征的抽象定义。联系元数就是一个联系中所涉及的实体型的个数。若涉及到两个实体型则称为二元联系,若涉及到三个实体型则称为三元联系,等等。特殊地,若涉及到的两个实体型对应同一个实体则为一元联系。实体和联系的异同 实体和联系实际上没有什么本质的区别,它们都是由相应的特征标识的,都具有型和值的概念,只不过在联系中含有较多的联系特征,如在选课联系中含有学生号、课程号等联系特征,通过联系特征与其他实体发生联系。,3. 属性 属性(attribute)是描述实体或联系中的一种特征,一个实体或联系
6、通常具有多个特征,需要多个相应属性来描述。 码(key)或称键、关键字、关键码等,是实体间相互区别的一种唯一标识。如人是实体,每个人的身份证号就是这种唯一标识,因为每个人的身份证号都不会相同。 域(domain)是实体中相应属性的取值范围。,4. 联系分类联系分类(relationship classify)是讨论两个实体型(含联系型在内)之间的联系的类别。按照一个实体型中的实体个数与另一个实体型中的实体个数的对应关系,可分类为1对1联系、1对多联系、多对多联系这三种情况。,(1) 1对1联系若一个实体型中的一个实体至多与另一个实体型中的一个实体发生关系,同样另一个实体型中的一个实体至多与该实
7、体型中的一个实体发生关系,则这两个实体型之间的联系被定义为1对1联系,简记为1:1。 (2) 1对多联系若一个实体型中的一个实体与另一个实体型中的任意多个实体(含0个)发生关系,而另一个实体型中的一个实体至多与该实体型中的一个实体发生关系,则这两个实体型之间的联系被定义为1对多联系,简记为1:n。(3) 多对多联系若一个实体型中的一个实体与另一个实体型中的任意多个实体(含0个)发生关系,反过来也一样,另一个实体型中的一个实体与该实体型中的多个实体(含0个)实体发生关系,则这两个实体型之间的联系被定义为多对多联系,简记为m:n。,1.2.2 ER模型 ER模型(entity relationsh
8、ip model)是人们描述数据及其联系的概念数据模型,是数据库应用系统设计人员和普通非计算机专业用户进行数据建模和勾通与交流的有力工具,使用起来非常直观易懂、简单易行。1. ER模型中的基本构件ER模型是一种用图形表示数据及其联系的方法,所使用的图形构件(元件)包括矩形、菱形、椭圆形和连接线。矩形表示实体,矩形框内写上实体名。菱形表示联系,菱形框内写上联系名。椭圆形表示属性,椭圆形框内写上属性名。连接线表示实体、联系与属性之间的所属关系或实体与联系之间的相连关系。,2. 各种联系的ER图表示对于1对1、1对多和多对多三种联系,对应的ER图如图1-2-5所示,其中每个实体或联系未画出相应的属性
9、框和连线。图1-2-5 三种联系的ER图,1.3 逻辑数据模型,1.3.1 层次数据模型 层次模型是一个树型结构模型,整棵树中有并且只有一个根结点,其余结点都是它的孩子或子孙;每个结点(除根结点外)只能有一个双亲结点(或称父结点),但可以有一个或多个孩子结点,当然也允许没有任何孩子结点,无孩子结点被称为叶子结点;每个结点对应一个记录型,即对应概念模型中的一个实体型,每对结点的父子联系隐含为1对多的联系(包括1对1联系)。,1.3.2 网状数据模型 网状模型是一个图结构模型,它是对层次模型的扩展,允许有多个结点无双亲,同时也允许一个结点有多个双亲。层次模型成为网状模型中的一种最简单的情况。 1.
10、3.3 关系数据模型 关系数据模型有着坚实的理论支持,它是建立在集合论、数理逻辑、关系理论等数学理论基础之上的。并且关系数据模型结构简单,符合人们的逻辑思维方式,很容易被人们所接受和使用,很容易在计算机上实现,很容易从概念数据模型转换过来。,1. 关系数据模型的定义关系模型是一种简单的二维表格结构,概念模型中的每个实体和实体之间的联系都可以直接转换为对应的二维表形式。每个二维表称做一个关系,一个二维表的表头,即所有列的标题称为关系的型(结构),其表体(内容)称做关系的值。关系中的每一行数据(记录)称做一个元组,每一列数据称做一个属性,列标题称做属性名。同一个关系中不允许出现重复元组(即两个完全
11、相同的元组)和相同属性名的属性(列)。,2. 关系数据模型应用举例关系模型不仅容易表示概念模型中的每个实体,而且容易表示每一种类型的联系,它们都同样对应一个关系,该关系中必定包含相联系的每个实体的各一个码。 3. 关系型的关系定义在以关系模型为数据库逻辑结构建立的数据库系统中,所有数据都是以关系(表)的形式定义和保存的,特别是所有关系的定义(即结构,它是关系的型)也同样是以关系的形式定义和保存的。为了区别于一般的保存数据的关系,把保存关系定义的关系称为该数据库的元关系、元数据、系统数据、数据字典等,它提供了数据库中所有关系的模式(即关系的型)。元关系是在用户建立数据库应用系统时,由DBMS根据
12、该数据库中每个关系的模式自动定义的。,4. 关系模型中的查询和更新在关系模型的数据库中进行查询和更新运算是非常灵活与方便的,用户即可以在每个关系上进行,也可以在相关的若干个关系上进行,相关的关系是靠关系之间共同使用的相同属性来实现的,该相同属性被称为连接属性或关联属性。如对于学生选课关系模型,既可以分别在学生、课程、选课这三个单独的关系上进行查询和更新,也可以通过它们之间的连接属性学号和课程号把两个或三个关系连接起来进行查询和更新。5. 关系数据模型的特点采用关系模型建立数据库系统具有以下特点,也称为优点。(1) 数据结构单一 (2) 采用集合运算(3) 数据完全独立 (4) 数学理论支持,1
13、.3.4 对象数据模型在面向对象模型中,对象也有型和值的区别,对象型(又称为类)是对具有共同特征的事物的抽象定义(描述),对象值就是对象型中的一个具体事物(实体)。如学生对象型由所含的属性特征和行为特征的定义组成,学生对象值表示某个具体的学生,他符合对象型的定义。对象具有封装性、继承性和多态性,这些特性都是传统数据模型中的记录所不具备的,这也是面向对象模型区别于传统数据模型的本质特征。,1.4 数据库系统简介,1.4.1 数据库系统构成 数据库系统(data base system,简称DBS)是指安装了数据库和数据库管理系统的计算机系统。数据库管理系统在计算机操作系统的支持下对保存于外部设备
14、上的、由物理数据文件所组成的数据库进行有效地管理、维护和使用。在数据库管理系统之上通常需要有数据库应用系统开发工具软件,应用程序员使用它,或者直接使用由DBMS所提供的数据库语言和开发环境编制程序建立数据库应用系统。数据库应用系统通常提供可视化操作界面供终端用户使用,进行日常数据处理工作。,1.4.2 数据库系统用户使用数据库系统通常包括四种类型的用户。第一种是数据库管理员(DBA),他负责整个数据库系统的建立、管理、运行、维护、监控等系统性工作,以及用户登记、存取数据权限分配等服务性工作。第二种是数据库设计员,他根据数据库在某一方面的应用,通过同相关业务人员一起进行需求分析,建立概念数据模型
15、和逻辑数据模型,搜集和整理数据,利用计算机中的数据库管理系统和数据库定义语言或操作界面建立相应的数据库应用系统。第三种是应用程序员,它根据已有的数据库系统,利用VisualBasic、PowerBuilder、Delphi等数据库应用系统开发工具编制程序开发出功能丰富、操作简便、满足用户需求的应用系统,供终端用户使用。第四种是终端用户,他是使用数据库的最广泛群体,是建立数据库为之服务的对象。如银行出纳员、窗口售票员、仓库管理员、住宿登记员等都是相应数据库系统的终端用户。,1.4.3 数据库体系结构在数据库的三级模式结构中,中间层叫做模式(schema)、或概念模式、逻辑模式、全局模式等。它是对
16、整个数据库逻辑结构和特征的描述,用户以DBMS支持的逻辑数据模型为基础,以DBMS提供的模式描述(定义)语言(DDLdata description/definition language)为工具给出数据库中所有实体型和联系的定义,以及给出对数据的安全性、有效性等规则要求。三级模式中的最下层叫做内模式(internal schema)、或存储模式、物理模式等。它是对整个数据库的存储结构和特征的描述,用户通常以DBMS和OS支持的存储结构和特征为依托,以DBMS提供的内模式描述(定义)语言(DSDLdata storage description/definition language)为工具给
17、出全局模式所对应的存储结构和特征的定义。在非关系模型中,内模式定义必须由用户给出,但在关系模型中,则往往省略此定义,而由DBMS自行确定。数据库中的数据根据内模式定义还不能直接存储,还必须交由操作系统去处理,由操作系统同外部设备打交道,控制存储空间的分配和存取数据的过程。,三级模式的最上层叫做外模式(external schema)、或子模式、应用模式、局部模式等。它是对数据库在某个方面局部应用所涉及数据的逻辑结构和特征的描述,它是终端用户和应用程序员所见到的数据库,被称为数据视图,它是整个数据库模式的一个子集,所有外模式定义的逻辑综合就得到整个模式的定义。外模式通常由用户利用所使用的计算机高
18、级语言或开发工具定义,或利用DBMS所提供的数据库语言定义。,1.4.4 DBMS的主要功能 1. 数据定义和操纵DBMS提供数据定义语言DDL和数据操纵语言DML(data manipulation language)及其相应的编译或解释程序,使用户能够进行数据库系统的各级模式定义,并能够对数据库进行查询、插入、删除、修改等操纵数据库的操作。2. 数据库监控DBMS提供了一组数据库管理控制程序,用以监督和控制数据库系统的正常运行。如存取监控程序检查用户标识、口令和访问权限,决定是否允许对数据库的访问;并发监控程序处理多个用户同时访问数据库时的并发操作;完整性检查程序根据数据约束条件检查用户输
19、入或修改数据的有效性和一致性。,3. 数据库辅助服务DBMS提供一组数据库服务程序,完成诸如数据库初始创建、数据库转存(备份)、数据库恢复、日志文件管理、同其他软件系统通信等辅助功能。 4. 数据库实用工具DBMS提供一组快捷高效、简单方便的使用数据库的工具,帮助用户按照提示完成各种相应的任务。如在ACCESS数据库系统中提供有基本表、查询、窗体、打印报表等生成器,用户利用它们能够通过交互操作窗口按步操作得到相应的结果。5. 建立和维护数据字典数据库系统的三级模式定义都将被DBMS保存到数据字典(DDdata dictionary)中,当模式被用户修改时,DBMS将自动更新数据字典,当用户访问
20、数据库时,DBMS将自动查找数据字典进行语法检查,看是否存在已定义的数据,并接着对用户进行存取权限的检查看是否为合法用户访问权限内的数据,再接着进行有效性检查看是否使用了有效数据,等等。,1.4.5 使用数据库系统存取数据过程使用数据库系统存取数据的过程大致如下:(1) 用户向DBMS发出读取数据(或写入数据)的请求;(2) DBMS检查用户的存取权限,确定是否接受请求;(3) 如果是合法用户进行合法访问则DBMS查看外模式到模式的映象,确定在模式中对应的数据定义;(4) DBMS查看模式到内模式的映象,确定在内模式中对应的数据定义;(5) DBMS按照内模式数据定义向操作系统发送读取数据的命
21、令;(6) 操作系统执行此命令从外存数据库中读出指定的数据并送入在内存的系统缓冲区中;(7) DBMS取出系统缓冲区的数据并相继进行内模式到模式、模式到外模式的数据转换后,把它写入到用户缓冲区;(8) DBMS把数据从用户缓冲区取出给用户使用,至此结束一次访问数据库的读数过程。,第二章 关系运算,2.1 关系数据结构 关系数据结构非常单一,它就是一张具有行列结构的二维表。不过,作为关系的二维表具有较严格的规定和限制。下面以集合论的观点给出有关概念的形式化定义。 1. 域域(domain)是具有相同特性的数据集合。例如,1,3,5,.,99是一个域,它是由100以内的所有奇数组成的集合;男,女是
22、一个域,它是由人类两种性别男和女组成的集合;东,南,西,北是一个域,它是由四个不同方向组成的集合;SUN,MON,TUE,WED,THU,FRI,SAT是一个域,它是由一个星期内的每天英文名称标记组成的集合。,2. 笛卡尔积 笛卡尔积(cartesian product)是定义在一组域上的集合,假定一组域用D1、D2、.、Dn表示,则它们的笛卡尔积表示为D1D2.Dn,笛卡尔积中每个元素由下式求出: D1D2.Dn=(d1,d2,.,dn) | diDi, 1in, n1 笛卡尔积中的每个元素又习惯称为元组,每个元组中的一个值di称为该元组的一个分量,n是域的个数,也是每个元组中分量的个数,具
23、有n个分量的元组被称为n元组。,3. 关系关系(relation)是笛卡尔积的一个子集,若笛卡尔积具有n个域,则该笛卡尔上的关系被称为n元关系。设D1、D2、.、Dn为n个域,则该域上的关系用R(D1,D2,.,Dn)表示,R称为关系名,R关系所包含的全部元组是D1D2.Dn的一个子集。4. 关系模式关系模式(relation schema)是一个关系的型,即一个关系的具体结构,它通常被形式化定义为R(U,D,DOM,F,I)其中R为关系名,U为该关系中的所有属性名集合,D为该关系的所有定义域的集合,该集合长度必然小于等于属性名集合的长度,因为可能出现不同属性使用同一个域的情况,DOM为属性向
24、域映射的集合,它给出属性和域之间的对应关系,即哪个属性属于哪个域,F为该关系中各属性之间的数据依赖的集合,I为该关系中所定义的完整性规则的集合。,5. 码码(key)又称为键、关键字等。在关系中涉及到许多码的概念,有超码、候选码、主码、备用码、外码等。超码(super key) 关系中能唯一标识每个元组的属性或属性组(集)被称为该关系的超码。一个关系可能有多个超码。候选码(candidate key):关系中能唯一标识每个元组的最少属性或属性组被称为该关系的候选码。一个关系可能有多个候选码。由超码和候选码的定义可知,一个超码至少包含一个候选码,并且还可能包含除候选码之外的多余属性或属性组。主码
25、(primary key):从候选码中选择一个作为该关系的主码,数据库系统将按主码标识和排序每个元组。一个关系在任一时刻至多只能有一个主码,但在不同时刻可以指定不同的候选码作为主码,当然也可以在关系中不指定任何主码。备用码(alternate key):除了主码之外的所有候选码都是该关系的备用码。一个关系可能没有备用码,也可能具有一个或多个备用码。外码(foreign key):在关系R1中的属性或属性组若在另一个关系R2中作为主码使用,则称该属性或属性组为R1的外码。R1的外码和对应的R2中的主码必须定义在相同的域上,允许使用相同或不同的属性名,不过,为了明确起见,增强可读性,尽量使用相同的
26、属性名。,6. 主属性和非主属性在一个关系中,包含在任何候选码中的属性都称为该关系的主属性,除主属性外都是非主属性,或称为非码属性。,2.2 关系完整性 关系完整性就是关系模型中数据的正确性、一致性和有效性。关系完整性又包括实体完整性、参照完整性和用户定义的完整性三个方面。每种完整性都对应有相应的完整性规则,都需要用户在定义关系数据库时给出相应定义。1. 实体完整性实体完整性(entity integrity)规则:关系的主码不能取空值,或者说任何关系中每个元组的主码不能为空。2. 参照完整性参照完整性(refrence integrity)规则:在两个参照和被参照关系中,参照关系中每个元组的
27、外码或者为空,或者等于被参照关系中某个元组的主码。3. 用户定义的完整性用户定义的完整性(used-defined integrity)规则包括对每个关系每个属性的取值限制(或称约束)的具体定义,它同其他两个完整性规则一样也被记录在DBMS的数据字典中,在数据库操作时,DBMS会自动根据各种完整性规则进行操作监控,拒绝不符合要求的数据进入数据库。,2.3 关系运算,2.3.1 传统的集合运算 传统的集合运算包括并、交、差和笛卡尔积四种,对应的运算符分别用、和表示。1. 并运算(unin)设两个关系R和S具有完全相同的结构(模式),则R和S的并仍是一个关系,该关系的结构与R或S的结构相同,该关系
28、的值是R中所有元组与S中所有元组共同组成的集合。当然,对于R和S中共同具有的元组,在结果集合中只能出现一个。R和S的并记作RS,用集合公式表示为:RS=t | tR tS,2. 交运算(intersect) 设两个关系R和S具有完全相同的结构,则R和S的交仍是一个关系,该关系的结构与R或S的结构相同,该关系的值是R和S中共同具有的元组的集合。R和S的交记作RS,用集合公式表示为:RS=t | tR tS 3. 差运算(difference) 设两个关系R和S具有完全相同的结构,则R和S的差仍是一个关系,该关系的结构与R或S的结构相同,该关系的值是从R中去掉在S中同时出现的元组后,由R中剩余元组
29、所组成的集合。R和S的差记作RS,用集合公式表示为:RS=t | tR tS,4. 笛卡尔积(cartesian product)设有一个具有n个属性的关系R和另一个具有m个属性的关系S,则它们的笛卡尔积仍是一个关系,该关系的结构是R和S的结构之连接,即前n个属性来自R,后m个属性来自S,属性个数等于n+m,该关系的值是由R中的每个元组连接S中的每个元组所构成元组的集合。R和S的笛卡尔积记作RS,用集合公式表示为:RS=tRtS | tRR tSS,2.3.2 专门的关系运算 专门的关系运算包括选择、投影、连接和除四种,对应的运算符分别用、和表示。1. 选择运算(Select)选择运算是单目运
30、算,它从一个关系R中选择出满足给定条件的所有元组,并同R具有相同的结构。选择运算提供了横向划分(或称分割)关系的手段。设F(t)为元组逻辑表达式,当值为真(用逻辑真常量True表示)时,元组t就被选择出来,成为结果关系中的一个元组。对关系R按F(t)条件做选择运算记作为F(t)(R),用集合公式表示为:F(t)(R)=t | tR F(t)=True,2. 投影运算(project) 投影运算也是单目运算,它从一个关系R中按所需顺序选取若干个属性构成新关系,该新关系的元组数必然小于等于原关系R中的元组数,因为要从中去掉在新关系模式下重复的元组。选择运算提供了纵向划分(或称分割)关系的手段。设t
31、是R中的一个元组,A是要从R中投影出的属性子集,则用t.A表示t元组中属性子集A所对应的分量值,对关系R按属性子集A做投影运算记作为A(R),用集合公式表示为:A(R)=t.A | tR,3. 连接运算(join)连接运算是双目运算,它把两个关系R和S按相应属性值的比较条件连接起来,它是R和S的笛卡尔积的一个子集。比较条件就是比较运算表达式,相应的连接就称为该运算符连接,如大于连接、小于等于连接、等于连接等,总称为连接。假定A和B分别为R和S中的属性,t是连接结果中的一个元组,tR和tS分别表示t元组中分别属于R和S中的元组,tR.A和tS.B分别为t元组中相应的连接分量,tR.A和tS.B也
32、可分别表示为R.A和S.B,因为关系的属性值就表示关系中当前元组t的属性值。对R和S按条件进行连接记作RS或RR.AS.B S,用笛卡尔积和选择运算表示为R.AS.BRR.AS.B S =R.AS.B(RS)=t | tRR tSS R.A S.B = True,2.3.3 关系运算综合举例例2-3-9 从表2-3-7所示的学生、课程和选课构成的关系数据库中,查询出姓名(Sname)为lhy的学生的学生号、所选课程的每门课程号及相应成绩。例2-3-10 从表2-3-7(a)、(b)、(c)所示的关系数据库中,查询出学生号为k(变量k中保存着一个给定的学生号,为了使属性名和变量名相区别,假定在变
33、量名前用字符做标记)的学生的学生号、姓名、所选每门课的课程名及成绩。例2-3-11 从表2-3-7(a)、(b)、(c)所示的关系数据库中,查询出同时选修了001和002这两门课程的学生的学生号。例2-3-12 从表2-3-7(a)、(b)、(c)所示的关系数据库中,查询出没有选修任何课程的全部学生。,第三章 关系规范化基础,3.1 数据依赖1. 一般函数依赖定义1 设一个关系为R(U),X和Y为属性集U上的子集,若对于元组中X上的每个值都有Y上的一个唯一值相对应,则X和Y之间存在着函数依赖,并称X函数决定Y,又称Y函数依赖于X,记作XY,称X为决定因素。2. 平凡和非平凡函数依赖定义2 设一
34、个关系为R(U),X和Y为属性集U上的子集,若 XY且XY,则称XY为非平凡函数依赖,否则若XY则称XY为平凡函数依赖。,3. 部分和完全函数依赖定义3 设一个关系为R(U),X和Y为属性集U上的子集,若XY,同时X的一个真子集X也能够函数决定Y,即存在XY,则称X部分函数决定Y,或Y部分函数依赖于X,记作X Y;否则若不存在一个真子集X,使得X也能够函数决定Y,则称X完全函数决定Y,或Y完全函数依赖于X,记作X Y。X到Y的部分函数依赖也称为局部函数依赖。 4. 传递函数依赖定义4 设一个关系为R(U),X、Y和Z为属性集U上的子集,其中存在XY、YZ,但YX、YZ,则存在XZ,称此为传递函
35、数依赖,即X传递函数决定Z,Z传递函数依赖于X。,5. 函数依赖的增广性规则定义5 设一个关系为R(U),X、Y和Z为属性集U上的子集,若XY,则存在XZYZ和XZY。6. 函数依赖的合并性规则与函数依赖分解性规则相对应的为合并性规则,若XY和XZ成立,则存在XYZ。如“职工号姓名”和“职工号性别”成立,则“职工号(姓名,性别)”也成立,反之亦然,即“职工号(姓名,性别)”成立,则根据分解性规则,“职工号姓名”和“职工号性别”也同样成立。,7. 一个关系的最小函数依赖集定义6 设一个关系为R(U),X和Y为U的子集,若XY,并且为完全函数依赖,同时Y为单属性,则称XY为R的最小函数依赖。由R中
36、所有最小函数依赖构成R的最小函数依赖集,其中不含有冗余的传递函数依赖。8. 根据函数依赖求关系的候选码定义7 设一个关系为R(U),X为U的一个子集,若X能够函数决定U中的所有属性,并且X的任何真子集都不能函数决定U中的所有属性,则称X为关系R的一个候选码。,9. 根据实际需要给关系添加候选码在关系数据库中通常把同类事物或活动用一个关系来描述,若单靠事物或活动本身的特征不好或者不方便标识时,就应该给它们进行人为的统一编码,这样既能够唯一标识每个对象,又便于人们进行处理。如平常使用的标识系列-职工编号、学生号、身份证号、借书证号、驾驶证号、车牌号、银行账号、订单号、合同号、图书编号、设备编号、零
37、件编号等都是人们为处理对象的方便而附加的候选码。 10. 函数依赖规则小结这里总结给出函数依赖的一些常用规则,设关系为R(U),X、Y、Z、W是U上的子集,则:(1) 自反性:若XY,则存在XY。(2) 增广性:若XY,则存在XZYZ。(3) 传递性:若XY和YZ,则存在XZ。(4) 合并性:若XY和XZ,则存在XYZ。(5) 分解性:若XY,且YZ,则存在XZ(6) 伪传递性:若XY和WYZ,则存在WXZ。(7) 复合性:若XY和ZW,则存在XZYW。(8) 自增性:若XY,则存在WXY。,3.2 关系规范化,3.2.1 第一范式(First Normal Form)定义8 设一个关系为R(
38、U),若U中的每个属性都是不可再分的,或者说都是不被其他属性所包含的独立属性,则称关系R(U)是符合第一范式的。关系数据库中的每个关系都必须达到第一范式,这是对关系数据库的最起码要求。若一个关系不满足第一范式,则称为非规范化的关系,否则称为规范化的关系。,3.2.2 第二范式(Second Normal Form)定义9 设一个关系为R(U),它是满足第一范式的,若R中不存在非主属性对候选码的部分函数依赖,则称该关系是符合第二范式的。若一个数据库中所有关系都达到了第二范式则称该数据库是符合第二范式的。,3.2.3 第三范式(Third Normal Form)定义10 设一个关系为R(U),它
39、是满足第一范式的,若R中不存在非主属性对候选码的传递函数依赖,则称该关系是符合第三范式的。一个关系中的部分函数依赖也是一种传递依赖。如假定WX是候选码,存在XY的函数依赖,则WXY是部分函数依赖,因有WXX,XWX,XY,所以WXY又是传递依赖。若关系R中不存在非主属性对候选码的传递函数依赖,就包括不存在部分函数依赖。因此,一个关系若达到了第三范式,则自然也就包括达到了第二范式。若一个数据库中所有关系都达到了第三范式则称该数据库是符合第三范式的。,3.2.4 BC范式(Boyce-Codd Normal Form)BC范式又简称BCNF,它比第三范式的规范化程度更高。定义11 若一个关系为R(
40、U),它是满足第一范式的,当R中不存在任何属性对候选码的传递函数依赖时,则称R是符合BCNF的。BCNF的定义也可以采用另一种等价的方式叙述:若R中的所有属性都完全依赖于候选码,或者说R的最小函数依赖集中的所有函数依赖的决定因素都是候选码,则R是符合BCNF的。在第三范式中,只要求非主属性不传递依赖于候选码,没有强调主属性是否传递依赖于候选码,而在BCNF中,不但要求非主属性,而且要求主属性都不能传递依赖于候选码,当然传递依赖包含部分依赖在内。若一个关系虽然达到了第三范式要求,没有达到BCNF要求,表明在主属性中存在着部分依赖或传递依赖,这也会带来数据冗余和操作异常,经常也需要继续分解使之达到
41、BCNF,不过此分解过程可能破坏无损连接性和函数依赖性。,第四章 结构化查询语言-SQL,4.1 SQL简介 4.2 数据库模式的建立和删除 4.3 表结构的建立、修改和删除 4.4 表内容的插入、修改和删除 4.5 视图的建立、修改和删除 4.6 SQL查询,4.1 SQL简介,SQL是Structured Query Language的缩写,是美国国家标准局(ANSI)从1986年首次推出的一种关系数据库语言。它已经相继出现了多个版本,依次有1986年的SQL86,1989年的SQL89,1992年的SQL2和1999年的SQL3等。SQL也相应得到国际标准化组织(ISO)的认可,已经成为
42、关系数据库语言的国际标准。现在SQL几乎被所有关系数据库管理系统所采用,各系统对其都有所修改和扩充,但核心仍然是SQL。 SQL具有数据定义(DDL)、数据操纵(DML)和数据控制(DCL)等丰富功能,它定义有一组操作命令(语句),用户通过命令交互方式或程序执行方式使用命令能够实现相应的功能。不过现在许多关系数据库管理系统不但提供给用户命令和编程式操作界面,而且提供给用户窗口式操作界面。可视化的窗口界面方式操作数据库更为直观和快捷,更为灵活和方便,因此受到广大数据库应用开发者和数据库用户的欢迎。为了能够理解数据库开发环境中每个操作对象和每个窗口界面中各操作元素的含义,能够熟练地使用各种窗口、菜
43、单、对话框、控件、按钮等进行有效操作,则必须首先掌握好SQL。,SQL的数据定义功能能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。在SQL中,外模式又叫做视图(view),全局模式简称模式(schema)或数据库(database),内模式由系统根据数据库模式自动实现,至多由用户定义相应的索引文件,其余无须用户过问。在SQL中,每个关系又叫做基本表或表(table),每个关系中的属性又叫做字段(field)或列(column),元组又叫做行(row)。一个数据库由若干个基本表组成,通常一个基本表对应存储在外存数据库空间的一个存储文件中。每个视图也是一个关系,它由基本表产生出来,
44、有自己独立的结构定义,但没有独立的数据存在,它的数据来自基本表,间接地来自存储基本表的数据存储文件。所以,又把视图称为虚表(virtual table)。,4.2 数据库模式的建立和删除,当需要在计算机中某个关系数据库管理系统之下建立数据库时,首先就要使用数据库模式的建立命令定义数据库名,即模式名,然后在其中定义各个基本表、视图等有关对象。,4.2.1 建立数据库模式,语句格式: CREATE SCHEMA | DATABASE AUTHORIZATION 语句功能: 在计算机系统中建立一个只有名字的空数据库,并定义出它的所有者名称。,4.2.2 删除数据库模式,语句格式: DROP SCHE
45、MA | DATABASE 语句功能:从计算机系统中删除(撤消)一个数据库。当然会同时把该库中的所有信息一并删除掉。,4.3 表结构的建立、修改和删除,在计算机系统中建立了一个关系数据库(模式)之后,接着就要建立数据库中的每个关系(基本表或表)。,4.3.1 建立表结构,语句格式:CREATE TABLE (,.,.) 语句功能: 在当前或给定的数据库中定义一个表的结构(即关系模式)。,(1) 数据类型,每个列的名字是一个用户定义的标识符,列名后面跟着其数据类型的描述。可使用的数据类型主要有以下四种:char(n) 定长字符型,其长度为n,即占n个字节,能够用来保存长度(即ASCII码字符的个
46、数)小于等于n的字符串。注意:对于每个汉字区位码字符,其长度为2,相当于两个ASCII码字符。int 整型,又称整数型,int也可以用标识符integer表示。该类型占4个字节,能够用来表示-2147483648到+2147483647之间的所有整数。float 浮点型,又称实数型。该类型占4个或8个字节,能够表示相当大范围内的任何浮点数或实数,包括该范围内的所有整数和小数。date 日期型,也可以为datetime,表示日期时间型。该类型占4个或8个字节,能够表示任何一个日期,日期数据格式为yyyy-mm-dd或yyyy/mm/dd,其中yyyy表示年份,mm表示年内的月份,dd表示月内的天
47、数。 整数和浮点数都属于数值,为了区别于数值,字符数据和日期数据在书写时需要用单引号括起来。,(2) 列级完整性约束,每个列后面的完整性约束称为列级完整性约束,它给出对该列数据的完整性约束条件,表中任一行在该列上的值若改变时破坏了规定的条件,将拒绝这种操作。列级完整性约束有以下六种:DEFAULT 默认值约束。当不给一个元组中的该列分量输入值时则采用由所提供的值。整数、浮点数、用单引号括起来的字符串或日期都是常量表达式。如25、-100为整数,2.45、-3.67E5为浮点数,计算机、2+xy为字符串,1956-03-25、2002/12/18为日期。NULL/NOT NULL 空值/非空值约
48、束。注明每行上的该列值是否允许为空。对于非主属性,若不注明此项约束,则隐含为空值约束,即允许任何行上的该列值为空。PRIMARY KEY 主码约束。注明该列为关系的主码。一个关系只能注明一个主码,当然可以无主码。一个关系被注明主码后,其所有元组将按主码值的升序排列。 ()”可以作为出生日期字段的检查条件,假定由函数getdate()返回系统当前的日期。,UNIQUE 单值约束,又称唯一值约束。注明该列上的所有取值必须互不相同。REFERENCES() 外码约束。注明该列为外码,并给出对应的父表及父表中被参照的主码。另外,在一些实际的数据库管理系统中,不仅允许主码被参照,而且也允许候选码或单值约
49、束的属性被参照。CHECK() 检查约束。注明该列的取值条件,或称取值限制。当一个列规定为主码时,就隐含规定该列同时具有非空和单值约束。当一个列虽然没有规定为主码,但若同时规定为非空和单值时,则它是一个候选码。若一个列只规定为单值,则也允许有一个空值存在,即不能出现多行在该列上的值为空。检查约束中的逻辑表达式通常含有其列名,给出取值限制。如“性别=男 OR 性别=女”可以作为性别字段的检查条件,“年龄=18”可以作为职工年龄字段的检查条件,“出生日期=getdate,(3) 表级完整性约束,在所有列定义后给出,包括以下四种:PRIMARY KEY(,.) 主码约束。注明一个或同时多个列为主码。
50、如primary key(课程号,教师号)就定义了相应关系中的主码为课程号和教师号这两个属性的组合。UNIQUE(,.) 单值约束。注明一个或同时若干个列为单值。如unique(订单号,顾客号)就定义了相应关系中的订单号和顾客号属性构成组合的单值属性,即在该关系的所有元组中,不能出现完全相同的订单号和顾客号,否则将报错。FOREIGN KEY(,.) REFERENCES(,.) 外码约束。注明一个或同时多个列为外码,并给出对应的父表及父表中被参照的主码中的所有列。CHECK() 检查约束。注明每行中一个或若干个列在取值上必须满足的条件。如check(工龄年龄)就定义了工龄和年龄之间的检查约束。除默认值约束和空值/非空值约束外,对于其他约束,若只涉及到一个列时,则既可以作为列级完整性约束,又可以作为表级完整性约束,当然只能取其一使用;若涉及到多个列时,则只能作为表级完整性约束来定义。,