这是一本严格采用“工作过程导向”模式规范编写的Microsoft SQL Server 2012的教材。本书内容可分为两个部分:数据库的创建和数据库的管理。本书的内容组织以关系数据库理论知识为基础,注重操作技能的培养和实际问题的解决,旨在使学生掌握使用和管理Microsoft SQL Server 2012。本书以创建“学生管理系统”的数据库为工作任务,具体内容包括设计数据库、创建数据库、创建表、更新和查询记录、Transact-SQL语言、视图和索引、用户定义函数、存储过程、触发器、管理数据库安全、备份和还原数据库、导入和导出数据库中的数据。最后的项目18中介绍了学生管理系统应用程序的设计和实施,从而完成了一个完整的数据库系统。本书贴切实际,结构合理,内容丰富,操作方便。本书作为Microsoft SQL Server 2012的入门类教材,既可以作为高等职业教育计算机及相关专业的教材,也可作为Microsoft SQL Server 2012的各种培训班、职业资格等级考试或认证考试的培训教材,还可用于读者自学。
这是一本严格采用“工作过程导向”模式规范编写的Microsoft SQLServer 2012的教材。本书内容可分为两个部分:数据库的创建和数据库的管理。本书的内容组织以关系数据库理论知识为基础,注重操作技能的培养和实际问题的解决,旨在使学生掌握使用和管理MicrosoftSQL Server 2012。本书以创建“学生管理系统”的数据库为工作任务,具体内容包括设计数据库、创建数据库、创建表、更新和查询记录、Transact-SQL语言、视图和索引、用户定义函数、存储过程、触发器、管理数据库安全、备份和还原数据库、导入和导出数据库中的数据。*后的项目18中介绍了学生管理系统应用程序的设计和实施,从而完成了一个完整的数据库系统。本书贴切实际,结构合理,内容丰富,操作方便。本书作为Microsoft SQL Server 2012的入门类教材,既可以作为高等职业教育计算机及相关专业的教材,也可作为MicrosoftSQL Server 2012的各种培训班、职业资格等级考试或认证考试的培训教材,还可用于读者自学。
为适应高职院校应用型人才培养迅速发展的趋势,培养以就业市场为导向的具备“职业化”特征的高级应用型人才,着眼于国家发展和培养造就综合能力人才的需要,“任务驱动、项目导向”成了主流的教学模式。本书以Microsoft SQL Server 2012为数据库管理系统,通过完成一个完整的学生管理系统,引导学生掌握Microsoft SQL Server 2012的使用和管理。
本书特色
本书以实际工作任务为背景,将知识的学习、技能的练习与任务相结合,再通过课后练习帮助读者巩固所学内容。每一个项目均针对数据库设计和实施中的一个工作过程环节来传授相关的课程内容,实现实践技能与理论知识的整合,将工作环境与学习环境有机地结合在一起。本书内容简明扼要,结构清晰,通过工作过程的讲解将掌握关系数据库的理论知识和掌握Microsoft SQL Server 2012的使用方法有机结合,示例众多,步骤明确,讲解细致,突出可操作性和实用性。再辅以丰富的实训题和课后练习,使学生得到充足的训练,具备使用Microsoft SQL Server 2012解决实际问题的能力。
本书由高职院校的优秀教师编写,是在其现有教学成果基础上整合编写而成的,作者拥有丰富的开发案例和教学经验。本书共分为18个项目,计划需要80个课时,需要用一学期进行学习。
本书主要内容
项目1介绍数据库的设计。通过该项目的学习,主要了解数据库的基本概念、数据模型、关系代数和数据库的设计方法与步骤,掌握数据库的理论知识,为后面使用Microsoft SQL Server 2012做好准备。
项目2介绍安装SQL Server 2012。通过该项目的学习,了解SQL Server的组成,掌握如何安装SQL Server 2012。
项目3讲解如何创建数据库。通过该项目的学习,主要掌握SQL Server数据库的分类和文件组成,掌握创建、修改、删除和查看数据库的方法,掌握分离和附加数据库的方法。
项目4介绍如何创建数据库中的表,设置表的数据完整性。通过该项目的学习,掌握表的概念,掌握创建、修改、删除表的方法,掌握数据完整性的概念、分类和具体实施方法。
项目5介绍如何创建索引。通过该项目的学习,掌握索引的概念和分类,掌握创建、修改、删除索引的方法,了解设计和优化索引的方法。
项目6介绍如何创建视图。通过该项目的学习,掌握视图的概念、分类、创建和使用。
项目7介绍了Transact-SQL语言。通过该项目的学习,了解Transact-SQL语言的基础知识。
项目8讲解如何查询数据库中的记录。通过该项目的学习,了解SELECT语句的组成,掌握SELECT语句的书写。
项目9学习使用Transact-SQL语句插入、更新和删除记录。
项目10介绍事务和锁。通过该项目的学习,掌握事务的概念、属性、类型和使用,掌握并发控制的概念和类型,掌握隔离级别的类型,掌握锁定、锁粒度、锁模式、锁兼容性和死锁的概念。
项目11学习使用游标。通过该项目的学习,掌握游标的概念、类型和使用方法。
项目12讲解创建存储过程。通过该项目的学习,掌握存储过程的概念、分类和作用,介绍创建、修改、删除、执行和查看存储过程的方法。
项目13学习使用用户定义函数。通过该项目的学习,掌握用户定义函数的概念、作用和类型,掌握创建、修改、删除、执行和查看用户定义函数的方法。
项目14学习使用触发器。通过该项目的学习,掌握触发器的概念、分类、工作原理、创建和使用。
项目15讲解对数据库的备份和还原。通过该项目的学习,掌握备份、还原和恢复的概念,掌握备份设备的概念,掌握恢复模式的概念和类型,掌握不同恢复模式下对数据库备份和还原的方法。
项目16讲解导入和导出数据库中的数据。通过该项目的学习,掌握SQL Server导入和导出向导的使用,学习SSIS的作用和工作方式,掌握创建和执行SSIS包来导入和导出数据库中的数据。
项目17学习管理数据库安全。通过该项目的学习,掌握数据库权限层次结构,掌握身份验证模式的分类,掌握登录名、用户、权限、角色的概念、分类、创建和使用。
项目18设计并完成了基于Windows的学生管理系统和基于Web的学生管理系统。通过本项目的完成,学习Windows应用程序的创建方法,学习Web应用程序的创建方法,学习注册和登录页面的设计方法,学习查询学生功能的实现方法。
读者对象
本书作为Microsoft SQL Server 2012的入门类教材,既可以作为高等职业教育计算机及相关专业的教材,也可作为Microsoft SQL Server 2012的各种培训班、职业资格等级考试或认证考试的培训教材,还可用于读者自学。
本书由高云(南京信息职业技术学院教师)任主编,崔艳春(南京信息职业技术学院教师)、夏平(南京信息职业技术学院教师)任副主编,其中项目1、2、3、4、5、6、7、8、9、10由高云编写,项目11、12、13、14由夏平编写,项目15、16、17、18由崔艳春编写,高云负责本书的校对。全书框架结构由何光明拟定,王珊珊、石雅琴、卢振侠、郑爱琴、杨橙、陈凤、曹冬梅等参与了部分资料整理工作。
由于作者水平有限,书中难免存在不当之处,恳请广大读者批评指正。
编 者
项目1
设计数据库
【项目要点】
* 数据库的基本概念。
* 数据管理技术的发展历史。
* 数据库的三级模式结构。
* 数据模型的概念、组成和类型。
* 概念数据模型的概念。
* 实体-联系模型的基本概念和E-R图。
* 逻辑数据模型的概念和类型。
* 关系模型的基本概念。
* 关系代数。
* 数据库设计的方法和步骤。
【学习目标】
* 掌握数据库的基本概念、数据管理技术的发展历史和数据库三级模式结构。
* 掌握数据模型的概念、组成和类型。
* 掌握概念数据模型的概念。
* 掌握实体-联系模型的基本概念。
* 掌握E-R图的组成和画法。
* 掌握关系模型的基本概念。
* 掌握关系代数表达式的书写。
* 掌握数据库设计的方法和步骤。
1.1 数据库的基本概念
1.1.1 数据库
信息(Information)是现实世界事物的存在方式或运动状态的反映,其内容描述的是事物之间的相互联系和相互作用。
数据(Data)是描述事物的符号记录。数据包括文字、图形、图像、声音等。数据包括两个方面,即型和值。型是指数据的类型,是数值类、字符类还是日期类等;值是指数据在给定类型下的值,比如数值类的值可以是12、字符类的值可以是“中国”、日期类的值可以是“2015-3-22”等。
数据和信息之间存在着联系,信息通过数据表示,而信息是数据的含义。
数据库(Database,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。数据库中的数据是按照一定的数据模型组织、描述和存储的,有较小的冗余度、较高的数据独立性和易扩展性。
1.1.2 数据库管理系统
数据库管理系统(Database Management System,DBMS)是使用和管理数据库的系统软件,位于用户与操作系统之间,负责对数据库进行统一的管理和控制。所有对数据库的操作都交由数据库管理系统完成,这使得数据库的安全性和完整性得以保证。
数据库管理系统主要具备6个功能:数据定义,数据的组织、存储和管理,数据操纵,数据库的运行管理和安全保护,数据库的维护,通信和互操作。
数据定义功能用于建立和修改数据库的库结构,数据库管理系统提供数据定义语言(Data Definition Language,DDL)来完成数据定义功能。
数据的组织、存储和管理功能的目标是提高存储空间利用率,选择合适的存取方法提高存取效率。数据的组织、存储与管理功能主要包括DBMS如何分类组织、存储和管理各种数据,包括数据字典、用户数据、存取路径等,需确定以何种文件结构和存取方式在存储级上组织这些数据,如何实现数据之间的联系。
数据操纵功能用于用户对数据库插入、更新、删除和查询数据,数据库管理系统提供数据操纵语言(Data Manipulation Language,DML)来完成数据操纵功能。
数据库的运行管理和安全保护功能确保数据库系统的正常运行,内容包括多用户环境下的并发控制、安全性检查、存取限制控制、完整性检查、日志的管理、事务的管理和发生故障后数据库的恢复。数据库管理系统提供数据控制语言(Data Control Language,DCL)来完成数据库的运行管理和安全保护功能。
数据库的维护功能包括数据库的数据输入、转换、转储、数据库的重组织、数据库性能监视和分析等功能,这些功能是由若干实用程序和管理工具来完成的。
通信和互操作功能是指数据库管理系统与其他系统的通信和不同数据库之间的互操作。
1.1.3 数据库系统
数据库系统(Database Systems,DBS)是指在计算机系统中引入了数据库的系统,专门用于完成特定的业务信息处理。数据库系统包括硬件、软件和用户。其中,软件包括数据库、数据库管理系统、操作系统、应用开发工具和数据库应用程序。用户包括系统分析员、数据库设计人员、程序开发人员、数据库管理员和最终用户。数据库系统的核心是数据库管理系统。
数据库管理员(Database Administrator,DBA)是专门负责管理和维护数据库系统的人。通常,数据库管理员的工作职责包括参与或负责数据库设计,根据应用来创建和修改数据库,设计系统存储方案并制定未来的存储需求计划,维护数据库的数据安全性、完整性、并发控制,安装和升级数据库服务器以及应用程序工具,管理和监控数据库的用户,监控和优化数据库的性能,制定数据库备份计划,定期进行数据库备份,在灾难出现时对数据库信息进行恢复,等等。在实际工作中,一个数据库系统可能有一个或多个数据库管理员,也可能数据库管理员同时也负责系统中的其他工作。
数据库应用系统(Database Application Systems,DBAS)是指由数据库、数据库管理系统、数据库应用程序组成的软件系统。
1.1.4 数据管理技术的发展
数据管理技术是指对数据进行分类、组织、编码、存储、检索和维护的技术。数据管理技术的发展大致划分为3个阶段,即人工管理阶段、文件系统阶段和数据库系统阶段。
(1) 人工管理阶段。20世纪50年代中期之前,计算机刚刚出现,主要用于科学计算。硬件存储设备只有磁带、卡片和纸带;软件方面还没有操作系统,没有专门管理数据的软件。因此,程序员在程序中不仅要规定数据的逻辑结构,还要设计其物理结构,包括存储结构、存取方法、输入输出方式等。数据的组织面向应用,不同的计算程序之间不能共享数据,使得不同的应用之间存在大量的重复数据,数据与程序不独立。数据通过批处理方式进行处理,处理结果不保存,难以重复使用。
(2) 文件系统阶段。20世纪50年代中期到60年代中期,随着计算机大容量存储设备(如硬盘)和操作系统的出现,数据管理进入文件系统阶段。在文件系统阶段,数据以文件为单位存储在外存,且由操作系统统一管理。用户通过操作系统的界面管理数据文件。文件的逻辑结构与物理结构相独立,程序和数据分离。用户的程序与数据可分别存放在外存储器上,各个应用程序可以共享一组数据,通过文件来进行数据共享。但是,数据在文件中的组织方式仍然是由程序决定,因此必然存在相当的数据冗余。数据的逻辑结构和应用程序相关联,一方修改,必然导致另一方也要随之修改。此外,简单的数据文件不能体现现实世界中数据之间的联系,只能交由应用程序来进行处理,缺乏独立性。
(3) 数据库系统阶段。20世纪60年代后,随着计算机在数据管理领域的普遍应用,数据管理开始运用数据库技术,进入了数据库系统阶段。数据库技术以数据为中心组织数据,采用一定的数据模型,数据模型不仅体现数据本身的特征,而且体现数据之间的联系,数据集成性高。根据数据模型建成的数据库数据冗余小,易修改、易扩充,便于共享,程序和数据有较高的独立性。数据库管理系统统一管理与控制数据库,保证了数据的安全性和完整性,可以有效地控制并发管理。
20世纪80年代中期以来,数据库技术与其他新技术相结合,陆续产生了多种类型的数据库,如面向对象数据库、分布式数据库、并行数据库、多媒体数据库、模糊数据库、时态数据库、实时数据库、知识数据库、统计数据库等。随着大数据时代的到来,各行各业不仅越来越多地面对海量数据,更迫切需求信息的挖掘和决策的制定,从而推动数据管理技术的进一步发展。
1.1.5 数据库系统的体系结构
从数据库管理系统角度看,数据库系统通常采用三级模式结构,即数据库系统由外模式、模式和内模式三级组成,如图1-1所示。
图1-1 数据库系统三级模式结构图
* 模式:模式也称逻辑模式或概念模式,是数据库中全体数据的逻辑结构和特性的描述,是所有用户的公共数据视图。模式和数据的物理存储及硬件无关,也和使用的应用程序无关。一个数据库只有一个模式。
* 外模式:外模式也称子模式或用户模式,是数据库用户能够使用的部分数据的逻辑结构和特征的描述,是用户的数据视图。外模式面向用户,描述用户所关心的数据,是模式的子集。一个数据库可以有多个外模式。
* 内模式:内模式也称物理模式或存储模式,是数据库中数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。一个数据库只有一个内模式。
数据库系统的三级模式满足了数据库的不同层面的需求。数据库管理系统在三级模式结构之间提供了两层映像,即外模式/模式映像和模式/内模式映像。这种两层映像机制保证了数据库系统的数据独立性。数据独立性包括逻辑独立性和物理独立性。
* 外模式/模式映像:每个外模式和模式之间存在外模式/模式映像,是外模式所描述的数据局部逻辑结构和模式所描述的全局逻辑结构之间的对应关系。当模式改变时,只要修改外模式/模式的映像,使得外模式保持不变,那么使用外模式的应用程序也保持不变,从而保证了数据的逻辑独立性。逻辑独立性将数据库的结构与应用程序相分离,减少了修改应用程序的工作量。
* 模式/内模式映像:模式和内模式之间存在模式/内模式映像,是模式所描述的全局逻辑结构和内模式所描述的物理存储结构之间的对应关系。当内模式改变时,只要修改模式/内模式的映像,使得模式保持不变,那么外模式以及相关的应用程序都不用修改,从而保证了数据的物理独立性。
1.2 数 据 模 型
1.2.1 数据模型的概念
数据模型是数据库的核心和基础,是对现实世界的抽象描述。数据模型描述现实世界的数据、数据之间的联系、数据的语义和完整性约束。数据模型应能够比较真实地模拟现实世界,容易被人们理解,便于在计算机上实现。通过数据模型的建立,人们完成了从现实世界到信息世界和机器世界之间信息的抽象和表示,使得现实中的问题通过计算机系统得到精准的描述和解决。
1.2.2 数据模型的组成
数据模型描述了数据库系统的静态特征、动态特征和完整性约束条件。数据模型包括数据结构、数据操作和完整性约束3个部分。
1. 数据结构
数据结构是数据库中所有对象类型的集合,是对系统静态特征的描述。数据结构是数据模型的核心。通常根据数据模型中数据结构的类型来命名数据模型,如将采用层次结构、网状结构和关系结构的数据模型命名为层次模型、网状模型和关系模型。
2. 数据操作
数据操作是基于数据结构并对数据库中对象可执行的操作和操作规则的集合,是对系统动态特征的描述。数据操作主要包括数据库中数据的插入、更新、修改和查询的操作。数据模型必须定义这些操作的确切含义、操作符号、操作规则及实现操作的语言。
3. 完整性约束
完整性约束是一组完整性规则的集合。完整性约束规定了数据模型中的数据本身及数据之间所需要遵守的约束条件,以便确保数据库中数据的正确、有效和相容。
1.2.3 数据模型的类型
用计算机解决现实中的问题,这其实就是建立不同阶段的数据模型的过程。通过建立不同阶段的数据模型,人们将现实世界的特征抽象出来,然后转化为能用计算机建立的模型,从而达到解决实际问题的目的。
根据数据建模的不同阶段,数据模型分为概念数据模型、逻辑数据模型和物理数据模型3个类型。
1. 概念数据模型
概念数据模型,也称概念模型,能够真实地反映现实世界,包括事物和相互之间的联系,能满足用户对数据的处理要求,是表示现实世界的一个抽象模型。概念数据模型是用户与数据库设计人员之间进行交流的语言。概念数据模型不依赖于特定的数据库管理系统,但可以转换为特定的数据库管理系统所支持的数据模型。因此,概念数据模型要易于理解、易于扩充和易于向各种类型的逻辑数据模型转换。
概念数据模型有实体-联系模型、面向对象的数据模型、二元数据模型、语义数据模型、函数数据模型等。下面主要介绍实体-联系(E-R)模型。
实体-联系模型是采用E-R图来描述现实世界的概念模型。E-R图由简单的图形构成,可以直观地表示现实世界中各类对象的特征和对象之间的联系。
1)??E-R图的介绍
E-R图的组成元素包括实体集、属性、联系。E-R图中,实体集用矩形表示,内有实体集名称;属性用椭圆形表示,内有属性名称,并以直线与所属实体集或联系相连;联系用菱形表示,内有联系名称,并以直线与实体集相连,并在联系旁边注明联系的类型(1∶1、1∶n或者m∶n)。如果联系有属性,那么也要用直线将属性和联系相连。
2) 实体-联系模型中的基本概念
(1) 实体:实体是现实世界中可区分的客观对象或抽象概念。例如,一个学生、一门课程。
(2) 属性:属性是实体所具有的特征。一个实体往往有多个属性。例如,每个学生都有学号、姓名、性别、班级、出生日期等属性。
(3) 实体集:实体集是具有相同属性描述的实体的集合。例如,所有学生、所有课程。
(4) 实体型:实体型将实体集抽象为实体的名称和所有属性来表示该类实体。例如,学生(学号,姓名,性别,班级,出生日期)就是学生实体集的实体型。
(5) 码:码也称键,是可以将实体集中每个实体进行区分的属性或属性集。例如,每个学生的学号绝不相同,学号这个属性可以作为学生实体集的键。
(6) 域:域是实体集的各个属性的取值范围。例如,学生的性别属性取值为“男”或“女”。
(7) 联系:两个实体集之间存在一对一、一对多和多对多3种联系。例如,一个班主任只管理一个班级,一个班级只有一个班主任,班主任和班级之间是一对一的联系;一个班级有多个学生,一个学生只属于一个班级,班级和学生之间是一对多的联系;一门课程有多个学生选修,一个学生选修多门课程,课程和学生之间是多对多的联系。两个实体集之间的3种联系如图1-2所示。
?(a)??1∶1联系 ? (b)??1∶n联系 (c)??m∶n联系
图1-2 两个实体集之间的联系图
单一实体集之间也存在一对一、一对多和多对多3种联系。例如,领导和职工之间,一个领导可以管理多个职工,而领导本人也是职工,如图1-3所示。
两个以上的实体集之间也存在一对一、一对多和多对多3种联系。例如,一门课程由多个教师讲授,一门课程有多个学生学习,一个学生的一门课程可能由多个教师讲授(因为有可能存在补考和重修),如图1-4所示。
图1-3 单个实体集之间的一对多联系图 图1-4 3个实体集之间的多对多联系图
班主任、班级、学生、课程4个实体集组成的E-R图如图1-5所示。
图1-5 班主任、班级、学生、课程实体集的E-R图
2. 逻辑数据模型
逻辑数据模型,也称逻辑模型,是与特定的数据库管理系统相关的数据模型。逻辑模型设计的要求是把概念模型转换成所选用的数据库管理系统所支持的特定类型的逻辑模型。
现有的逻辑模型主要包括层次模型、网状模型和关系模型。
1) 层次模型
层次模型的总体结构为树形结构,其中结点表示记录类型,每个记录类型包含多个字段,结点之间的连线表示记录类型之间的联系。层次模型有且只有一个根结点,除根结点外的所有结点向上有且只有一个父结点,向下可以有一个或多个子结点。层次模型的优点是数据结构简单,完整性支持良好,但仅适用于数据具有层次性联系的场合,插入和删除结点操作的限制较多,查询必须逐级通过父结点。
2) 网状模型
网状模型允许每个结点有零个或多个父结点,还允许结点之间有多个联系。网状模型较层次模型相比更接近现实,存取效率高,但数据独立性复杂,在存取时要指定路径,应用程序访问困难。
3) 关系模型
关系模型建立在严格的数学概念基础上,是当前流行的逻辑模型。以二维表为基本结构所建立的模型称为关系模型。关系模型中,表是基础逻辑结构,由行和列组成,如表1-1所示。
表1-1 教师信息表
教师工号
姓 名
性 别
出生日期
职 称
09001
王斌
男
1975-3-26
副教授
09002
李梅
女
1977-6-2
讲师
09003
金志明
男
1957-12-15
教授
09004
王思思
女
1981-3-2
助教
关系模型中以表来表示实体以及实体之间的联系,以表来存储记录,数据结构简单,存取路径透明,具有良好的数据独立性和安全保密性。关系模型中的基本概念如下。
* 关系:表。
* 元组:也称记录,是表中的一行,代表该关系所包含的一个实体。
* 属性:也称字段,是表中的一列,代表该关系所具有的一个特性。
* 码:表中可以唯一确定一个元组的属性或者属性组。
* 候选码:表中所有可以唯一确定一个元组的属性或者属性组的集合。其中,属性组中应没有可去除的属性。
* 主码:表中唯一确定一个元组的属性或者属性组。一个表只能有一个主码。
* 外码:不是表中的码,但与另一个表中的主码相对应的属性或者属性组。
* 域:属性的取值范围。
* 分量:一个元组中的某个属性值。
* 关系模式:对关系的描述,可写成“关系名(属性1,属性2,…,属性n)”。
关系具有以下7个性质。
* 关系中元组的个数有限。
* 关系中的元组不能重复,
* 关系中的元组可以交换顺序。
* 关系中的属性具有原子性,不可分解。
* 关系中各属性的名称不能重复。
* 关系中的属性可以交换顺序。
* 关系中各元组同一属性值的值域是相同的。
关系模型的数据操作主要包括查询、插入、更新和删除。
关系模型的完整性分为实体完整性、参照完整性和域完整性3类。其中,实体完整性是指关系的主码值不能为空值;参照完整性是指关系的外码值必须为空值或者等于所对应主码所在关系中某个元组的主码值;域完整性是指关系的属性值满足特定的语义要求。
1.2.4 数据库的规范化
既然关系模型是用关系来保存数据,那么是不是关系中只要能装入所有数据就行了呢?答案是否定的。关系模式不是随意设计的。关系模式设计不佳,会导致后续使用出现如数据冗余量过大、插入异常、更新异常、删除异常等问题。
因此,关系模式的设计必须满足一定的标准,这个标准就是范式。关系数据库中的关系模式必须满足一定级别的范式。范式是符合某一种级别的关系模式的集合。目前,关系模式有6种范式,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、改进的第三范式(BCNF)、第四范式(4NF)和第五范式(5NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式依次类推。
第一范式是指关系模式的每一个属性都是不可分割的基本数据项,同一行同一列中不能有多个值。在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库。例如,学生表包含学号、学生姓名、班级编号和联系方式,其中联系方式不能将电话、地址和邮编3类数据合在一列中显示,解决的方法是在学生表中设置电话、地址和邮编3个属性,分别保存这3部分数据。
第二范式建立在第一范式的基础上,即满足第二范式必须先满足第一范式。第二范式要求关系模式的非主属性完全函数依赖于码,不能存在对码的部分函数依赖。例如,成绩表包含学号、学生姓名、班级编号、课程编号、成绩,主码是学号、课程编号和班级编号。但是,只知道学号和课程编号就可以查出该学生的成绩,不需要知道学生的班级编号,因此成绩表的现有结构不符合第二范式。这样设计的表在使用中有很多问题,插入一个学生的所有课程成绩将反复插入该生的基本信息,如果删除该生的所有课程成绩将导致删除该生的基本信息,如果该生的基本信息有变化又需要将其所有的成绩记录进行更新。为了解决数据冗余和重复操作的问题,可以将其中的学号和班级编号分解出来,形成学生表,原有的成绩表保留学号、学生姓名、课程编号和成绩。学生表的主码是学号,成绩表的主码是学号和课程编号,这样调整使得两个表均满足第二范式。
第三范式建立在第二范式的基础上,要求关系模式中的非主属性不依赖于其他非主属性,也就是不存在传递依赖。例如,班级表包含班级编号、班级名称、系编号、系名称,主码是班级编号。如果插入同一个系的两个班级的信息,将产生两条记录,其中系编号和系名称完全一样。其实,系编号决定了系名称,这样又会产生大量的数据冗余。可以添加系表,系表包含系编号、系名称、系简介,主码是系编号,在班级表中删除系名称和系简介,添加系编号。这样使得关系模式满足第三范式。
BCNF建立在第三范式的基础上,是指关系模式的所有非主属性完全函数依赖于码,所有主属性完全函数依赖于不包含它的码,没有属性完全函数依赖于非码的任何属性组。例如,排课表包含课程编号、教师编号和学号。一名教师教一门课程,一名学生上一门课程,一门课程有多名教师任教。由此可见,知道学号和教师编号便可推断课程编号,但根据教师编号也可以推断课程编号。这个关系模式有学号和教师编号及教师编号两个码,虽然满足第三范式,但不满足BCNF。可以将这个关系模式分解成任教表和选课表,任教表包含教师编号和课程编号,选课表包含学号和教师编号。这两个关系模式满足了BCNF。
第一范式到第五范式的6种范式之间的关系:第五范式高于第四范式高于BCNF高于第三范式高于第二范式高于第一范式。但并不是说关系模式分解的数量越多越好,表的数量过多反而会导致连接操作的代价增大,影响数据库的使用效率。一般说来,工程项目中关系数据库设计只需满足第三范式(3NF)就行了。
1.3 关 系 代 数
关系模型的数据结构是关系,也就是表。对于关系中元组的操作包括插入、更新、删除和查询4种。这些操作可以使用数学理论来进行表述,其中最重要的是关系代数。
1.3.1 传统的集合运算
关系代数中,传统的集合运算包括并、差、交和笛卡儿积。
(1) 并:假设关系R和关系S,R和S的关系模式完全一样,则R和S并运算的结果是由关系R和关系S中所有的元组组成(重复元组需要去除),记作R∪S,如图1-6所示。
图1-6 并运算示意图
(2) 差:假设关系R和关系S,R和S的关系模式完全一样,则R和S差运算的结果是仅存在于关系R而不存在于关系S的元组组成,记作R-S,如图1-7所示。
图1-7 差运算示意图
(3) 交:假设关系R和关系S,R和S的关系模式完全一样,则R和S交运算的结果是由关系R和关系S共同存在的元组组成,记作R∩S,如图1-8所示。
图1-8 交运算示意图
(4) 笛卡儿积:假设关系R和关系S,则R和S笛卡儿积运算的结果是由关系R的元组和关系S的元组拼接组成,笛卡儿积的关系模式同样也是R和S的关系模式的拼接结果,记作R×S,如图1-9所示。
图1-9 笛卡儿积运算示意图
1.3.2 专门的关系运算
关系代数中,专门的关系运算包括选择、投影、连接和除运算。
在使用关系运算时,往往还会使用到比较运算符和逻辑运算符。比较运算符包括>、>=、<、<=、=和<>(代表不等于)。逻辑运算符包括∧(与)、∨(或)和非(?)。比较运算符和逻辑运算符可以组合使用,就是逻辑表达式。例如,a=0、b<3∧c>=10、?(a='abc'∧b<10)。逻辑表达式的结果只能为逻辑值“真”或者“假”。
(1) 选择:选择运算是在关系R中选择满足给定条件F的元组,记作?F(R),其中的F是一个逻辑表达式。选择运算是对关系进行水平分解,也就是说运算结果的模式和原关系的模式完全一样。例如,在关系R中选择属性A值为“a”并且属性C值为1的元组,表达式写作?A='a'∧C=1(R),如图1-10所示。
?A='a'∧C=1(R)也可以写作?1='a'∧3=1(R),这里的1='3'的意思是第一属性列的值等于3,3=1的意思是第三属性列的值等于1。
(2) 投影:选择运算是在关系R中选择所需的属性列,记作?A(R),其中的A是R中的属性列。投影运算是对关系进行垂直分解,也就是说运算结果的模式和原关系的模式不完全一样,属性列少于或等于原有关系,如果出现重复行则需要去除。例如,在关系R中对属性A和属性B进行投影,表达式写作A,B(R),如图1-11所示。
图1-10 选择运算示意图 图1-11 投影运算示意图
(3) 连接:连接也称?连接。连接运算是从关系R和关系S的笛卡儿积运算结果中选择属性值之间满足条件的元组,记作。其中,i和j分别是关系R和关系S上的属性组,值具备可比性,?是比较运算符。
连接运算中有两种最重要的运算,分别是等值运算和自然连接。等值运算是指?为“=”的连接运算。等值运算从是从关系R和关系S的笛卡儿积运算结果中选择属性值相等的元组,记作。自然连接将关系R和关系S中相同属性组具有相同值的元组进行等值连接,结果中相同属性需要去重,记作RS。连接、等值连接和自然连接如图1-12所示。
(4) 除:假设关系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上投影的集合。记作R÷S,如图1-13所示。
图1-12 连接、等值连接、自然连接运算示意图
图1-13 除运算示意图
1.4 数据库设计的方法和步骤
数据库设计是指将基于特定的信息内容、操作方法和应用环境来设计数据库的数据模式。数据库设计的目标是为用户提供一个高效、安全的数据库,满足用户的使用需求。大型数据库设计是一项复杂的工程,要求数据库设计人员既要具有坚实的数据库知识,还要具备应用系统开发的能力,同时要了解应用系统的业务使用。因此,数据库设计是一项涉及多学科的综合性技术。系统设计师、程序设计师、数据库管理员和用户代表也应参与整个数据库设计过程。
1.4.1 数据库设计的方法
目前常用的各种数据库设计方法都属于规范设计法,即都是运用软件工程的思想与方法,根据数据库设计的特点,提出了各种设计准则与设计规程。这种工程化的规范设计方法也是在目前技术条件下设计数据库的最实用的方法。规范设计法中,最著名的是新奥尔良(New Orleans)方法。新奥尔良方法采用软件工程的思想,按照软件开发生命周期来完成数据库的设计,开发过程采取工程化方法,按照步骤来进行,确保数据库设计的质量。
1.4.2 数据库设计的步骤
按照常用的规范设计法——新奥尔良方法来划分,数据库设计分为6个阶段,即需求分析、概念设计、逻辑设计、物理设计、数据库的实施和部署、数据库的运行和维护。
1. 需求分析
需求分析的内容是充分调查研究,收集基础数据,了解系统运行环境,明确用户需求,确定新系统的功能,最终得到系统需求分析说明书,作为设计数据库的依据。需求分析所调查的重点是数据和处理,以获得用户对数据库的以下要求:①用户需要从数据库中获得信息的内容与性质;②用户要完成什么处理功能,处理有哪些业务规则;③数据操作、系统吞吐量、并发访问的性能要求;④安全性和数据完整性的要求;⑤数据库及其应用系统的环境要求。
在做需求分析时,首先要了解用户单位的组织机构组成,然后调查用户单位的日常业务活动流程。在此基础上,明确用户的信息需求和系统概念需求,明确用户对系统的性能和成本的要求,确认数据项,产生系统需求说明书。需求分析的调查方法包括跟班作业、开调查会、请专人调查、发放用户调查表和查阅原系统有关记录。
经过需求分析,可以产生数据字典、数据流图、判定表和判定树等。①数据字典是系统中所有数据及其处理的描述信息的集合。数据字典由数据项、数据结构、数据流、数据存储、处理过程组成。②数据流图是结构化分析方法中使用的图形化工具,描绘数据在系统中流动和处理的过程。数据流图中包括数据流、数据源、对数据的加工处理和数据存储。数据流图根据层级不同分为顶层数据流图、中层数据流图和底层数据流图。顶层数据流图经过细化可以产生中层数据流图和底层数据流图。③判定表和判定树是描述加工的图形工具,分别是表格和树状结构,适合描述问题处理中具有多个判断,而且每个决策与若干条件有关。判定表和判定树给出判定条件和判定决策,以及判定条件的从属关系、并列关系、选择关系。
2. 概念设计
概念设计的任务是根据需求分析说明书对现实世界进行数据抽象,建立概念模型。概念模型的作用是与用户沟通,确认系统的信息和功能,与数据库管理系统无关。
概念设计方法有4种,分别是自顶向下、自底向上、逐步扩张和混合策略。①自顶向下是指先设计概念模型的总体框架,再逐步细化。②自底向上是指先设计局部概念模型,再合并成总体。③逐步扩张是指先设计概念模型的主要部分,再逐步扩充。④混合策略是指将自顶向下和自底向上相结合,先设计概念模型的总体框架,再根据框架来合并各局部概念模型。
概念模型有实体-联系模型、面向对象的数据模型、二元数据模型、语义数据模型、函数数据模型等。
采用实体-联系模型进行概念模型设计的步骤如下。
(1) 设计局部实体-联系模型。具体任务是确定局部实体-联系模型中的实体、实体的属性、关键字、实体之间的联系和属性,画出局部E-R图。
(2) 设计全局实体-联系模型。具体任务是合并局部E-R图,生成全局E-R图,并消除局部E-R图合并时产生的冲突。这里的冲突包括属性冲突、命名冲突和结构冲突,仅在合并E-R图时才会发现。①属性冲突是指同名的属性的类型、值域或单位不同;②命名冲突是指业务内容相同的属性命名不同或业务内容不同的属性命名相同;③结构冲突是指实体在其他图中作为联系或属性出现,或是同一实体的属性不同。
(3) 优化全局E-R模型。具体任务是修改全局E-R图,消除冗余属性、消除冗余联系,得到最终的E-R图。
3. 逻辑设计
逻辑模型设计的任务是把概念模型转换为所使用的数据库管理系统所支持的逻辑模型,定义数据完整性、安全性,评估性能。
将实体-联系模型转换成关系模型的步骤如下。
(1) 将E-R图转换为关系模式集合。在转换时,E-R图中的一个实体转换为一个关系模式,实体的属性转换为关系模式的属性,实体的码转换为关系模式的关键字。E-R图中的联系也要进行转换,转换方法如下:①一对一的联系可以转换成单个关系模式,也可以与任意一端的实体型转换成的关系模式合并;②一对多的联系可以转换成单个关系模式,也可以与多端的实体型转换成的关系模式合并;③多对多、3个及3个以上的联系只能转换成单个关系模式。
(2) 对关系模式集合进行规范化处理,满足一定的范式。规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新。在对关系模式进行规范化时,必须遵从概念单一化原则,即一个关系模式描述一个实体或实体间的一种联系。规范化的操作方法是确定数据依赖,用关系来表示E-R图中的所有实体,对所有数据依赖进行极小化处理,对需要分解的关系模式逐一进行分解,分解后的关系模式集合必须保证不丢失原有关系的信息。实际操作时,并不一定要求全部模式都达到BCNF,有时会故意保留部分冗余便于数据查询。
(3) 设计外模式。外模式是提供给数据库不同用户的使用接口。对于关系数据库来说,外模式就是视图。视图能够为用户屏蔽不需要的数据库结构,按用户的需求显示数据库中的数据。同时,视图使得用户在使用数据库时,只能使用被视图引用的数据,而不能使用数据库中其他数据,保证了数据库的安全性。在数据库结构发生变化时,只需要修改视图的定义,用户的使用接口保持不变,从而保证了与数据库相关的应用程序无须修改,达到了数据独立性。
(4) 评价数据库性能并优化关系模式。
4. 物理设计
物理设计是要选取一个最适合数据库的应用环境的物理结构,包括数据库的存储记录格式、存储记录安排和存取方法,使得数据库具有良好的响应速度、足够的事务流量和适宜的存储空间。它与系统硬件环境、存储介质性能和DBMS有关。
在关系模型数据库中,物理设计主要包括存储记录结构的设计、数据存放位置和存取方法。其中,存储记录结构包括记录的组成、数据项的类型和长度,以及逻辑记录到存储记录的映像。数据存放位置是指是否要把经常访问的数据结合在一起。存取方法是指聚集索引和非聚集索引的使用。物理设计还要对综合分析影响数据库的因素,确定系统配置,建立最优化设计方案,使空间利用率达到最大,系统数据操作负荷最小。
5. 数据库的实施和部署
数据库实施的内容包括使用数据库管理系统创建实际数据库结构、加载初始数据、编制和调试相应的应用程序、测试数据库及其应用程序。
数据库部署的内容是指将完成并通过测试的数据库及其应用程序,包括相关的系统软件安装在规定的硬件平台上,在数据库中装入完整的数据,配置系统运行环境,对系统的用户进行操作培训,提交用户手册及系统使用文档。
6. 数据库的运行和维护
数据库的运行和维护主要是由数据库管理员来负责。数据库的运行和维护主要包括调整数据库的结构,重组与重构数据库,调整数据库的安全性和完整性条件,制定合理的数据备份计划,完成备份以及故障恢复任务,监控数据库性能并优化数据库结构。
1.5 小型案例实训
创建一个学生成绩数据库,所涉及的信息包括校内所有的系、班级、学生、课程、教师和学生成绩。
学生成绩数据库的信息内容如下:每个系有系号、系名和系主任,每个班级有班号、班名、入学年份、人数、系号和班主任,每个学生有学号、姓名、性别、出生日期,每门课程有课程号、课程名、学分和学时,每个教师有教师号、姓名、性别、出生日期、职称。每位学生属于一个班级,每个班级属于一个系,每个班级有一个班主任,每个系有一个系主任,每个学生修多门课程,每门课程有多个学生选修,并有课程成绩。学生成绩需要记录该课程的授课教师、学期、成绩。
先画出学生成绩数据库的E-R图,再转换成关系模型。E-R图和关系模式中加下划线的属性分别是该实体集的和关系模式的主码。
由题意可知,学生成绩数据库E-R图中包含5个实体,即系、班级、学生、课程和教师。各实体的属性设计如下:系(系号,系名,系主任号),班级(班号,班名,入学年份,人数,系号,班主任号),学生(学号,姓名,性别,出生日期,班号),课程(课程号,课程名,学分,学时),教师(教师号,姓名,性别,出生日期,职称,系号)。各实体之间的联系包括:班级与系之间的隶属关系,学生与班级之间的隶属关系,教师与系之间的隶属关系,学生选修课程之间的“选修”联系,“选修”联系应有成绩属性。根据以上分析,得到学生成绩数据库的E-R图,如图1-14所示。
图1-14 学生成绩数据库E-R图
根据学生成绩数据库E-R图,转换得到学生成绩数据库关系模式如下。
系(系号,系名,系主任号)
班级(班号,班名,入学年份,人数,系号,班主任号)
学生(学号,姓名,性别,出生日期,班号)
课程(课程号,课程名,学分,学时)
教师(教师号,姓名,性别,出生日期,职称,系号)
成绩(学号,课程号,教师号,成绩,学期)
小 结
数据库(Database,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。数据库中的数据是按照一定的数据模型组织、描述和存储的,有较小的冗余度、较高的数据独立性和易扩展性。
数据库管理系统(Database Management System,DBMS)是使用和管理数据库的系统软件,位于用户与操作系统之间,负责对数据库进行统一的管理和控制。所有对数据库的操作都交由数据库管理系统完成,这使得数据库的安全性和完整性得以保证。
数据库系统(Database Systems,DBS)是指在计算机系统中引入了数据库的系统,专门用于完成特定的业务信息处理。数据库系统包括硬件、软件和用户。其中,软件包括数据库、数据库管理系统、操作系统、应用开发工具和数据库应用程序。用户包括系统分析员、数据库设计人员、程序开发人员、数据库管理员和系统用户。数据库系统的核心是数据库管理系统。
数据管理技术是指对数据进行分类、组织、编码、存储、检索和维护的技术。数据管理技术的发展大致划分为3个阶段,即人工管理阶段、文件系统阶段和数据库系统阶段。
从数据库管理系统角度看,数据库系统通常采用三级模式结构,即数据库系统由外模式、模式和内模式三级组成。两层映像机制保证了数据库系统的数据独立性,数据独立性包括逻辑独立性和物理独立性。
数据模型是数据库系统的核心和基础,是对现实世界的抽象描述。数据模型描述现实世界的数据、数据之间的联系、数据的语义和完整性约束。数据模型包括数据结构、数据操作和完整性约束3部分。数据模型分为概念数据模型、逻辑数据模型和物理数据模型3类。
实体-联系模型是采用E-R图来描述现实世界的概念模型。E-R图的组成元素包括实体集、属性和联系。
现有的逻辑模型主要包括层次模型、网状模型和关系模型。以二维表为基本结构所建立的模型称为关系模型。
关系数据库中的关系模式必须满足一定级别的范式。目前关系模式有6种范式,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、改进的第三范式(BCNF)、第四范式(4NF)和第五范式(5NF)。一般说来,工程项目中关系数据库设计只需满足第三范式(3NF)即可。
关系代数中,传统的集合运算包括并、差、交和笛卡儿积,专门的关系运算包括选择、投影、连接和除运算。
目前常用的各种数据库设计方法都属于规范设计法,最著名的是新奥尔良(New Orleans)方法。按照常用的规范设计法——新奥尔良方法来划分,数据库设计分为6个阶段,即需求分析、概念设计、逻辑设计、物理设计、数据库实施和部署、数据库运行和维护。
习 题
1. 填空题
(1) 数据库是一个____________________________________的数据集合。数据库中的数据是按照一定的____________________________________组织、描述和存储的,有较小的_______________________________、较高的__________________________________和____________________________________。
(2)??__________________________用于建立和修改数据库的库结构,数据库管理系统提供__________________________来完成该功能。________________________用于用户对数据库插入、更新、删除和查询数据,数据库管理系统提供__________________________来完成该功能。______________________________确保数库系统的正常运行,内容包括多用户环境下的并发控制、安全性检查、存取限制控制、完整性检查、日志的管理、事务的管理和发生故障后数据库的恢复,数据库管理系统提供____________________________来完成该功能。
(3) 数据库系统包括硬件、软件和用户。其中,软件包括_______________________。用户包括_____________________。数据库系统的核心是__________________________。
(4) 数据管理技术的发展大致划分为3个阶段,即___________________________、____________________________和_______________________________。
(5) 从数据库管理系统角度看,数据库系统通常采用三级模式结构,即数据库系统由_______________________________三级组成。_______________________________保证了逻辑独立性,________________________________保证了物理独立性。
(6) 数据模型包括____________________________、__________________________和____________________________3部分。
(7) 根据数据建模的不同阶段,数据模型分为_________、________和________三类。
(8)??____________________________是用户与数据库设计人员之间进行交流的语言。
(9)??____________________________是采用E-R图来描述现实世界的概念模型。E-R图的组成元素包括___________________________。___________________________用矩形表示,____________________________用椭圆形表示,___________________________用菱形表示,两个实体集之间存在_____________________________3种联系。
(10) 现有的逻辑模型主要包括____________________________________。
(11) 以____________________________________为基本结构所建立的模型称为关系模型。关系模型中,表是基础逻辑结构,由____________________________________组成。
(12) 第一范式是指___________________________。第二范式要求关系模式的非主属性完全函数依赖于码,不能存在对码的________________________。第三范式要求关系模式中的非主属性不依赖于其他非主属性,也就是不存在____________________________。_______________________________是指关系模式的所有非主属性完全函数依赖于码,所有主属性完全函数依赖于不包含它的码,没有属性完全函数依赖于非码的任何属性组。
(13) 关系代数中,传统的集合运算包括____________________________________,专门的关系运算包括____________________________________。
(14) 按照常用的规范设计法——____________________________________来划分,数据库设计分为6个阶段,即____________________________________。
2. 操作题
设计一个图书馆管理数据库。图书馆管理数据库的信息内容如下:
每种图书属于一个图书类别,每个图书类别有多种图书。每种图书有ISBN、书名、版次、类型、作者、出版社、价格、可借数量和库存数量。每种图书有多本。每本图书有图书编号、ISBN、状态和状态更新时间。
每个读者属于一个读者类型,每个读者类型有多个读者。每个读者有读者编号、姓名、类型、证件号、性别、联系方式、登记日期、有效日期、已借书数量和是否挂失。
每个读者可以借阅多本图书,每本图书可以被多次借阅。每次借阅记录有借阅编号、图书编号、读者编号、借阅日期、到期日期、处理日期和状态。
先画出图书馆管理数据库的E-R图,再转换成关系模型。
……