楠竹五校 楠竹五校 第1章数据库技术概述 本章通过网上购物系统示例,引入数据库系统;介绍数据库系统的组成、数据管理技术的发展历程和常见的关系型数据库系统,为数据模型的建立打下基础。 11数据库示例及概述 111应用系统示例 本节以网上购物系统为例,介绍数据库应用系统。 网上购物系统主要有以下功能。 1系统登录 系统登录界面如图11所示,请思考: 问题(1):系统如何判断所输入的用户名和密码正确? 图11系统登录界面 2商品信息的录入、修改、删除和查询 商品信息管理界面如图12所示,请思考: 问题(2):商品信息的维护由谁负责? 问题(3):商品信息更新后,为什么客户能及时得到更新后的商品信息? 图12商品信息管理 以上问题的答案如下。 问题(1):所有用户名和密码都存储在数据库中。网上购物系统只是一个应用程序,处理的数据必须从特定的数据源中提取,这个数据源就是数据库。 00 00 问题(2):商品信息的维护由商家根据实际进货、库存和销售情况完成。 问题(3):虽然客户和商家分布于不同的地理位置,但是他们通过网络共享数据库中的信息,操作对象是相同的。因此,商品信息会随着商家的更新而及时发生变化。 112数据库概述 111节的网上购物系统示例,充分展示了随着计算机与网络的普及,数字技术正改变人类赖以生存的社会环境,并因此使人类的生活和工作环境具备了更多的数字化特征。计算机技术的发展为科学有效地进行数据管理提供了先进的工具和手段,用计算机管理数据的方法已经渗透到社会的各个领域。 1数据与信息 数据是数据库系统研究和处理的对象,是用来记录信息的可识别的符号。数据用型和值来表示。数据的型是指数据内容存储在媒体上的具体形式(例如,姓名、地址);值是指所描述的客观事物的本体特性(例如,周四、上海市静安区)。数据在数据处理领域中涵盖的内容非常广泛,不仅包括数字、字母、文字等常见符号,还包括图形、图像、声音等媒体数据。 信息是消息,通常以文字、声音或图像的形式来表现。在软件开发过程中,所管理的很多文档中不同的数据条目通常附有相关的说明,这些说明就是起到了信息的作用。信息是反映客观世界中各种事物的特征和变化,并可借助某种载体加以传递的有用知识。 数据是信息的一种具体表示形式,信息是各种数据所包括的意义。信息可用不同的数据形式来表现,信息不随数据的表现形式而改变。例如,1980年10月1日与19801001。信息和数据的关系是:数据是信息的载体,是信息的具体表现形式。 2数据处理与数据管理 数据处理是将数据转换成信息的过程,其根本目的就是从大量的、已知的数据中,根据事物之间的固有联系和规律,通过对数据的收集、转换和组织,数据的输入、存储、合并、计算和更新,数据的检索和输出等过程,提取出有价值、有意义的信息,作为决策的依据。 数据管理是数据处理的中心问题,一般情况下,数据管理应包括以下3方面内容。 (1) 数据组织和数据保存。为了使数据能够长期保存,数据管理工作需要将得到的数据合理地分类组织,并存储在计算机硬盘等物理介质上。 (2) 数据维护。数据管理工作要根据需要随时进行增、删、改数据的操作,即增加新数据、修改原数据和删除无效数据。 (3) 数据查询和数据统计。数据管理工作要提供数据查询和数据统计功能,以便快速准确地得到需要的数据,满足各种使用要求。 数据库系统的核心任务是数据管理,数据库系统已成为计算机应用的一个重要分支,下面将详细介绍数据库管理技术的产生和发展。 3数据库管理技术的产生和发展 1) 人工管理阶段 20世纪50年代中期以前,计算机主要用于科学计算,相当于一个计算工具。当时的硬件状况是,外在只有纸带、卡片、磁带,没有磁盘等直接的存储设备,数据不保存在计算机内;软件状况是,没有操作系统,没有管理数据的专门软件;数据处理方式是批处理。数据的管理由程序员个人考虑安排,只有程序的概念,没有文件的概念;用户程序与物理地址直接关联,效率低,数据管理不安全灵活;数据与程序不具备独立性,数据成为程序的一部分,数据面向程序,即一组数据对应一个程序,导致程序之间大量数据重复。在人工管理阶段,应用程序与数据之间的对应关系可用图13表示。 图13人工管理阶段应用程序 与数据之间的对应关系 2) 文件系统阶段 从20世纪50年代后期到60年代中期,硬件方面已经有了磁盘、磁鼓等直接存取存储设备;软件方面,操作系统中已经有了专门的数据管理软件,一般称为文件系统;处理方式上不仅有了批处理,而且能够实时处理。所有文件由文件管理系统进行统一管理和维护。文件系统管理数据具有以下特点。 (1) 数据可以长期保存。由于计算机大量用于数据处理,数据需要长期保留在外存上反复进行查询、修改、插入和删除等操作。 (2) 由文件系统管理数据。由文件系统进行数据管理,文件系统把数据组织成相互独立的数据文件。程序和数据之间由文件系统提供存取方法进行转换,使应用程序和数据之间有了一定的独立性,程序员可以不必过多地考虑物理细节,将精力集中于设计算法,而且数据在存储上的改变不一定反映在程序上,大大节省了维护程序的工作量。 文件系统阶段存在数据冗余性、数据不一致性、数据联系弱、数据安全性差、缺乏灵活性等问题。文件系统阶段应用程序与数据之间的对应关系如图14所示。 3) 数据库系统阶段 自20世纪60年代后期以来,计算机管理的对象规模越来越大,应用范围越来越广,以文件系统作为数据管理手段已不能满足应用的需求,为解决多用户、多应用共享数据的需求,使数据为尽可能多的应用服务,出现了数据库技术和统一管理数据的专门软件系统——数据库管理系统(DBMS)。数据库系统阶段应用程序与数据之间的对应关系如图15所示。 图14文件系统阶段应用程序与 数据之间的对应关系 图15数据库系统阶段应用程序与 数据之间的对应关系 从文件系统到数据库系统,标志着数据管理技术的飞跃,下面详细讨论数据库系统的组成。 12数据库系统的组成 数据库系统(database system, DBS)一般由数据库(database, DB)、数据库管理系统(database management system, DBMS)、应用系统(application)、数据库管理员(administrator)和用户(user)组成,如图16所示。 图16数据库系统的组成 数据库系统的查询过程可以概括为:用户通过应用系统输入查询条件,应用系统将查询条件转化成数据库查询命令并提交给数据库管理系统,数据库管理系统接收到查询命令后,解析执行命令并在操作系统的帮助下从数据库中提取数据返回应用系统,再由应用系统以直观友好的格式显示出查询结果。 121数据库 数据库是按一定的数据模型组织、存储和使用的相关联的数据集合,不仅包括描述事物的数据本身,而且还包括相关事物之间的联系。 1数据库的分类 数据库可以分成两类:桌面型数据库和网络数据库。 1) 桌面型数据库 桌面型数据库,其主要特点如下。 (1) 主要运行在个人计算机上,操作系统通常为桌面型操作系统。 (2) 没有或只提供有限的网络应用功能。 (3) 提供功能较弱的数据库管理工具和功能较强的前端开发工具。 (4) 管理简单,使用方便。 (5) 主要应用于小型的数据库系统,满足日常小型办公需要。 对于并发用户数不多和安全性能要求不高的场合,使用桌面型数据库可以体现出管理简单、使用方便的优势。目前,许多小型的Web站点后台的数据库就是Access。 2) 网络数据库 网络数据库的主要特点如下。 (1) 运行在网络操作系统之上。 (2) 具有强大的网络功能和分布式功能,可以根据具体的情况组合成各种模式。 (3) 一般来说,数据库系统管理工具、前端开发工具和后台数据库是可以分离的。 (4) 技术先进,功能强大。 (5) 具有完备的数据库安全性。 2数据库的主要特点 数据库的主要特点有以下5个方面。 1) 数据实现集中控制,具有统一的数据结构 整个数据库按一定的结构形式构成,利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。 2) 实现数据共享 数据库系统从整体角度看待和描述数据,数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。用户可以同时存取数据且互不影响,大大提高了数据库的使用效率,同时数据共享可以大大减少冗余度、节约存储空间。 3) 减少数据的冗余度 由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据和数据冗余,维护了数据的一致性。 4) 数据的独立性 数据的独立性包括数据的物理独立性和数据的逻辑独立性。 物理独立性指,用户的应用程序与数据库物理结构是相互独立的,当数据的物理结构改变时,可以保持数据的逻辑结构不变,从而应用程序也不必改变。 逻辑独立性指,用户的应用程序与数据库的逻辑结构是相互独立的,应用程序是依据数据的局部逻辑结构编写,即使数据的逻辑结构改变了,应用程序也不必修改。 5) 具有安全控制机制 (1) 安全性控制:数据的安全性是指保护数据,以防止不合法使用造成数据的泄密、破坏、丢失、错误更新和越权使用,使每个用户只能按规定对某些数据以某些方式进行使用和处理。 (2) 完整性控制:数据的完整性是指数据的正确性、有效性、相容性和一致性。完整性检查是指将数据控制在有效的范围内,或保证数据之间满足一定的关系。 (3) 并发控制:当多个用户的并发进程同时存取、修改数据库时,可能会发生相互干扰而得到错误的结果或使数据库的完整性和一致性遭到破坏,因此必须对用户的并发操作加以控制和协调,使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用。 (4) 故障的发现和恢复:当计算机系统遭到硬件故障、软件故障、操作员误操作或恶意破坏时,可能会导致数据错误或数据全部、部分丢失,数据库必须及时发现故障和修复故障,从而防止数据被破坏。 122数据库管理系统 数据库管理系统(database management system, DBMS)是指数据库系统中对数据库进行管理的软件系统,是数据库系统的核心组成部分,数据库的一切操作,如查询、更新、插入、删除以及各种控制,都是通过数据库管理系统进行。 数据库管理系统是位于用户与操作系统之间的系统软件。数据库管理系统在操作系统支持下运行,借助于操作系统实现对数据的存储和管理,使用户方便地定义数据和操纵数据,使数据能被各种不同的用户共享,并能够保证数据的安全性、完整性、多用户对数据的并发使用以及发生故障后的数据恢复。数据库管理系统与用户之间的接口称为用户接口,提供给用户可使用的数据库语言。 1 数据库管理系统的主要功能 数据库管理系统种类很多,功能与性能方面存在一定的差异。通常,数据库管理系统的功能包含以下6方面。 1) 数据库定义 通过数据库管理系统提供的数据定义语言对数据库的数据对象进行定义,实现全局逻辑结构、局部逻辑结构、物理结构定义以及权限定义等。 2) 数据操作 通过数据操纵语言实现对数据库的各种操作功能,如查询、排序、统计、输入、输出、添加、插入、删除、修改等功能。 3) 数据库运行管理 管理数据库的运行是数据库管理系统运行时的核心工作,包括对数据库进行并发控制、安全性检查、完整性约束条件的检查和执行、数据库的内部维护等。所有访问数据库的操作都要在这些控制程序的统一管理下进行,以保证数据的安全性、完整性、一致性以及多用户对数据库的并发使用、发生故障后的系统恢复。 4) 数据组织、存储和管理 数据库中需要存放多种数据,如数据字典、用户数据、存取路径等,数据库管理系统负责组织、存储和管理这些数据,确定以何种文件结构和存取方式组织这些数据,如何实现数据之间的联系,以便提高存储空间利用率以及随机查找、顺序查找、增加、删除、修改等操作的时间效率。 5) 数据库的建立和维护 建立数据库,包括数据库初始数据的输入与数据转换等。维护数据库,包括数据库的转储与恢复、数据库的重组织与重构造、性能的监视与分析等。 6) 数据通信功能 数据库管理系统需要提供与其他软件系统进行通信的功能,具备与操作系统的联机处理、分时系统及远程作业输入的相应接口。例如,提供与其他数据库管理系统或文件系统的接口,从而能够将数据转换为另一个数据库管理系统或文件系统能够接受的格式,或者接收其他数据库管理系统或文件系统的数据。 2 数据库管理系统的组成 为了提供上述6方面的功能,数据库管理系统通常由下列4部分组成。 1) 数据定义语言及其编译程序 数据定义语言(data definition language,DDL)用于定义数据库和有关约束条件,通过数据描述语言编译器将其翻译成相应的内部表示,保存在数据字典中。 2) 数据操纵语言或查询语言及其编译(或解释)程序 数据操纵语言(data manipulation language, DML)提供对数据库的数据进行检索、修改、插入和删除等基本操作。DML分为宿主型DML和自主型DML两类。宿主型DML不能独立使用,必须嵌入主语言中,如嵌入C、COBOL、FORTRAN等高级语言中。自主型DML是交互式命令语言,语法简单,通常由一组命令组成,可以独立使用进行简单的检索、更新等操作。 3) 数据库运行控制程序 数据库运行控制程序是数据库管理系统的核心,负责数据库运行过程中的控制与管理,包括系统初启程序、文件读写与维护程序、存取路径管理程序、缓冲区管理程序、安全性控制程序、并发控制程序、完整性检查程序、运行日志管理程序和数据库内部维护程序等,在数据库运行中监视着对数据库的所有操作,控制管理数据库资源,处理多用户的并发操作等。 4) 实用程序 数据库管理系统通常还提供一些实用程序,包括数据初始装入程序、数据转储程序、数据库恢复程序、性能监测程序、数据库再组织程序、数据转换程序、通信程序等。数据库用户可以利用这些程序完成数据库的建立与维护,以及数据格式的转移与通信。 123数据库管理员和用户 数据库管理员(administrator)和用户(user)主要指存储、维护和查询数据的各类使用者,可以分为以下3类。 1最终用户 最终用户(end user, EU)是应用程序的使用者,通过应用程序与数据库进行交互。例如,客户使用网上购物系统进行购物与查询时,客户就是最终用户。最终用户通过用户界面,使用数据库来完成其业务活动。 2应用程序员 应用程序员(application programmer, AP)是指开发数据库及应用程序的开发人员,通过编写应用程序,对数据库进行存取操作。数据库系统一般需要一个以上的应用程序员在开发周期内完成数据库结构设计、应用程序开发等任务;在后期管理应用程序,保证使用周期中对应用程序在功能及性能方面的维护、修改工作。 3数据库管理员 数据库管理员(database administrator, DBA)的职能是对数据库进行日常的管理,负责全面管理和控制数据库系统。每个数据库系统都需要有数据库管理员对数据库进行日常的管理与维护,数据库管理员的素质在一定程度上决定了数据库应用的水平,是数据库系统中重要的人员。数据库管理员的主要职责包括:设计与定义数据库系统;帮助最终用户使用数据库系统;监督与控制数据库系统的使用和运行;改进和重组数据库系统,优化数据库系统的性能;备份与恢复数据库;当用户的应用需求增加或改变时,数据库管理员需要对数据库进行较大的改造,即重新构造数据库。 124数据库应用系统 数据库应用系统介于用户和数据库管理系统之间,是指在数据库管理系统提供的软件平台上,结合各领域的应用需求开发的程序。该程序将用户的操作转换成一系列的命令执行,例如,实现商品信息统计、在线购物等。这些命令对数据库的数据进行查询、插入、删除和统计等,应用系统将这些复杂的数据库操作交由数据库管理系统来完成。数据库应用系统可以采用客户—服务器(C/S)模式应用系统和三层客户—服务器(B/S)模式应用系统。 图17C/S模式 1 C/S模式应用系统 客户—服务器(C/S)模式应用系统操作数据库方式如图17所示。由于应用程序直接与用户打交道,而数据库管理系统不直接与用户打交道,因而应用程序被称为“前台”,数据库管理系统被称为“后台”。由于应用程序向数据库管理系统提出服务请示,通常称为客户程序(client);而数据库管理系统为应用程序提供服务,通常称为服务器程序(server),这种操作数据库模式称为客户—服务器(C/S)模式。 0 0 2 B/S模式应用系统 基于Web的数据库应用采用三层客户—服务器模式,也称为B/S模式。第一层为浏览器,第二层为Web服务器,第三层为数据库服务器。浏览器是用户输入数据和显示结果的交互界面。用户在浏览器表单中输入数据,然后将表单中的数据提交并发送到Web服务器。Web服务器应用程序接收并处理用户的数据,通过数据库服务器,从数据库中查询需要的数据并返回给Web服务器。Web服务器再把返回的结果插入HTML页面,传送到客户端,在浏览器中显示出来。三层客户服务器结构如图18所示。 图18B/S模式 13数据库系统的体系结构 131数据库系统的三级组织结构 数据库系统的一个主要功能是为用户提供数据的抽象视图并隐藏复杂性。美国国家标准委员会(ANSI)所属标准计划和要求委员会在1975年颁布了一个关于数据库标准的报告,通过三个层次的抽象,提出了数据库的三级结构组织,这就是著名的SPARC分级结构。三级结构将数据库的组织从内到外分三个层次描述,如图19所示,这三个层次分别为概念模式、外模式和内模式。 图19数据库的三级结构 概念模式(以下简称模式)是对数据库的整体逻辑结构和特征的描述,是所有用户的公共数据视图,综合了所有用户的需求。一个数据库只有一个模式,并不涉及数据的物理存储细节和硬件环境,与具体的应用程序以及使用的应用开发工具无关。 外模式(或称子模式)通常是模式的一个子集。一个数据库可以有多个外模式,反映不同的用户的应用需求、看待数据的方式、对数据保密的要求;对模式中同一数据,在外模式中的结构、类型、长度、保密级别等都可以不同。外模式是数据库用户(包括应用程序员和最终用户)能够看到和使用的局部数据的逻辑结构和特征的描述,是与某一应用程序有关的数据的逻辑表示,一个应用程序只能使用一个外模式。 内模式(或称存储模式)具体描述了数据如何组织存储在存储介质上,是数据库在物理存储方面的描述,定义所有内容记录类型、索引和文件的组织方式,以及数据控制方面的细节。一个数据库只有一个内模式。 综上所述,3个模式反映了对数据库的3种不同观点:模式表示了概念级数据库,体现了对数据库的总体观;内模式表示了物理级数据库,体现了对数据库的存储观;外模式表示了用户级数据库,体现了对数据库的用户观。总体观和存储观只有一个,而用户观可能有多个,有一个应用,就有一个用户观。三级模式的优点:保证了数据独立性;保证了数据共享性;方便了用户使用数据库;有利于数据的安全和保密。 132三级模式之间的两层映像 数据库系统的三级模式是对数据的三个抽象级别,把数据的具体组织留给数据库管理系统管理,使用户能逻辑地、抽象地处理数据,而不必关心数据在计算机中的具体表示方式与存储方式。为了能够在内部实现这3个抽象层次的联系和转换,数据库管理系统在三级模式之间提供了两层映像,即外模式/模式映像和模式/内模式映像,正是这两层映像保证了数据库系统中的数据具有较高的逻辑独立性和物理独立性。 1外模式/模式映像 模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构。对应于同一个模式,可以有任意多个外模式。对于每一个外模式,数据库系统都有一个外模式/模式映像,定义该外模式与模式之间的对应关系。这些映像定义通常包含在各自外模式的描述中。 当模式改变时(例如,增加新的关系、新的属性,改变属性的数据类型等),由数据库管理员对各个外模式/模式映像作相应改变,以使外模式保持不变。应用程序是依据数据的外模式编写的,所以应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。 2模式/内模式映像 数据库中只有一个模式,也只有一个内模式,所以模式/内模式映像是唯一的,它定义了数据为全局逻辑结构与存储结构之间的对应关系。该映像定义通常包含在模式描述中,当数据库的存储结构改变了,由数据库管理员对模式/内模式映像作相应改变,以使模式保持不变,从而应用程序也不必改变,保证了数据与程序的物理独立性,简称数据的物理独立性。 14数据库系统的发展及研究领域 141数据库系统的三个发展阶段 模型是数据库技术的核心和基础,因此,对数据库系统发展阶段的划分是以数据模型的发展演变作为主要依据和标志的。按照数据模型的发展演变过程,数据库技术从开始到现在短短的几十年中,主要经历了三个发展阶段:第一代层次和网状数据库系统、第二代关系数据库系统和第三代以面向对象模型为主要特征的数据库系统。 1第一代层次和网状数据库系统 1) 层次模型 现实世界中很多事物是按层次组织起来的,层次数据模型的提出就是为了模拟这种按层次组织起来的事物。最著名的层次数据库系统是1969年IBM公司研制的信息管理系统(information management system,IMS),迄今为止已经发展到IMS 9。这个具有四十多年历史的数据库系统在如今的Web应用中仍扮演新的角色。 层次模型是最早出现的数据模型。由于现实世界中,很多实体之间的联系表现出层次特征,如行政管理的上下级关系、家庭中的父子关系等,使人们联想到使用层次关系组织实体。 满足两个条件的基本层次联系称为层次模型,如图110所示。 (1) 有且仅有一个结点无父结点,此结点就是树的根结点。 (2) 根结点以外的其他结点有且仅有一个父结点(也称双亲结点)。 在层次模型中,数据被组织成由“根”开始向下倒着生长的有向“树”,树的每一个结点代表一个实体类型,每个结点由根开始沿着不同的分支放在不同的层次上。如果不再向下分支,则此分支序列中最后的结点称为叶子,有相同父结点的结点称为兄弟结点。 支持层次数据模型的数据库管理系统称为层次数据库管理系统,在这种系统中建立的数据库是层次数据库。 图110层次模型示例 2) 网状模型 现实世界中实体间的联系不仅是层次关系,更多的是互有交互的网状关系。由于使用层次模型不能直接描述网状关系,所以出现了网状模型。在20世纪60年代末和70年代初,美国数据系统语言协会下发的数据库任务组(database task group,DBTG)提出了若干报告,被称为 图111网状模型示例 DBTG报告。DBTG报告确定并建立了网状数据库系统的概念、方法和技术,是网状数据库的典型代表。因为现实世界事物之间的联系更多的是非层次关系,所以用网状模型表示事物具有很大的优势。在数据库技术的发展史上,网状数据库系统占有重要地位。 满足下列两个条件的联系称为网状模型。 (1) 可以有一个以上的结点无父结点。 (2) 至少有一个结点有多于一个的父结点。 网状模型用有向图表示实体及其相互联系,图中的每一个结点代表一个实体型。网状模型可以方便地表示各种类型的联系,如图111所示。每个联系都代表实体之间一对多的联系,系统用单向或双向环形链接指针来具体实现这种联系。如果课程和选课人数较多,链接将变得相当复杂。网状模型的主要优点是表示多对多的联系具有很大的灵活性,这种灵活性是以数据结构复杂化为代价的。支持网状数据模型的数据库管理系统称为网状数据库管理系统,在这种系统中建立的数据库称为网状数据库。 2第二代关系数据库系统 1970年,IBM公司的San Jose研究试验室的研究员EFCodd发表了题为“大型共享数据库数据的关系模型”的论文,提出了关系数据模型,较好地解决了层次模型和网状模型存在的缺陷,开创了关系数据库方法和关系数据库理论,为关系数据库技术奠定了理论基础,并因此获得了1981年的ACM图灵奖。在20世纪70年代后,关系模型就取代层次模型和网状模型,占据了数据库市场的主导地位。 关系模型建立在数学中“关系”的基础上,有坚实的关系代数作基础。对用户而言,关系数据库是一组二维表,这种简单直观的数据组织形式很快就得以推广使用。关系模型用规范二维表(即关系)的形式表示实体和实体间联系,如图112所示。关系模型抽象级别比较高,便于理解和使用,能直接表示实体之间的多对多联系,具有更好的数据独立性。关系模型是目前主要采用的数据模型。 A1 A2 … Ai … Am V11 V12 … V1i … V1m V21 V22 … V2i … V2m       Vn1 Vn2 … Vni … Vnm 图112二维表 3第三代以面向对象模型为主要特征的数据库系统 自20世纪80年代以来,数据库技术在商业上的巨大成功刺激了其他领域对数据库技术需求的迅速增长。这些新的领域为数据库应用开辟了新的天地,并在应用中提出了一些新的数据管理需求,从而推动了数据库技术的研究与发展,衍生了一系列新型的数据库系统,统称为第三代数据库系统。第三代数据库系统继承了传统数据库的理论和技术,但又不是传统的数据库;在整体概念、技术内容、应用领域,甚至基本原理都有了重大的发展和变化。 第三代数据库系统的一个共同特点是支持面向对象模型,因此又称为以面向对象模型为主要特征的数据库系统。数据库技术与其他学科相结合,是第三代数据库系统的一个显著特征。在结合中涌现出各种新型的数据库,例如,数据库技术与分布处理技术相结合,出现了分布式数据库;数据库技术与多媒体处理技术相结合,出现了多媒体数据库;数据库技术与空间处理技术相结合,出现了空间数据库。 1) 分布式数据库 物理上分布在不同的地方,通过网络互联,逻辑上可以看作一个完整的数据库称为分布式数据库。分布式数据库是数据库技术与网络技术相结合的产物,是数据库领域的重要分支。 分布式数据库的研究始于20世纪70年代中期。20世纪90年代以来,分布式数据库系统进入商品化应用阶段,传统的关系数据库产品均发展成以计算机网络及多任务操作系统为核心的分布式数据库产品,同时分布式数据库逐步向客户机/服务器模式和浏览器/服务器模式发展。 分布式数据库的数据存储在物理上分布在计算机网络的不同计算机中,系统中每台计算机称为一个结点(或场地),在逻辑上是属于同一个系统。分布式数据库系统主要有数据的物理分布性、数据的逻辑整体性和结点的自主性等特点。 2) 多媒体数据库 多媒体数据库是数据库技术与多媒体技术结合的产物。多媒体数据库提供了一系列用来存储图像、音频和视频的对象类型,能够更好地对多媒体数据进行存储、管理和查询。 从实际应用的角度,多媒体数据库管理系统具有如下基本功能。 (1) 能够有效地表示多种媒体数据,对不同媒体的数据(如文本、图形、图像、声音等)能按应用的不同,采用不同的表示方法。 (2) 能够处理各种媒体数据,正确识别和表现各种媒体数据的特征、各种媒体间的空间或时间关联。 (3) 能够像其他格式化数据一样对多媒体数据进行操作,包括对多媒体数据的浏览、查询、检索,对不同的媒体提供不同的操纵,如声音的合成、图像的缩放等。 (4) 具有开放功能,提供多媒体数据库的应用程序接口等。 3) 空间数据库 空间数据是用于表示空间物体的位置、开头、大小和分布特征等诸方面信息的数据,适用于描述所有二维、三维和多维分布的关于区域的现象。空间数据库系统是描述、存储和处理空间数据及其属性数据的数据库系统。 142数据库技术的研究领域 数据库学科的研究范围十分广泛,通常包括以下3个领域。 1数据库管理系统软件的研制 数据库管理系统是数据库系统的基础,提供了对数据库中的数据进行存储检索和管理的功能。数据库管理系统的研制包括研制数据库管理系统本身和以数据库管理系统为核心的一组相互联系的软件系统,包括工具软件和中间件。研制的目标是提高系统的可用性、可靠性、可伸缩性和性能。 2数据库设计 数据库设计的主要任务是在数据库管理系统的支持下,按照应用的要求,设计一个结构合理、使用方便、效率较高的数据库及其应用系统。其中主要的研究方向是数据库设计方法和设计工具,包括数据库设计方法、设计工具和设计理论的研究,数据模型和数据建模的研究,计算机辅助数据库设计方法及其软件系统的研究,数据库设计规范和标准的研究等。 3数据库理论 数据库理论的研究主要集中于关系的规范化理论、关系数据理论等。近年来,随着人工智能与数据库理论的结合、并行计算技术等的发展,数据库逻辑和知识推理、数据库中的知识发现、并行算法等成为新的理论研究方向。计算机领域中其他新兴技术的发展对数据库技术产生了重大影响。数据库技术与其他计算机理论的相互结合、相互渗透,使数据库中新的技术层出不穷,数据库的许多概念、技术内容、应用领域,甚至某些原理都有了重大的发展和变化,并建立和实现了一系列新型数据库系统,如分布式数据库系统、多媒体数据库系统和空间数据库系统等,使数据库技术不断地涌现出新的研究方向。 15常见的关系型数据库系统 自20世纪70年代以来,数据库研究人员集中围绕关系数据库进行了大量的研究开发工作,关系数据库迅速得到广泛的应用。到目前为止,数据库技术的研究与应用绝大多数以关系数据库为基础,广泛使用的关系型数据库系统有Microsoft公司开发的Access和SQL Server,Oracle公司开发的Oracle,它们均支持关系数据模型,又称为RDBMS。 151Access Access是Microsoft公司研制的随Office软件一起发行的优秀的桌面型数据库管理系统。Access具有下列特点。 (1) 功能十分简单,只提供了最常见的数据库功能。 (2) 可以方便地与Office和SQL Server交换数据。 (3) 管理简单,使用方便。 (4) 可以满足日常的办公需要,也可以用来开发小型的数据库系统。 Access有两个严重的缺点:一是网络功能很弱,不适合客户机较多的数据库系统;二是几乎没有安全措施。在客户机较少和安全性要求不高的场合,使用Access体现出较高的性价比。 152SQL Server SQL Server是Microsoft公司研制的数据库管理系统。1988年,Microsoft公司与Sybase公司合作,开发了SQL Server,运行于OS/2平台。1993年,Microsoft公司推出了SQL Server 42,能在Windows NT操作系统下运行,但是功能较少。1994年以后,Microsoft公司开始独立开发,推出了一系列版本。最新的两个版本是 SQL Server 2012和SQL Server 2014。SQL Server的主要特点有: (1) 只能在Windows操作系统上运行。SQL Server因为与Windows操作系统紧密集成,所以许多性能依赖于Windows操作系统。 (2) 简单易学,操作简便。 (3) 具有很高的性价比。能够涉足企业OLTP和OLAP应用,并且获得较好的性能,但在高端企业级功能方面尚存不足;与Oracle、DB2相比价格低廉。 (4) 最高的市场占有率。据有关方面对数据库技术人员的统计,SQL Server 有近50%的市场占有率。 153Oracle Oracle是Oracle公司研制的数据库管理系统。1977年, Larry Ellision、Bob Miner和Ed Oates共同创造了软件开发实验室,承担的第一个项目被命名为Oracle,意思是“智慧之源”。在三十多年的发展过程中,开发了一系列成功的数据库产品。最近的两个版本是2007年发布的Oracle 11g和2012年发布的Oracle 12c。Oracle的主要特点有: (1) 能在包括Windows操作系统在内的所有主流操作系统平台上运行。 (2) 功能强大,运行稳定。 (3) 安全性方面获得了最高认证级别的ISO标准认证。 (4) 具有最丰富的网络功能,完全支持各种工业标准。 (5) Oracle主要用于高端企业级。 154MySQL MySQL是一种开放源代码的关系型数据库管理系统,目前属于 Oracle 旗下产品。MySQL的主要特点如下: (1) MySQL采用了双授权政策,它分为社区版和商业版。 (2) 使用最常用的结构化查询语言(SQL)进行数据库管理。 (3) 其体积小、速度快、用户权限设置简单而有效。 (4) 开放源码这一特点,受到了广大自由软件爱好者甚至是商业软件用户的青睐,一般中小型网站的开发都选择 MySQL 作为网站数据库。 (5) 与Apache和PHP/PERL结合,为建立基于数据库的动态网站提供了强大动力。 本章介绍了数据库系统的组成、数据库系统的体系结构、数据库系统的发展及研究领域以及常见的关系型数据库系统。 数据库系统的组成包括数据库、数据库管理系统、数据库管理员和用户以及数据库应用系统。 数据库系统的体系结构由三级模式以及两层映像构成。 数据库系统的三个发展阶段:第一代层次和网状数据库系统、第二代关系数据库系统和第三代以面向对象模型为主要特征的数据库系统。 常见的关系型数据库系统有Microsoft公司开发的Access和SQL Server、Oracle公司开发的Oracle和MySQL。 一、 填空题 1数据库系统一般由()、()、()、()和()五个部分组成。 2数据库管理系统是指(),它是位于()和()之间的一层管理软件。 3由()负责全面管理和控制数据库系统。 4按照数据结构的类型来命名,逻辑模型分为()、()和()。 5关系数据库是采用()作为数据的组织方式。 二、 简答题 1试述数据库、数据库系统、数据库管理系统的概念。 2数据库管理员的职责是什么? 3请举例说明以数据库为基础的应用系统。 4试述数据库系统的三级模式和两层映像。 第2章关系数据库 本章首先系统讲解了关系模型。接着详细介绍了数据库系统设计的6个阶段,对于每一阶段,详细讨论了其相应的任务、方法和步骤。最后介绍了数据库规范化的相关概念,为在数据库逻辑设计阶段构造出规范化程度较高、能很好地反映现实世界的关系数据库模式提供基础。 21关系模型概述 本节分析第1章示例的网上购物系统,如图21所示,详细介绍关系模型的基本概念。 图21关系模型基本概念 211关系模型的基本概念 1关系的数学定义 1) 域 定义21域是一组具有相同数据类型的值的集合。域中数据的个数称为域的基数。 例如,图21所示的用户关系表中,D1={袁玫,王广},表示姓名的集合,基数是2。D2={外套,皮衣,套装}表示商品名称的集合,基数是3。 2) 笛卡儿积 定义22给定一组域:D1,D2,…,Dn,这组域的笛卡儿积(Cartesian Product)为 D1·D2·…·Dn={(d1,d2,…,dn)di∈Di,i=1,2,…,n} 集合中每个元素(d1,d2,…,dn)称为一个n元组(ntuple),简称元组,通常用t表示。元组中的每个值di称为一个分量(component)。若Di,i=1,2,…,n为有限集,其基数(cardinal number)即元素个数为mi,i=1,2,…,n,则笛卡儿积D1·D2·…·Dn的基数为m=m1·m2·…·mn。 例21给定两个域:用户D1={袁玫,王广},商品域D2={外套,皮衣,套装},则这两个域的笛卡儿积为:D1·D2={(袁玫,外套),(袁玫,皮衣),(袁玫,套装),(王广,外套),(王广,皮衣),(王广,套装)}。D1,D2的基数分别是2,3,其笛卡儿积D1·D2的基数就是2×3=6,即一共有6个元组,每个元组的第一分量都取自于D1,而第二个分量取自于D2。 0 0 3) 关系 定义23笛卡儿积D1·D2·…·Dn的子集称为在域D1,D2,…,Dn上的关系,记为R(D1,D2,…,Dn)。其中R表示关系名,n是关系的度(degree)。 关系是笛卡儿积的有限子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须为每列起一个名字,称为属性。 例22例21中笛卡儿积为: D1·D2={(袁玫,外套),(袁玫,皮衣),(袁玫,套装),(王广,外套),(王广,皮衣),(王广,套装)},笛卡儿积可表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域。这6个元组可列成如表21所示的二维表。 表21D1,D2的笛卡儿积 姓名 商品 姓名 商品 袁枚 外套 王广 外套 袁枚 皮衣 王广 皮衣 袁枚 套装 王广 套装 2关系模型 用二维表格表示实体及实体之间联系的数据模型称为关系模型(relation model),一个关系可以理解为一张满足某些约束条件的二维表。例如,第1章所列举的网上购物系统中的用户表、商品表和订单表,其中的数据按二维表格的形式存放。 3属性 二维表中的列称为属性,每个属性必须有唯一的属性名。例如,图21所示的用户表有4个属性,分别为用户ID、密码、用户类型和姓名,属性在表中可以按任意顺序存放。 4域 域是一组具有相同数据类型的值的集合。例如,性别的域是(男,女),用户类型的域是(客户,管理员)。 5元组 元组是表中的一行。例如,图21所示用户表有3个元组,任何元组的顺序发生改变,关系不发生变化。 6度或目 度或目是一个关系中属性的个数,有n个属性的关系称为n元关系。例如,图21所示的用户表有4个属性,所以度为4。 7基数 基数是一个关系中的元组的个数。例如,图21所示的用户表的基数为3。 8候选键 在关系中能唯一标识元组的最小属性集为候选键(candidate key)。在一个关系中可能有若干候选键,当组成键的属性个数多于1个时,称为复合键(composite key)。候选键有两个性质: (1) 唯一性(uniqueness):对于关系R的每个元组,候选键的值能唯一标识每个元组。 (2) 不可缩减性(irreducibility):在候选键中找不出子集具有上述的唯一性。 9主键 若一个关系有多个候选键,则可选定其中一个键为主键(primary key),包含在其中的属性称为主属性(primary attribute),所有主属性构成的集合称为主属性集;不包含在任何候选键中的属性称为非主属性(nonkey attribute),所有非主属性构成的集合称为非主属性集。 在最简单的情况下,候选键只包含一个属性。在最极端的情况下,一个关系中的所有属性构成这个关系的候选键,称为全键(allkey)。例如,图21中用户表的用户ID是候选键,可作为主键,用户ID是主属性,密码、用户类型和姓名是非主属性。 定义24关系模式R(U)中所有主属性构成的集合P称为R(U)的主属性集,所有非主属性构成的集合N称为R(U)的非主属性集。 例23在关系模式S(用户ID,身份证号,姓名,地址)中,用户ID和身份证号都是候选键,可选用户ID作主键,用户ID和身份证号是主属性,构成的集合{用户ID,身份证号}为主属性集,姓名和地址是非主属性,构成的集合{姓名,地址}为非主属性集。 10外键 设F是基本关系R的一个或一组属性,但不是关系R的候选键。如果F与基本关系S的主键相同,则称F是基本关系S的外键(foreign key)。 定义25设有关系模式R(U),X是U的子集。若X不是R的候选键,但X是另一个关系模式S的候选键,则称X是R的外键。 例如,图21所示的订单关系引用了用户关系的主键“用户ID”和商品关系的主键“商品ID”,因此,“用户ID”和“商品ID”是订单关系的两个外键。 212关系的性质 数据库中的关系应具有以下性质。 (1)每一列的分量来自同一个域,是同类型的数据。 例如:图21用户表中的姓名列{袁玫,王广,赵剑}是同类型的数据。 (2)不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。 例如,图21用户表有4列,属性名分别为用户ID、密码、用户类型、姓名。 (3)列的次序可以任意交换。由于列顺序是无关紧要的,因此在许多实际关系数据库产品中增加新属性时,永远是插至最后一列。 (4)行的次序可以任意交换。 (5)任意两个元组不能完全相同。 (6)分量必须取原子值,即每一列都必须是不可分割的数据项。 213关系的数据模型 关系是关系模式在某一时刻的状态或内容,即关系模式是型,是静态的、稳定的;而关系是它的值,因关系操作在不断地更新数据库中的数据,所以关系是动态的、随时间不断变化。通常不严格区分关系模式和关系,而把它们统称为关系。关系的数据模型包含数据结构、关系操作和完整性约束三部分。 1数据结构 关系模型具有单一的数据结构——关系。现实世界的实体以及实体间的各种联系均用关系来表示,从用户角度看,关系模型中数据的逻辑结构是一张二维表。在关系模型中,二维表是关系数据库的单一的数据结构。例如,图21所示中用户表、商品表和订单表都是用二维表表示的。 2关系操作 关系模型的理论基础是集合论,所以关系操作的特点是集合操作,即操作对象和操作结果都是集合。在关系模型中常用的关系操作包括:选择(select)、投影(project)、连接(join)、除(divide)、并(union)、交(intersection)、差(difference)等查询(query)和插入(insert)、删除(delete)、更新(update)操作两大部分。其中,查询的表达能力是其中最主要的部分。 关系操作可以分为关系代数和关系演算两大类。关系代数是用对关系的运算来表达查询请求的方式,本书将在214节中详细介绍。关系演算是用谓词来表达查询请求的方式,关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。关系代数和关系演算在表达能力上是完全等价的。关系代数和关系演算均是抽象的查询语言,这些抽象的语言与具体的数据库管理系统中实现的实际语言并不完全一样。但它们能用作评估实际系统中查询语言能力的标准或基础。 另外,还有一种介于关系代数和关系演算的语言,即结构化查询语言(structured query language, SQL),不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集数据查询语言、数据库定义语言(data definition language, DDL)、数据操纵语言(data manipulation language, DML)和数据控制语言(data control language, DCL)于一体的关系数据语言。SQL除了提供关系代数或关系演算的功能外,还提供了许多附加功能,如聚合函数、关系赋值、算术运算等,充分体现了关系数据语言的特点和优点,是关系数据库的标准语言,本书将在第5章详细介绍。 3完整性约束 关系模型的完整性规则是对关系的某种约束条件,直接影响数据库中数据的正确性。关系模型有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。其中,实体完整性和参照完整性是关系模型必须满足的完整性约束条件,由系统自动支持;用户自定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。 1) 实体完整性 客观世界中的实体都必须有唯一标识,在数据库中,是用主键来唯一标识一个实体。每个关系应有一个主键,每个元组的主键的值应是唯一的;一个实体的主键的属性值即主属性的值不能为空,这就是实体完整性的具体约束。 定义26实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。 例如,在用户表(用户ID,密码,用户类型,姓名)中,“用户ID”为主键,则“用户ID”不能取空值,也不能取相同的值。 2) 参照完整性 定义27设F是基本关系R的一个或一组属性,但不是关系R的候选键。如果F与基本关系S的主键相同,则称F是基本关系S的外键,并称基本关系R为参照关系(referencing relation),基本关系S为被参照关系(referenced relation)或目标关系(target relation)。 例如,图21所示订单关系中的“用户ID”值必须是确实存在的用户ID,即用户关系中必须有该“用户ID”的用户记录;订单关系中的“商品ID”值也必须是确实存在的商品ID,即商品关系中必须有该“商品ID”的商品记录。 3) 用户定义的完整性 为了满足用户的实际需求,在数据库设计时应设计用户自定义的完整性约束规则,针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的取值要求。 例如,图21所示的用户关系表中用户类型的取值只能是“客户”和“管理员”;商品表中的价格取值只能是大于0。这些属性值域的定义都可以在创建数据库表时实施,用CHECK子句来完成。 214关系代数 关系代数是一种抽象的查询语言,是关系数据库操纵语言的一种传统的表达方式,是对关系的运算,运算结果仍是关系。关系的基本运算有两类:一类是传统的集合运算;另一类是专门的关系运算。 1传统的集合运算 传统的集合运算包括并、差、交和广义笛卡儿积,进行并、差和交运算的两个关系必须具有相同的关系模式。 1) 并 给定两个具有相同关系模式的关系R和S,则R和S的并是由属于这两个关系的所有元组组成的集合。可表示为R∪S={tt∈Rort∈S}。 2) 差 给定两个具有相同关系模式的关系R和S,则R和S的差是由属于R但不属于S的元组组成的集合,即差运算的结果是从R中去掉S中也有的元组。可表示为R-S={tt∈RandtS}。 3) 交 给定两个具有相同关系模式的关系R和S,则R和S的交是由既属于R又属于S的元组组成的集合。可表示为R∩S={tt∈Randt∈S}。 4) 广义笛卡儿积 设关系R和S的属性个数分别是m和n,则R和S的广义笛卡儿积是具有n+m个属性的关系,其每个元组的前m列是R的一个元组,后n列是S的一个元组。可表示为R·S={trtstr∈Randts∈S}。 例24给定三个关系R,S和T,如图22(a)~图22(c)所示。分别进行并、交、差和广义笛卡儿积运算,结果如图22(d)~图22(g)所示。 R A B C a1 b1 c1 a1 b2 c2 a2 b2 c1 (a) S A B C a1 b2 c2 a1 b3 c2 a2 b2 c1 (b) T A D a1 d1 a2 d2 (c) R∪S A B C a1 b1 c1 a1 b2 c2 a2 b2 c1 a1 b3 c2 (d) R∩S A B C a1 b2 c2 a2 b2 c1 (e) R-S A B C a1 b1 c1 (f) R·T R.A B C T.A D a1 b1 c1 a1 d1 a1 b1 c1 a2 d2 a1 b2 c2 a1 d1 a1 b2 c2 a2 d2 a2 b2 c1 a1 d1 a2 b2 c1 a2 d2 (g) 图22传统集合运算举例 2专门的关系运算 专门的关系运算包括选择、投影、连接和除运算,具体内容如下所述。 1) 选择运算 从关系R中找出满足给定条件P的元组的操作称为选择(selection),其中的条件P是逻辑表达式。选择是一元关系运算。通常用公式展示为σp(R)={rr∈RandP(r)=True}。选择是从行的角度进行运算,即从水平方向抽取记录。经过选择运算得到的结果可以形成新的关系,其关系模式保持不变,但其中的元组是原关系的一个子集。 例如,图23(b)所示是由图23(a)所示的关系R通过选择属性A为“b”的运算后得到的结果。 2) 投影运算 从关系R中抽若干个属性(A′1,A′2,…,A′k)组成新关系的操作称为投影(projection),投影是一元关系运算。通常用公式表示为πA′1,A′2,…,A′k(R)={r[A′1,A′2,…,A′k]r∈R}。投影是从列的角度进行的运算,相当于对关系进行垂直分解。经过投影运算可以得到一个新关系,其关系模式所包含的属性个数往往比原关系少,元组个数也因此会受到影响。 例如,图23(c)所示是由图23(a)所示的关系R通过在A、B属性列表上投影运算后得到的结果。 3) 连接运算 连接(join)是两个关系的横向结合。连接是二元关系运算,通常用公式表示为R=RAθSBS={(r,s)r∈R∧s∈S∧RAθSB}=σRAθSB(R·S)。其中A和B分别是R和S上度数相等且可比的属性组,θ是比较运算符。连接条件中的θ运算是“=”时,称为等值连接。用公式表示为R=RAθSBS={(r,s)r∈R∧s∈S∧RA=SB}=σRA=SB(R·S)。自然连接是等值连接的特例,其特征在于,连接条件中涉及的A、B相同且在结果中去掉重复属性。 例如,图23(d)所示是由图23(a)所示的关系R、S通过连接运算后得到的结果。 图23专门的关系运算 4) 除运算 给定关系RX,Y,S(Y,Z),其中X,Y,Z为属性组。R中的Y,S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系PX,P是R中满足下列条件的元组在X属性列上的投影:元组在X上的分量值x的像集Yx,包含S在Y上投影的集合,即元组在X上的分量值所对应的Y值应包含关系S在Y上的值。除运算表示为R÷S={tr[X]|tr∈R∧πY(S)∈Yx},其中,Yx为x在R中的像集,x=tr[X]。 例如,图23(e)所示是由图23(a)所示的关系R除关系S运算后得到的结果。 R S A B C B C b 2 d 2 d σA=b(R) b 3 b 3 b A B C c 2 d b 2 d d 3 b B 3 b (a)关系R和S (b)选择运算 ∏A,B(R) RS A B RA RB RC SB SC b 2 b 2 d 2 d b 3 b 3 b 3 b R÷S c 2 c 2 d 2 d A d 3 d 3 b 3 b b c投影运算 d连接运算 e除运算 215关系数据库及其特点 1 关系数据库 基于关系模型的数据库称为关系数据库,是一些相关的表和其他数据库对象的集合。在关系数据库中,信息存放在二维表格结构的表中,一个关系数据库中包含多个表,每个表由多个行(记录)和多个列(字段)组成。表与表之间通过主键和外键建立联系。 2关系数据库的特点 1) 操作方便 通过应用程序和后台连接,方便用户对数据的操作,特别是没有编程基础的用户。 2) 易于维护丰富的完整性,大大降低了数据的冗余和数据不一致的概率。 3) 便于访问数据提供了诸如视图、存储过程、触发器、索引等数据库对象。 4) 更安全和快捷应用程序可以通过多级安全检查来限制对数据库中数据的访问。 22数据库系统设计的基本过程 数据库设计是指对于一个给定的应用环境,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。数据库设计应包含两方面的内容:一是结构设计,即设计数据库框架或数据库结构;二是行为设计,即设计应用程序、事务处理等。设计数据库应用系统,首先应进行结构设计。一方面,数据库结构设计得是否合理,直接影响到系统中各个处理过程的性能和质量。另一方面,结构特性又不能与行为特性分离;静态的结构特性的设计与动态的行为特性的设计分离,会导致数据与程序不易结合,增加数据库设计的复杂性。 设计一个完善的数据库应用系统,是在三个世界——现实世界、信息世界和计算机世界中,通过数据库设计的6个阶段(需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施以及数据库运行和维护)来完成的,如图24所示。 图24数据库系统设计过程 221需求分析 现实世界是存在于人们头脑之外的客观世界。现实世界中存在各种事物,事物与事物之间存在联系,这种联系是由事物本身的性质决定的。例如,学校里有老师、学生、课程,老师为学生授课,学生选修课程并取得学分和成绩。进行数据库设计,首先必须准确了解与分析用户需求(包括数据与处理)。需求分析是整个设计过程的基础,也是最困难、最耗费时间的一步。需求分析的结果是否准确地反映了用户的实际要求,将直接影响后面各个阶段的设计,并影响到设计结果是否合理和实用。 1用户需求类别 需求分析阶段应对系统的整个应用情况做出全面的、详细的调查,确定企业组织的目标,收集支持系统总体设计目标的基础数据及其要求,确定用户的需求,并把这些需求编写成用户和数据库设计者都能接受的文档。用户的需求,主要包括以下5个方面。 1) 总体需求理解客户对系统的总体需求,包括进度需求、交付期等。 2) 业务需求首先列出将要使用系统的部门以及各类用户的清单,然后了解各业务部门和各种用户的具体业务内容、业务流程,充分理解各个部门和用户希望达到的功能目标;其次了解清楚部门之间业务流转情况以及异常流程的处理等,收集各种业务表格、表单、统计报表、图表,理解这些表格、表单中每一个数据项的含义、类型和处理要求。 3) 信息需求了解用户要从数据库获得的信息内容,信息需求定义了数据库应用系统应该提供的所有信息,描述系统中数据的数据类型。 4) 处理需求需要对数据完成什么处理功能及处理的方式。处理需求定义了系统的数据处理的操作,应注意操作执行的场合、频率、操作对数据的影响等。 5) 安全性和完整性需求在定义信息需求和处理需求的同时必须相应确定安全性和完整性约束。 2需求分析环节 设计人员还应该了解系统将来要发生的变化,收集未来应用所涉及的数据,充分考虑到系统可能的扩充和变动,使系统设计符合未来发展的趋势,并且易于改动,以减少系统维护的代价。进行系统需求分析通常有以下5个环节。 1) 分析用户活动,产生用户业务流程图 主要了解用户当前的业务活动和职能,弄清楚其业务流程,画出业务流程图。如果一个业务流程比较复杂,就要把流程分解成若干个子过程,使每个业务流程功能明确。 2) 确定系统范围,产生系统范围图 确定系统的边界。在和用户经过充分讨论的基础上,确定计算机所能进行数据处理的范围,确定哪些工作由人工完成,哪些工作由计算机系统完成。 3) 分析用户活动所涉及的数据,产生数据流图 深入分析用户的业务处理,以数据流图形式表示出数据的流向和对数据所进行的加工。数据流图是从“数据”和“对数据的加工”两方面表达数据处理系统工作过程的一种图形表示法,是一种直观、易于被用户和软件人员理解的系统功能描述方式。 4) 分析系统数据,产生数据字典 数据字典提供对数据描述的集中管理,它的功能是存储和检索各种数据描述并且为数据库管理员提供有关的报告。对数据库设计来说,数据字典是进行详细的数据收集和数据分析所获得的主要成果。数据字典通常包括数据项、数据结构、数据流、数据存储和加工过程这五个部分。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构,数据字典通过对数据项和数据结构的定义来描述数据流以及数据存储的逻辑内容。 5) 用户确认 需求分析得到的数据流图和数据字典要返回给用户,通过反复完善,最终取得用户的认可。 222概念结构设计 信息世界是现实世界在人们头脑中的反映,准确抽象出现实世界的需求后,下一步应考虑如何实现用户的这些需求。概念结构设计是整个数据库设计的关键,其目标是产生反映企业组织信息需求的数据库概念结构。概念结构以一种独立于具体数据库管理系统的逻辑描述方法来描述数据库的逻辑结构,即对需求说明书提供的所有数据和处理要求进行抽象与分析,并将其综合为统一的概念模型。 1概念模型 概念模型,是对现实世界中复杂事物之间内在联系的描述,按用户的观点对数据和信息建模。概念模型用于信息世界的建模,是现实世界到机器世界的中间层次,是数据库设计人员和用户之间进行交流的语言。 1) 信息世界中的基本概念 (1) 实体(entity):客观存在并可相互区别的事物称为实体,可以是具体的人、事、物或抽象的事件。例如,一个学生、一件货物属于具体事物;教师的授课、购买货物等活动是比较抽象的事件。 (2) 属性(attribute):实体所具有的某一特性称为属性。一个实体可以由若干属性来刻画,例如,学生实体由学号、姓名、性别、出生日期等若干属性组成。实体的属性用型和值来表示,例如,学生是一个实体,学生姓名、和性别是属性的型,也称属性名,而具体的学生姓名(“张三”)、学号(“S0001”)和性别(“女”)是属性的值。 (3) 键(key):唯一标识实体的属性称为键。例如,学生的学号是学生实体的键。 (4) 域(domain):属性的取值范围称为该属性的域。例如,性别域为(男,女)。 (5) 实体型(entity type):用实体名及其属性名集合来抽象和刻画同类实体称为实体型。例如,学生(学号,姓名,性别,出生日期)就是一个实体型。 (6) 实体集(entity set):同一类型实体的集合称为实体集。例如,全体学生。 (7) 联系(relationship):现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。实体内部的联系通常是指组成实体的各属性之间的联系。实体之间的联系通常是指不同实体集之间的联系。 实体集与实体集之间存在各种联系,将实体集之间的联系分为:一对一(1∶1)、一对多(1∶m)和多对多(m∶n)三种类型的联系。 一对一联系。如果对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1∶1。例如,学校和校长之间的联系,如果一所学校只有一个校长,一个校长只能在一所学校任职,那么学校和校长之间的联系就是1∶1。 一对多联系。如果对于实体集A中的每一个实体,实体集B中有n个实体与之联系;反之,对于实体集B中每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B具有一对多联系,记为1∶n。例如,学院和学生之间的联系,一个学院可有多名学生,而一名学生却只能属于一个学院,则学院和学生之间的联系就是1∶n。 多对多联系。如果对于实体集A中的每一个实体,实体集B中有n个实体与之联系;反之,对于实体集B中的每一个实体,实体集A中也有m个实体与之联系,则称实体集A与实体集B具有多对多联系,记为m∶n。例如,学生和课程之间,一个学生可以同时选修多门课程,一门课程同时可被多个学生选修,故学生和课程间存在多对多的联系。 2) 概念模型的表示方法(ER图) 设计应该能真实、充分地反映现实世界,能满足用户对数据的处理要求,易于理解、易于修改。概念模型的表示方法很多,其中最常用的是PPSChen于1976年提出的实体—联系方法,该方法用ER图来描述现实世界的概念模型,也称为ER模型。 ER图提供了表示实体型、属性和联系的方法,如图25所示,分别表示1∶1联系、1∶n联系和m∶n联系。 实体型:用矩形表示,矩形框内写明实体名。 属性:用椭圆形表示,并用无向边将其与相应的实体连接起来。 联系:用菱形表示,菱形框内联系名,并用边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1∶1,1∶n或m∶n)。如果联系具有属性,则这些属性也要用边与该联系连接起来。 (a) 1∶1联系 (b) 1∶n联系 (c) m∶n联系 图25联系的表示方法 2概念模型的设计步骤 1) 设计局部ER模式 为了更好地模拟现实世界,一个有效的策略是“分而治之”,即先分别考虑各个用户的信息需求,形成局部概念结构,然后再综合成全局结构。局部概念结构又称为局部ER模式。 (1) 确定局部结构范围。设计局部ER模式的第一步,是确定局部结构的范围划分,划分的方式一般有两种:一种是依据系统的当前用户进行自然划分;另一种是按用户要求将数据库提供的服务归纳成几类,使每一类应用访问的数据显著地不同于其他类,然后为每类应用设计一个局部ER模式。局部结构范围确定下述因素:范围的划分要自然、易于管理;范围之间的界面要清晰、相互影响要小;范围的大小要适度。 (2) 实体定义。每个局部结构都包括一些实体类型,实体定义的任务就是从信息需求和局部范围定义出发,确定每个实体类型的属性和键。实体、属性和联系之间划分的依据通常有三点:采用人们习惯的划分;避免冗余,在一个局部结构中,对一个对象只选取一种抽象形式,不要重复;依据用户的信息处理需求。 实体确定后,属性也随之确定。为一个实体类型命名并确定其键也是很重要的工作。命名应反映实体的语义性质,在一个局部结构中应是唯一的。 (3) 联系定义。ER模型的“联系”用于描述实体之间的关联关系。一种完整的方式是依据需求分析的结果,考察局部结构中任意两个实体类型之间是否存在联系及确定联系类型。 在确定联系类型时,应注意防止出现冗余的联系。如果存在,要尽可能地识别并消除这些冗余联系,以免将这些问题遗留给综合全局的ER模式阶段。联系类型确定后,也需要命名和确定键。命名应联系的语义性质,采用某个动词命名。联系类型的键通常是它涉及的各实体的键或某个子集。 (4) 属性分配。实体与联系都确定下来后,局部结构中的其他语义信息大部分可以用属性描述。这一步的工作有:一是确定属性;二是把属性分配到有关实体和联系中去。 确定属性的原则是:属性应该是不可再分解的语义单位;实体与属性之间的关系只能是1∶n;不同实体类型的属性之间应无直接关联关系。属性不可分解的要求是为了使模型结构简单化,不嵌套结构。 当多个实体类型用到同一属性时,将导致数据冗余,从而可能影响存储效率和完整性约束,因而需要确定把属性分配给哪个实体类型。一般把属性分配给那些使用频率最高的实体类型。 2) 设计全局ER模式 所有局部ER模式都设计好以后,接下来就是把它们综合成单一的全局概念结构。全局概念结构不仅要支持所有局部ER模式,而且必须合理地表示一个完整的、一致的数据库概念结构。 (1) 确定公共实体类型。为了给多个局部ER合并提供合适的基础,首先要确定各局部结构中的公共实体。公共实体的确定并非一目了然,特别是当系统较大时,可能有很多局部模式,这些局部ER模式是由不同的设计人员确定的,因而对同一现实世界的对象可能给予不同的描述,有的作为实体,有的又作为联系或属性。即使都表示成实体,实体名和键也可能不同。在这一步中,我们根据实体名和键来认定公共实体。一般把同名实体作为公共实体的一类候选,把具有相同键的实体作为公共实体的另一候选。 (2) 局部ER模式合并。合并的顺序有时影响处理效率和结果。合并的一般顺序是首先两两合并,先合并那些在现实世界中存在联系的局部结构;合并应从公共实体类型开始,最后再加入独立的局部结构。进行二元合并是为了减少合并工作的复杂性,并且使合并结果的规模尽可能小。 (3) 消除冲突。由于各类应用不同,且不同的应用通常又是由不同的设计人员设计成局部ER模式的,因此局部ER模式之间不可避免地会有不一致的地方,称为冲突。通常冲突可分为三种类型。 属性冲突:属性域的冲突,即属性值的类型、取值范围或取值集合不同。 结构冲突:同一对象在不同应用中的不同抽象。同一实体在不同局部ER图中属性组成不同,包括属性个数、次序。实体之间的联系在不同的局部ER图中呈现不同的类型。 命名冲突:包括属性名、实体名、联系名之间的冲突。 属性冲突和命名冲突通常采用讨论、协商的方法解决,而结构冲突则需要经过认真分析后才能解决。 设计全局ER模式的目的不在于把局部ER模式在形式上合并为一个ER模式,而在于消除冲突,使之成为能够被系统中所有用户共同理解和接受的统一的概念模型。 3) 全局ER模式的优化 一个好的全局ER模式,除了能够准确、全面地反映用户功能需求外,还应满足下列条件:实体类型的个数尽可能少;实体类型所含属性个数尽可能少;实体类型间联系无冗余。全局ER模式的优化原则有以下3个方面。 (1) 实体类型的合并。在公共模型中,实体类型最终转换成关系模式,涉及多个实体类型的信息要通过连接操作获得。因而减少实体类型个数,可减少连接的开销,提高处理效率。一般可以把1∶1联系的两个实体类型合并,具有相同键的实体类型常常是从不同角度描述现实世界,如果经常需要同时处理这些实体类型,那么也有必要合并成一个实体类型。但这时可能产生大量空值,因此要对存储代价和查询效率进行权衡。 (2) 冗余属性的消除。通常在各个局部结构中是不允许冗余属性存在的。但在综合成全局ER模式后,可能产生全局范围内的冗余属性。一般同一非键的属性出现在几个实体类型中,或者一个属性值可从其他属性的值,此时,应把冗余的属性从全局模式中去掉。 (3) 冗余联系的消除。在全局模式中可能存在有冗余的联系,通常利用规范化理论中函数依赖的概念消除冗余联系,将在23节中进行讨论。 223逻辑结构设计 计算机世界又称数据世界,信息世界的信息在机器世界中以数据形式存储。逻辑结构设计是将抽象的概念结构转换为所选用的数据库管理系统支持的数据模型,并对其进行规范化。 1数据模型 数据模型(data model)是数据库结构的基础,用来描述数据的概念和定义。这些概念精确地描述系统的静态特性、动态特性和完整性约束条件。因此,数据模型由数据结构、数据操作和数据完整性约束三部分组成。 1) 数据结构 数据结构指描述数据库的组成对象,以及对象之间的联系。描述的内容包括与数据类型、内容、性质有关的对象,与数据之间联系有关的对象。数据结构是对系统静态特性的描述。数据库系统是按数据结构的类型来组织数据的,因此数据库系统通常按照数据结构的类型来命名数据模型,如层次结构、网状结构和关系结构的模型分别命名为层次模型、网状模型和关系模型。 2) 数据操作 数据操作是指对数据库中各种对象允许执行的操作的集合,包括操作及相关的操作规则。数据操作是对系统动态特性的描述,例如,检索、插入、删除、修改、更新等操作,数据要定义这些操作的确切含义、操作符号、操作规则以及实现操作的语言等。 3) 数据的完整性约束 数据的约束条件是完整性规则的集合,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容。数据模型中的数据及其联系都要遵循完整性规则的制约。数据模型应该提供定义完整性约束条件的机制以及数据应遵守的语义约束条件,以限定符合数据模型的数据库状态及其变化。例如,学生信息中,要求性别只能取“男”或“女”,这些要求可以通过建立数据的约束条件来实现。 2 ER图转换为关系模型 目前常用的数据模型是关系模型,所以逻辑设计分为两步:先将概念模型转换为关系模型,再用规范化理论对关系模型进行规范化。概念模型转化为关系模型的过程中,需对实体和联系分别进行处理。从ER图转换为关系模型的方法如下所述。 1) 实体的处理 概念模型中每个实体对应逻辑结构中的一个关系模式。因此,在转化时,把概念模型中的每个实体对象作为一个关系来处理。 2) 联系的处理 根据联系类型的不同,联系的处理方式也不同,具体做法如下所述。 (1) 1∶1的联系转换。与任意一端对应的关系模式合并,在并入的关系模式中加入与该联系相连的另一个关系模式的键和联系本身的属性。 例25将校长管理学校ER图,转换成关系模式(如图26所示)。 图26校长管理学校ER图 转换方案1: 校长(姓名,性别,年龄) 学校(学校名,校址,类别,姓名) 转换方案2: 校长(姓名,性别,年龄,学校名) 学校(学校名,校址,类别) 注:带下划线的是键。 (2) 1∶n的联系转换。与n端对应的关系模式合并,把1端对应的实体的键以及联系本身的属性加入n端对应的实体中。 例26将学校聘任教师ER图,转换成关系模式(如图27所示)。 图27学校聘任教师ER图 转换方案: 学校(学校名,校址,校长) 教师(教工号,姓名,专长,学校名,年薪) 注:带下划线的是键。 (3) m∶n的联系。一个m∶n联系转换为一个独立的关系模式,与该联系相连的各实体的键以及联系本身的属性均转换为关系的属性,而关系的键为各实体的键的组合。 例27将顾客购买商品ER图,转换成关系模式(如图28所示)。 图28顾客购买商品ER图 转换方案: 顾客(顾客ID,密码,姓名,账户余额) 商品(商品ID,商品名称,单价,库存量) 购买(顾客ID,商品ID,数量,时间,送货方式) 注:带下划线的是键。 3关系模型的规范化 从ER图转换的关系模式,可能会存在数据冗余太大、插入异常、删除异常、修改异常等问题,因此,需要对关系数据库模式进行规范化。如何对关系数据库模式进行规范化,从而在数据库逻辑设计阶段构造出规范化程度较高、能很好地反映现实世界的关系数据库模式,将在23节中进行讨论。 224数据库物理设计 数据库物理设计是为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。数据库的物理结构主要指数据库的存储记录格式、存储记录安排和存取方法。显然,数据库的物理设计完全依赖于给定的硬件环境和数据库管理系统。 物理设计分为五步完成,前三步涉及物理结构设计,后两步涉及约束和具体的程序设计。 1) 存储记录结构设计 包括记录的组成、数据项的类型、长度,以及逻辑记录到存储记录的映射。 2) 确定数据存放位置 可以把经常同时被访问的数据组合在一起。 3) 存取方法的设计 存取路径分为主存取路径与辅存取路径,前者用于主键检索,后者用于辅助键检索。 4) 完整性和安全性考虑 设计者应从完整性、安全性、有效性和效率方面进行分析,做出权衡。 5) 程序设计 在逻辑数据库确定后,应用程序设计随之开始。物理数据独立性的目的是消除由于物理结构的改变而引起的对应程序的修改。当物理独立性未得到保证时,可能会发生对程序的修改。 225数据库实施 根据逻辑设计和物理设计的结果,设计人员运用数据库管理系统提供的数据语言及其宿主语言,根据逻辑设计和物理设计的结果建立实际数据库、装入数据,测试与试运行应用程序的过程称为数据库的实现阶段。 数据库实施阶段依据设计好的物理模型,按以下3个步骤进行。 (1) 用数据库管理系统提供的数据定义语言严格描述数据库结构。 (2) 编写和调试应用程序。编写程序时通常用一些模拟数据进行程序调试,应使测试数据尽可能覆盖现实世界的各种情况。 (3) 装入实际数据,进入试运行状态。测量系统的性能指标是否符合设计目标。如果不符合,则返回前几步修改数据库的物理结构,甚至修改逻辑结构。 226数据库运行和维护 数据库应用系统经过试运行后即可正式投入运行。在数据库系统运行过程中,必须不断地进行评价、调整与修改。数据库运行维护阶段,通常有以下4个主要任务。 (1) 维护数据库的安全性与完整性:检查系统安全性是否受到侵犯,及时调整授权和密码,实施系统转储与备份,以便在发生故障后及时恢复数据。 (2) 监测并改善数据库运行性能:对数据库的存储空间状况及响应时间进行分析评价,结合用户反应确定改进措施,实施再构造或再格式化。 (3) 根据用户要求对数据库现有功能进行扩充。 (4) 及时改正运行中发现的系统错误。 227设计过程小结 在数据库设计过程中必须注意以下3方面问题。 1) 数据库设计过程中要注意充分调动用户的积极性 用户的积极参与是数据库设计成功的关键因素之一。用户最了解自己的业务需求,用户的积极配合能够缩短需求分析的进程,帮助设计人员尽快熟悉业务,更加准确地抽象出用户的需求,减少反复,也使设计出的系统与用户的最初设想更接近。同时用户参与意见,双方共同对设计结果承担责任,也可减少数据库设计的风险。 2) 应用环境的改变、新技术的出现会导致应用需求的变化 设计人员在设计数据库时必须充分考虑到系统的可扩充性,使设计易于变动。一个设计优良的数据库系统应该具有一定的可伸缩性,应用环境的改变和新需求的出现一般不会推翻原设计,不会对现有的应用程序和数据造成大的影响,而只是在原设计上做一些扩充即可满足新的要求。 3) 系统的可扩充性最终都是有一定限度的 当应用环境或应用需求发生巨大变化时,原设计方案可能终将无法再进行扩充,必须推倒重来,这时就会开始一个新的数据库设计的生命周期。但在设计新数据库应用的过程中,必须充分考虑已有应用,尽量使用户能够平衡地从旧系统迁移到新系统。 23数据库规范化基础 223节讨论了如何从ER图转换成关系模式,但如何对关系数据库模式进行规范化,构造一个合适的关系模式,是关系数据库规范化理论所要讨论的问题。数据库规范化的两个主要目的是消除冗余数据和确保数据的依赖性处于有效状态。实现这两个目标就能够减少数据库的空间消耗,并确保数据存储的一致性和逻辑性。 1970年Godd提出关系模型时,关系规范化问题就同时被提出来,当时已发表属性间的函数依赖关系,从而定义了与函数依赖关系有关的第一、第二、第三及BoyceCodd(BC)范式,在1976—1978年又发现了多值依赖关系,从而定义了第四范式。 231规范化的必要性 一个规范化程度过低的关系模式,不能够很好地描述现实世界,可能会存在数据冗余太大、插入异常、删除异常、修改异常等问题。下面结合实例进行分析。 例28要建立如图11所示的网上购物系统,假设有关系模式S(用户ID,商品ID,姓名,地址,电话,电子邮箱),基本数据如表22所示。 表22S表 用户ID 商品ID 姓名 地址 电话 电子邮箱 U000000001 P000000001 袁玫 南京民生街10号 157157157 myuan@163com U000000001 P000000002 袁玫 南京民生街10号 157157157 myuan@163com U000000002 P000000003 王广 上海杨浦区四平路12号 158158158 gwang@163com …… …… …… …… …… …… 分析S关系模式,存在以下四个问题。 1数据冗余太大 一个关系中某属性有若干个相同的值称为数据冗余。关系模式S数据冗余太大,例如,某用户购买了n种商品,那么其姓名、地址、电话和电子邮箱都要重复n次,这将浪费大量的存储空间。 2插入异常 关系模式S的主键(用户ID,商品ID),如果一个新商品,尚无用户购买,则用户ID这一主属性为空值,根据实体完整性规则,无法将这个用户ID、姓名、地址、电话和电子邮箱存入关系模式S,这就是插入异常。在一个关系中,现实中某实体确实存在,某些属性(尤其是主属性)的值暂时还不能确定,导致该实体不能插入该关系中,称为插入异常。 3删除异常 如果要删除袁玫购买的商品“P000000001”,由于商品ID是主键中的属性,不能置空,那么只有将相关的整条记录删除才能删除商品信息,由此就删除了不该删除的信息:用户ID、地址、电话和电子邮箱,这就是删除异常。在一个关系中,因要清除某些属性上的值而导致连同删除了一个确实存在的实体,称为删除异常,即不该删除的却删除了。 4修改异常 例如,要修改某用户的地址,必须逐一修改有关的每一个元组的“地址”属性值,否则就会出现数据不一致,这就是修改异常。对于冗余的数据,如果只修改其中一个,其余的未修改,就会出现数据不一致,这称为修改异常。 关系模式S存在以上四个问题,因此不是一个规范的关系模式,这是由于存在于模式中的某些数据依赖引起的。一个规范的关系模式不会发生插入异常、删除异常、修改异常,数据冗余应尽可能少。 232函数依赖 数据依赖(data dependency)是通过一个关系中属性间值的相等与否体现出数据间的相互关系,是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。数据依赖有多种类型,其中最重要的是函数依赖(functional dependency)和多值依赖(multivalued dependency)。函数依赖是关系模式内属性间最常见的一种依赖关系。 定义28设有关系模式R(U),X和Y均为U的子集。在关系模式R中,任意两个元组m,n在X中的属性值相同,则m,n在Y中的属性值也相同,则称X函数决定Y,或称Y函数依赖于X,记为X→Y。其中的X称为决定因素,Y称为依赖因素。 例29设有关系模式用户(用户ID,密码,用户类型,姓名)、子集X (用户ID)、子集Y(用户类型)和子集Z(姓名)。每个用户有唯一的ID,姓名可能相同,但每个用户只能属于一个类型。据此,可以找出用户关系模式中存在下列函数依赖:X→Y,或记为用户ID→用户类型;X→Z或记为用户ID→姓名。 根据函数依赖的不同性质,函数依赖可分为完全函数依赖、部分函数依赖和传递函数依赖。 定义29在关系模式R(U)中,如果X→Y,并且对于X的任意一个真子集X′不能确定Y,则称Y对X完全函数依赖,记为XfY。 定义210在关系模式R(U)中,如果X→Y,但Y对X不是完全函数依赖,则称Y对X是部分函数依赖,记为XpY。 定义211在关系模式R(U)中,当且仅当X→Y且Y→Z时,则称Z对X传递函数依赖,记为XtY。 例210假设有关系模式S(用户ID,商品ID,订货数量,商品名称,生产厂商,厂商地址),{用户ID,商品ID}为主键。分析关系模式S中的函数依赖。 分析过程如下所述。 (1) 因为存在主键属性子集{商品ID}→非主属性集{商品名称,厂商名,厂商地址},所以存在非主属性对主键的部分函数依赖,表示为:用户ID,商品IDp商品名称,厂商名,厂商地址。 (2) 因为在主键中找不到任何子集能唯一确定订货数量,所以订货数量与主键{用户ID,商品ID}之间只存在完全函数依赖关系,表示为:用户ID,商品IDf订货数量。 (3) 因为商品ID→生产厂商,生产厂商→厂商地址,所以厂商地址与商品ID之间存在传递函数依赖关系,表示为:商品IDt厂商地址。 233范式 定义212第一范式是关系中的每个属性均必须是一个不可分割的基本数据项。如一个关系模式R满足此条件,则称R属于第一范式(first normal form, 1NF),可记为R∈1NF。 在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库。例如,表23就不属于关系模式的1NF。因为在简介属性中还有子属性:商品库存、商品价格和商品类型,显然违反了1NF中的每个属性都是不可再分的基本数据项。转换方式有以下两种方法。 方法1:将“商品信息”表转换为以下关系模式:商品信息(商品ID,商品名称,商品库存,商品价格,商品类型),则“商品信息”关系模式属于1NF。 方法2:将“商品信息”表分解为以下两个关系模式:商品(商品ID,商品名称);简介(商品ID,商品库存,商品价格,商品类型),则“商品”关系模式属于1NF,“简介”关系模式属于1NF。 两种方法相比,方法1比方法2数据冗余度大,浪费存储空间;但方法2比方法1查询速度慢,因为有的查询要连接“学生”和“简历”两张表,用到连接运算。 表23“商品信息”表 商品ID 商品名称 简介 商品库存 商品价格 商品类型 p000000008 松露巧克力 60 100 休闲零食 … … … … … 定义213若R∈1NF,且所有非主属性都完全依赖于任意候选键,则R∈2NF。简言之,第二范式就是属性完全依赖于主键。 2NF是在1NF基础上建立起来的,要求数据库表中的每个元组必须可以被唯一地区别,为实现区分通常需要为表加上一列,以存储各个实例的唯一标识。第二范式要求实体的属性完全依赖于主关键字,所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。 例211设有关系模式S(用户ID,商品ID,订货数量,商品名称,生产厂商,厂商地址),分析S是否属于第二范式?如果不属于,如何分解为属于第二范式? 分析过程如下所述。 (1) 由例29可知,存在非主属性对主键的部分函数依赖,即用户ID,商品IDp商品名称,生产厂商,厂商地址,所以关系模式S不属于2NF。 (2) 将关系模式S分解为如下两个属于2NF的关系模式,以消除非主属性的部分依赖:S1(用户ID,商品ID,订货数量)和S2(商品ID,商品名称,生产厂商,厂商地址)。 定义214若R∈1NF,且所有非主属性都不传递依赖于任意候选键,则R∈3NF。简言之,第三范式就是属性不依赖于其他非主属性。 例212设有关系模式S2(商品ID,商品名称,生产厂商,厂商地址),分析关系模式S2是否属于第三范式?如果不属于,如何分解为属于第三范式? 分析过程如下所述。 (1) 由例29可知,存在非主属性对候选键的传递依赖,即,商品IDt厂商地址,所以关系模式S2不属于3NF。 (2) 将关系模式S2分解为如下两个属于3NF的关系模式,以消除非主属性的传递依赖:S21(商品ID,商品名称,生产厂商),S22(生产厂商,厂商地址)。 定义215若R∈1NF,且所有属性都不传递依赖于任意候选键,则R∈BCNF。 由定义215可知BCNF比3NF更为严格,若R∈BCNF则R∈3NF。 例213设有关系模式:SC(学号,课号,成绩,教师号),其中: (1) 关系模式SC的候选键为:(学号,课号)、(学号,教师号)。 (2) 主属性为:学号、课号、教师号;非主属性为:成绩。 (3) 函数依赖关系为:(学号,课号)→成绩;(学号,课号)→教师号;(学号,教师号)→课号;教师号→课号。 试分析关系模式SC是否属于BCNF,如何分解为属于BCNF? 分析过程如下所述。 (1) 因为教师号→课号,关系模式SC不属于BCNF。 (2) 将关系模式SC分解为如下两个属于BCNF的关系模式,以消除主属性“课号”对候选键(学号,教师号)的传递依赖:SC1(学号,课号,成绩),SC2(教师号,课号),均属于BCNF。 234规范化设计 1规范化的基本思想 一个低一级的范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这个过程就是关系模式的规范化。通过消除不合适的数据依赖,使模式中的各关系模式达到某种程度的“分离”,让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它“分离”出去。 2规范化的目的和方法 消除操作异常,降低数据冗余度。从关系模式中各属性间的函数依赖入手,尽量做到每个模式表示客观世界中的一个“事物”。 3规范化的实现手段 用投影运算分解关系模式。实际上,从1NF到BCNF的过程就是一个不断消除一些函数依赖关系的过程。图29给出了这个过程。 图29关系规范化的过程 规范化是一种理论,它研究如何通过规范关系以解决操作异常与数据冗余现象,在实际的数据库设计中构造关系模式时需要考虑规范化问题。但是,客观世界是复杂的,在构建关系模式时还需要考虑到其他的多种因素,如果关系模式分解过多,导致在数据查询时要用到较多的连接运算,就会影响查询速度。因此,在实际设计中,需要综合多种因素,统一权衡利弊得失,最后构造出一个合适的、能够反映现实世界的关系模式。 本章概述了关系模型、数据库系统设计的基本过程和数据库规范化基础。 关系模型概述包括:关系模型的基本概念、关系的性质、关系的数据模型、关系运算、关系数据库及其特点。数据库系统基本过程包括:现实世界的需求分析、信息世界的概念结构设计、计算机世界的逻辑结构设计、数据库物理设计、数据库实施、数据库运行和维护。数据库规范化基础包括:规范化的必要性、函数依赖、范式和规范化设计。 一、 单项选择题 1数据库的三级模式之间存在的关系正确的是()。 A外模式/内模式B 外模式/模式 C外模式/外模式 D模式/模式 2数据库三级结构从内到外的3个层次为()。 A外模式、模式、内模式B 内模式、模式、外模式 C模式、外模式、内模式D内模式、外模式、模式 3数据库三级模式中,真正存在的是()。 A外模式B 子模式 C 模式 D 内模式 4关系数据库中的关键字是指()。 A能唯一决定关系的字段B不可改变的专用保留字 C关键的、很重要的字段D能唯一标识元组的属性或属性集合 5在关系R(R,RN,S)和R(S,SN,SD)中,R的主键是R,S的主键是S,则S在R中称为()。 A外键 B候选键C主键D以上都不是 6若D1=a1,a2,a3,D2=1,2,3,则D1·D2集合中共有元组()个。 A 6 B 8 C 9 D 12 7数据库中的关系具有这样的性质()。 A列的顺序可以任意交换且可以是可分的数据项 B列的顺序可以任意交换且是不可分的数据项 C列的顺序不可以任意交换且可以是可分的数据项 D列的顺序不可以任意交换且是不可分的数据项 二、 填空题 1()属于信息世界的模型,实际上是现实世界到机器世界的一个中间层次。 2当数据库的()改变了,由数据库管理员对() 映象作相应改变,可以使()保持不变,从而保证了数据的物理独立性。 3在数据库中,产生数据不一致的根本原因是()。 4数据独立性又可分为()和()。 5关系模型允许定义3类完整性约束,它们分别是()、()和()。 6关系模型是由()、()和()3个部分组成。 三、 简答题 1简述数据模型的概念、作用和组成。 2简述概念模型的作用。 3简述数据库系统三级模式结构及其优点。 4学校中有若干系,每个系有各自的系号、系名和系主任,以及若干名教师和学生;教师有教师号、教师名和职称属性,每个教师可以担任若干课程,一门课程只能由一位教师讲授;项目有项目号、名称和负责人;项目由多人合作,且责任轻重有排名;课程有课程号、课程名和学分;学生有学号、姓名、性别,每个学生可以同时选修多门课程,选修有学分。 (1) 请用ER图画出此学校的概念模型。 (2) 将ER模型转换为关系模型。 系(系号,系名,系主任) 教师(教师号,教师名,职称,系号) 学生(学号,姓名,年龄,性别,系号) 项目(项目号,名称,负责人) 课程(课号,课程名,学分,教师号) 选修(课号,学号,学分) 负责(教师号,项目号,排名) 5简述数据库设计过程。 第3章SQL Server数据库 在现代的各种商业活动中,数据库技术扮演着越来越重要的作用。微软公司发布的SQL Server系列产品是一个典型的关系库管理系统,它历经时间检验,凭借强大的功能,简便的操作,可靠的安全性,获得了越来越多用户的认可,其应用领域也不断地向纵深发展。本章详细介绍SQL Server 2012的组成、SQL Server 2012数据备份与还原和SQL Server 2012数据库安全性管理。 31SQL Server的组成 数据库对象是SQL Server 2012数据库管理系统管理和维护的核心对象,包含业务所必需的全部数据及其自定义的一些业务规则和约束。同时微软公司将数据库管理系统的一些核心运行状态,以视图或者表的形式存在系统数据库中,因此通过对系统数据库相关表或视图的查询可以掌握当前系统的动态运行情况。要熟练地掌握和应用数据库管理系统,必须首先对数据库的组成有清晰的了解。 311系统数据库 系统数据库是在安装SQL Server 2012时由安装程序自动创建和管理的数据库,共有4个,作为SQL Server管理软件运行的基础,协助系统完成对数据库的各种操作。 1 master数据库 master数据库作为SQL Server的核心数据库,记录了SQL Server 2012系统级的信息,一旦遭到破坏,整个数据库管理系统将无法启动。master数据库包含如下五个重要的系统信息。 (1) 所有的用户ID及其对应的用户角色。 (2) 每个用户数据库的文件存储路径。 (3) 所管理的所有业务数据库的名称及其相关信息。 (4) SQL Server相关的初始化信息。 (5) 业务数据库的配置信息。 2 model数据库 model数据库是在SQL Sever 2012实例上创建的所有数据库的模板。如果希望新创建的数据库具有特定的信息,或者所有的新数据库具有规定的初始值大小等,可以把这些信息存储在model数据库中,以它为模板来创建新的业务数据库。如果修改model数据库,之后创建的所有数据库都将继承这些修改。例如,可以设置权限、数据库选项或添加对象,如表、函数或存储过程等。 3 msdb数据库 msdb数据库是SQL Server 2012数据库管理系统的专用数据库,用于SQL Server的代理计划、作业和警报。尤其是SQL Server Agent需要使用它来安排作业和警报、记录操作者等操作。其中作业是非常有用的功能,用得比较多。所谓作业就是规定数据库管理系统在指定的时间段内以指定的频率执行一个用户定义的任务。在使用时不能对该数据库执行下列操作,否则会引起系统崩溃。 0 0 (1) 删除数据库。 (2) 删除账号guest。 (3) 删除主文件组、主数据文件或日志文件。 (4) 将数据库设置为离线状态。 (5) 将主文件设置为只读。 4 tempdb数据库 tempdb数据库是数据库管理系统的系统临时数据库,主要存储当前用户的一些临时数据信息,如临时表、临时存储过程以及用户定义的全局变量等。当用户与SQL Server 2012断开连接时,其临时表和存储过程等会被自动删除,在下次重新连接SQL Server 2012时,将建立一个全新的、空的临时数据库。 312数据库文件 数据库文件是存在数据库数据和数据库对象的文件。一个数据库可以有一个或多个数据库文件,一个数据库文件只属于一个数据库。 1数据库文件的分类 在SQL Server 2012中每个数据库至少包含两个关联的存储文件:数据文件和事务日志文件。在数据量比较大时,为了便于关联和备份,还可以使用辅助数据。因此在数据库系统中可以使用3个独立的存储文件来存储信息。 1) 主数据文件 主要包含数据库的启动信息,并保存对其他数据文件的索引。另外,用户数据和对象也可以存在此文件中。每个数据库默认只能有一个主数据文件,默认扩展名为mdf。 2) 辅助数据文件 用户可以根据业务需要建立辅助数据文件来存储用户数据,并且可以分散在不同的磁盘中;默认扩展名为ndf;一个数据库既可以没有也可以有多个辅助数据文件,文件名应尽量与主数据文件名相同。 3) 事务日志文件 主要用于记录数据库的更新情况,每个数据库至少包含一个事务日志文件,事务日志文件不属于任何文件组。凡是对数据库进行的增、删、改等操作都会记录在事务日志文件中。当数据库被破坏时可以利用事务日志文件恢复数据库的数据,从而最大限度地减少由此带来的损失。日志文件的默认扩展名为ldf。 2文件大小 SQL Server 2012需要描述文件大小,包含初始大小(size)、最大值(maxsize)和增量(filegrowth)3个参数。文件的大小以从最初指定的初始大小(size)开始按增量(filegrowth)来增长,当文件增量超过最大值(maxsize)时将出错,文件无法正常建立,即数据库无法创建。如果没有指定最大值,文件可以一直增长到用完磁盘上的所有可用空间。 313数据库文件组 为便于分配和管理,可以将数据库对象和文件一起分成文件组。SQL Server 2012有以下两种类型文件组。 1主文件组 包含主数据文件和任何没有分配给其他文件组的数据文件。系统表都分配在主文件组中。在SQL Server 2012中用PRIMARY表示主文件组的名称。主文件组由系统自动生成,供用户使用,不能由用户修改或删除。 2用户定义文件组 在CREATE DATABASE或ALTER DATABASE语句中使用FILEGROUP关键字指定的任何文件组。 日志文件不包括在文件组内,日志空间与数据空间分开管理。每个数据库中均有一个文件组被指定为默认文件组,一次只能将一个文件组作为默认文件组,如果没有指定默认文件组,则将主文件组作为默认文件组。 314数据库对象 数据库中的数据在逻辑上被组织成一系列对象,SQL Server 2012有以下数据库对象。 1表 表是数据库中最基本的元素,主要用于存储实际的数据,用户对数据库的操作大多都是直接或间接地依赖于表。表由行和列组成,一列称为一个字段,列数据具有相同的数据类型;一行称为一条记录,由不同的字段组成。 2视图 视图是从一个或者多个表中导出的表,其结构和数据是建立在对表的查询基础上的。 对用户来说视图和表很类似,但在系统内部,它们完全不同。数据库中存储的只是视图的定义,而不是视图包含的数据,数据实际上存储在该视图所依赖的基础表中。所以,当基础表中的数据发生变化时,对应的视图能即时地反映数据的变化。虽然视图也可以进行查询、删除和更新等操作,但提倡对多个表组合而成的视图尽量只进行查询操作,以免引起不必要的数据异常。 3索引 索引如同书的目录一样,用户可以通过索引快速检索表或者视图中的特定信息。索引包括一个或多个从表或视图生成的键。通过建立合理的索引,可以显著地提高数据库的查询速度和应用程序的性能。索引可以强制表中行记录具有唯一性,从而实现完整性。主键是一种特殊的索引。 4默认值 默认值是在表中创建列或插入数据时对没有指定其具体值的列或列数据项赋予事先设定好的值。 5约束 SQL Server实施数据一致性和数据完整性的机制,包括主键约束、外键约束、UNIQUE约束、CHECK约束、默认值和允许空6种机制。 6规则 规则是用来限制数据表中的有限范围,以确保列中数据完整性的一种方式。 7存储过程和触发器 存储过程和触发器是SQL Server中两个重要的特殊元素。存储过程独立于表,用户可以通过存储过程来扩展数据库的功能,减少客户端的带宽需求,甚至可以将企业的业务逻辑封装到存储过程中,前端程序只是作为一个查询和结果显示的用户界面,减少程序模块的耦合性,提供程序和功能的独立性。触发器的存在依赖于具体的表,用户可以利用触发器来实现各种复杂的业务逻辑,或强制实施数据的完整性。 8登录 SQL Server访问控制允许连接到服务器的账户。 9用户和角色 用户是指对数据库系统具有一定权限的使用者。角色是具有相同操作权限的用户集合。可以通过SQL Server的企业管理器来可视化地进行用户和角色的管理。 32SQL Server数据备份与恢复 在数据库系统中,当计算机硬件或软件出现故障时,会造成数据库中的数据丢失或破坏,因此需要一套完整的数据库备份与恢复机制,保护数据库的可靠性和可用性。SQL Server提供了完善而简便的数据库备份与恢复功能。本节将介绍这些功能的相关概念与实施方法,主要内容有:数据库的导入和导出;数据库的备份策略与备份方法;数据库的恢复策略与恢复方法;不同备份与恢复策略的比较。 321数据的导入与导出 数据的导入导出操作可以使SQL Server与其他异型数据源(如Excel、Access)之间方便地进行数据复制。例如,可以将Excel工作表中的数据导入SQL Server的表中,也可以将SQL Server某个数据库表和视图导出为Excel工作表或Access数据库表或其他格式的数据文件。 使用“SQL Server导入导出向导”能方便地进行数据的导入和导出。通过选择“开始”—“Microsoft SQL Server 2012”—“导入和导出数据(32位)”选项,可以打开该向导,如图31所示;也可以在SQL Server Management Studio中启动导入导出向导。 图31使用开始菜单运行导入导出向导 1数据的导入 在SQL Server Management Studio中启动与使用数据导入的操作,具体步骤如下所述。 (1) 打开SQL Server Management Studio,选择已建立的数据库实例,如GISDATA,右击GISDATA数据库,在弹出的快捷菜单中选择“任务”—“导入数据”选项,如图32所示。 (2) 在打开的“SQL Server导入和导出向导”对话框中单击“下一步”按钮,进入选择导入数据的数据源页面。例如,在数据源下拉列表框中选择Microsoft Excel选项,指定要导入的Excel文件路径和Excel版本,如图33所示,然后单击“下一步”按钮。 图32数据导入菜单 图33导入向导——选择数据源 (3) 在“SQL Server导入和导出向导”对话框中,指定导入的数据库为GISDATA,如图34所示,然后单击“下一步”按钮。 图34导入向导——选择目标数据库 (4) 选定“复制一个或多个表或视图的数据”,如图35所示,然后单击“下一步”按钮。 图35导入向导——选择导入数据 (5) 在列表框中选定Excel文件中的Sheet1工作表,如图36所示。 图36导入向导——选择导入数据表 (6) 如果需要对字段的名称、类型、大小进行重新设置,可以单击“编辑映射”按钮,出现如图37所示的“列映射”对话框,在该对话框中进行设置完毕后,单击“确定”按钮,然后单击“下一步”按钮。 图37导入向导——选择导入字段列 (7) 在“SQL Server导入和导出向导”对话框中,选中“立即运行”复选框,如图38所示,然后单击“下一步”按钮。 图38导入向导——保存并运行包 (8) 完成导入数据向导设置后,在“SQL Server导入和导出向导”对话框中,单击“完成”按钮,如图39所示。 图39导入向导——完成导入 (9) 导入数据完成后,出现“执行成功”的界面,提示用户已成功导入了13行数据,如图310所示。 图310导入向导——完成导入详细信息 (10) 在SQL Server Management Studio中打开GISDATA数据库,查看导入的数据表,如图311所示。 图311数据导入结果 2数据的导出 在SQL Server Management Studio中启动与使用数据导出的操作,具体步骤如下。 (1) 打开SQL Server Management Studio,选择已建立的数据库实例,如GISDATA,右击GISDATA数据库,在弹出的快捷菜单中选择“任务”—“导出数据”选项,如图312所示。 图312数据导出菜单 (2) 在打开的“SQL Server导入和导出向导”对话框中单击“下一步”按钮,选择导出数据的数据库GISDATA,如图313所示。然后单击“下一步”按钮。 图313数据导出——选择数据源 (3) 在“选择目标”界面中,选择目标类型为Microsoft Excel,输入Excel文件路径,如本例为“C:\\Users\\Administrator\\Desktop\\van\\diqiuxls”,如图314所示。然后单击“下一步”按钮。 图314数据导出——选择目标数据 (4) 选择GISDATA数据库中的salary作为源表,如图315所示,如果需要设置字段的名称、类型、大小对应关系,则单击“编辑映射”按钮,打开“列映射”对话框,如图316所示,设置完成后单击“确定”按钮,回到“SQL Server导入和导出向导”对话框,然后单击“下一步”按钮。 图315数据导出——选择源表 图316数据导出——设置列映射 (5) 在“SQL Server导入和导出向导”对话框中,选中“立即运行”复选框,如图317所示,然后单击“下一步”按钮。 图317数据导出——开始导出 (6) 完成导出数据向导设置后,在“SQL Server导入和导出向导”对话框中,单击“完成”按钮,如图318所示。 图318数据导出——完成向导 (7) 导出数据完成后,出现“执行成功”的界面,提示用户已成功导出了13行数据,如图319所示。 图319数据导出——完成导出详细信息 (8) 打开“C:\\Users\\Administrator\\Desktop\\van\\diqiuxls”,可以看到如图320所示的数据。 图320数据导出——查看导出结果 322数据库的备份策略与备份方法 备份是对数据库结构、对象和数据的复制,当数据库遭到破坏时能够用备份将数据库恢复到可用状态。SQL Server 2012提供了一套较为完善的备份恢复策略,当数据库系统发生错误时能够用备份来恢复数据库,并使丢失的数据量减少到最小。 1备份策略 数据库中的数据对于系统和用户而言是至关重要的,即使最可靠的硬件和软件也可能会出现故障造成数据破坏。数据库备份可以保存数据副本,在遇到故障时能够使用这个副本将数据库恢复到创建备份时的状态。可能造成数据损失的故障有存储介质故障(磁盘驱动器损坏)、用户操作错误(用户有意或无意地删除了某个表,使数据库中的数据出现不一致)、服务器崩溃(服务器硬件错误或者是操作系统崩溃)、自然灾害等。 SQL Server 2012提供了4种备份策略,用户可以根据需求设计自己的备份策略,以保护存储在SQL Server数据库中的数据。 1) 完整数据库备份 完整数据库备份是对整个数据库中的数据库文件、事务日志进行备份。完整备份是一种基本备份,是进行其他类型备份的基础。利用一个完整数据库备份就可以恢复整个数据库,但是完整数据库备份与差异数据库备份相比,需要更多的存储空间,备份过程所花费的时间也更多。因此,不需要频繁地进行完整数据库备份,通常是设置该操作定期执行。 使用完整数据库备份来恢复数据时,只能恢复到最后一次完整数据库备份时的状态。 当数据库数据量小,总的备份时间可以接受时,或者数据库中的数据仅有很少变化,比较适合采用完整数据库备份。 2) 差异数据库备份 差异数据库备份仅记录自上次完整数据库备份以来发生的数据库改变。例如,假设在星期天执行了完整备份,在星期一执行差异备份,这个差异备份则将记录自星期天执行完整备份以来发生的所有数据库修改。差异备份更小,进行备份和恢复所需的时间更少,因此,可以经常进行差异备份以降低数据丢失的风险。 当数据库变化比较频繁,或者想让备份时间尽可能短时,适合采用差异备份。 3) 事务日志备份 事务日志备份是对上次进行了数据库备份(包括完整备份、差异备份和事务日志备份)之后所有已经完成的事务进行备份。由于它仅对事务日志进行备份,所以比完整备份和差异备份都更节约存储空间,而且进行数据库恢复时可以指定恢复到某一个事务,这是完整备份和差异备份都做不到的。但是事务日志备份进行数据库恢复时需要按日志重新增加、修改或删除数据,所以需要的时间会较长。通常,将事务日志备份作为完整备份和差异备份的补充,这样可以尽量减少丢失的数据。 事务日志备份可以将数据库恢复到故障点之前或特定时间点。通常事务日志备份比完整备份和差异备份使用的资源少,因此可以较频繁地创建事务日志备份,减少数据丢失的风险。只有当启动事务日志备份序列时,完整备份或者差异备份才必须与事务日志备份同步。每个事务日志备份的序列都必须在执行完整备份或差异备份之后启动。 事务日志备份一般用于需要经常进行修改操作的数据库上。 4) 数据库文件和文件组备份 当某个数据库很大时,对整个数据库进行备份可能会花很长的时间,这时可以执行数据库文件或文件组备份。在备份文件和文件组时,通常要备份事务日志以保证数据库的可用性。由于SQL Server不能自动维护文件关系的完整性,因此这种备份方式管理起来比较复杂。 2创建备份设备 备份设备是用来存储各种类型数据库备份的存储介质。常见的备份设备有磁盘备份设备、磁带备份设备和逻辑备份设备3种。 磁盘备份设备是硬盘或其他磁盘存储介质上的文件,与常规操作系统文件一样。引用磁盘备份设备与引用任何其他操作系统文件一样。可以在服务器的本地磁盘上或共享网络资源的远程磁盘上定义磁盘备份设备,备份设备根据需要可大可小,最大可以相当于磁盘上的可用磁盘空间。 磁带备份设备的用法与磁盘备份设备相同,需要注意的是,磁带备份设备必须物理连接到运行SQL Server 2012的计算机上,如果磁带备份设备在备份操作过程中已满,但还需要写入一些数据,SQL Server 2012将提示更换磁带并继续备份操作。 逻辑备份设备是物理备份设备的别名,名称由用户定义,例如,物理备份设备名为“E:\\Backup\\SQL\\fullbak”的逻辑备份设备名可以为SQL SBAK。它的优点是比物理备份设备更能简单、有效地描述备份设备的特征。逻辑备份设备名称被永久保存在SQL Server的系统表中。备份或还原数据库时,物理备份设备名称和逻辑备份设备名称可以互换使用。 使用SQL Server Management Studio创建备份设备的具体步骤如下。 (1) 在“对象资源管理器”中展开“服务器对象”节点,右击“备份设备”,从弹出的快捷菜单中选择“新建备份设备”选项,如图321所示。 图321创建备份设备 (2) 打开“备份设备”对话框,在“设备名称”文本框中输入设备名称,该名称是备份设备的逻辑名称。指定备份文件的完整路径,如图322所示。 图322“备份设备”对话框 (3) 单击“确定”按钮完成备份设备的创建,展开“备份设备”节点就可以看到刚才创建的名称为“GIS数据备份”的备份设备。 3备份方法 1) 完整备份方法 使用SQL Server Management Studio工具对数据库进行完整备份,具体操作如下所述。 (1) 打开SQL Server Management Studio,在“对象资源管理器”中,展开“数据库”节点,右击“GISDATA”,在弹出的快捷菜单中选择“属性”选项,如图323所示。 图323设置数据库恢复属性 (2) 在打开的“数据库属性GISDATA”对话框中选择“选项”页面,设置“恢复模式”为“完整”,单击“确定”按钮保存修改结果,如图324所示。 图324设置备份恢复模式 (3) 右击“GISDATA”,从弹出的快捷菜单中选择“任务”—“备份”选项,打开“备份数据库”对话框,如图325所示。 图325打开“备份数据库”对话框 (4) 在“备份数据库GISDATA”对话框中,从“数据库”下拉列表框中选择“GISDATA”,从“备份类型”下拉列表框中选择“完整”选项,添加备份目标磁盘,如图326所示。 图326备份数据库 (5) 单击“确定”按钮完成对数据库的备份,完成后会弹出“备份完成”对话框,如图327所示。 图327完成数据库备份 2) 差异备份方法 创建差异备份的方法与创建完整备份几乎相同。使用SQL Server Management Studio对数据库GISDATAD进行差异备份,具体步骤如下所述。 (1) 右击“GISDATA”,从弹出的快捷菜单中选择“任务”—“备份”选项,打开“备份数据库”对话框,从“备份类型”下拉列表框中选择“差异”选项,其他内容不变,如图328所示。 图328差异备份数据库 (2) 打开“备份数据库GISDATA”对话框中的“选项”页面,选中“追加到现有备份集”单选按钮,以免覆盖现有的完整备份,再选中“完成后验证备份”复选框,如图329所示。 图329差异备份设置 (3) 单击“确定”按钮开始备份。 3) 事务日志备份方法 使用SQL Server Management Studio对数据库GISDATAD进行事务日志备份,具体步骤如下。 (1) 右击“GISDATA”,在弹出的快捷菜单中选择“任务”—“备份”选项,打开“备份数据库GISDATA”对话框。 (2) 在“备份数据库GISDATA”对话框中,从“备份类型”后的下拉列表框中选择“事务日志”选项,在“目标”下确保存在GISDATA设备,其他内容保持不变,如图330所示。 图330创建事务日志备份 (3) 打开对话框中的“选项”页面,选中“追加到现有备份集”单选按钮,以免覆盖现有的完整备份和差异备份,选中“完成后验证备份”复选框。选中“截断事务日志”单选按钮,如图331所示。 图331事务日志备份选项 (4) 设置完成后,单击“确定”按钮开始备份。 323数据库的恢复模式与恢复方法 数据库的恢复又叫数据库还原,是指将数据备份加载到系统中的过程,完成数据恢复。系统在还原数据库的过程中,将自动执行安全性检查、重建数据库结构以及完成填写数据库内容。在还原数据库之前,首先要保证所使用的备份文件的有效性,并且在备份文件中包含所要还原的数据内容。 1数据库恢复模式 恢复模式是数据库的一个属性,是在数据库运行时,记录事务日志的模式,控制了将事务记录在日志中的方式、事务日志是否需要备份,以及允许的还原操作。为每个数据库选择最佳的恢复模式,是备份和还原策略必不可少的组成部分。数据库还原过程会根据数据恢复模式的不同,操作过程也有所不同。SQL Server 2012提供了完整恢复模式、大容量日志恢复模式和简单恢复模式3种不同的数据恢复模式,以供数据库管理员根据系统的实际情况选择使用。 1) 完整恢复模式 完整恢复模式适用于十分重要的数据库系统,如金融、电信系统等。完整恢复模式可以在最大范围内防止数据丢失,使数据库免受各种故障影响。其主要步骤如下所述。 (1) 备份活动事务日志(日志尾部)。 (2) 还原最新的数据库的“完整备份”,但不恢复数据库。 (3) 如果有“差异备份”,则还原最新的“差异备份”,但不恢复数据库。 (4) 依次还原日志。 (5) 恢复数据库。 在完整恢复模式下,用户可以进行“完整”“差异”“事务日志”以及“尾日志”的备份类型的操作,完整恢复模式是以牺牲数据库性能为代价来换取数据库的安全性,需要使用存储空间并会增加还原时间和复杂性。 2) 大容量日志恢复模式 当对数据库进行大批量的增加、删除和修改操作时,会产生大量的日志记录,严重地影响了数据库的性能,这种情况下采用大容量日志恢复模式,可以只对操作进行记录而不记录细节,大大减少了日志空间的使用量。但由于采用了最小日志来记录大容量操作,不能逐个管理事务重新捕获更改,因此增加了大容量操作丢失数据的风险。一般来说,只有在运行大规模大容量操 图332数据库属性菜单 作期间,以及在不需要数据库的时间点,恢复数据库时使用该模式。 此外,大容量日志恢复模式下,备份包含大容量日志记录操作的日志,需要访问包含大容量日志记录事务的数据文件。如果无法访问该数据文件,则不能备份事务日志,此时,必须重做大容量操作。 3) 简单恢复模式 简单恢复模式没有事务日志备份,将自动回收日志空间以减少空间需求,简化了备份和还原。由于没有日志备份,在发生灾难时,不能恢复到灾难发生的时间点,因此这种恢复模式常在对数据库系统安全性要求不高的情况下使用。 (1) 不需要故障点恢复。如果数据库损坏,则会丢失自上一次备份到故障发生之间的所有更新。 (2) 愿意或可以承担丢失日志中某些数据的风险。 (3) 不希望备份和还原事务日志,希望只依靠完整备份和差异备份。 2查看/设置数据库恢复模式 打开SQL Server Management Studio,在“对象资源管理器”窗口中,展开“数据库”节点,右击某个数据库,在弹出的快捷菜单中选择“属性”选项,如图332所示。 在“数据库属性”对话框中,选择左边的“选项”页面,单击“恢复模式”下拉列表框就可以设置该数据库相应的恢复模式,如图333所示。 图333数据库属性对话框 3数据库的标准恢复 如果对数据库进行了完整备份,然后又进行了差异备份和事务日志备份,就必须全部恢复这三个备份文件才能使用数据库恢复到正常状态,这称为数据库的标准恢复。下面以GISDATA数据库为例来介绍标准恢复的过程。 (1) 右击选中“GISDATA”,在弹出的快捷菜单中选择“任务”—“还原”—“数据库”选项,如图334所示。 图334还原数据库菜单 (2) 在弹出的“还原数据库GISDATA”窗口中选中“数据库”,并选择用于还原的备份集,然后单击“确定”按钮,如图335所示。 图335还原数据库窗口 (3) 数据库成功还原后,会出现如图336所示的“成功还原了数据库‘GISPATA’”对话框,单击“确定”按钮完成数据库还原。 图336数据库还原成功 4文件/文件组恢复 标准恢复可以将整个数据库恢复到某个正确状态,但在该正确状态之后发生的操作不能恢复,例如,完整备份数据库后新建的表就不能恢复,这种情况下,就需要使用文件/文件组恢复,操作步骤如下所述。 (1) 右击GISDATA数据库,在弹出的快捷菜单中选择“任务”—“还原”—“文件/文件组”选项,打开“还原文件和文件组GISDATA”对话框。 (2) 在“常规”选项页面下,用前面介绍的方法选择备份设备后,在“选择用于还原的备份集”区域中选中文件组备份前面的复选框,单击“确定”按钮开始对数据库进行还原,如图337所示。 图337还原文件与文件组窗口 5时间点恢复 SQL Server 2012进行日志备份的时候,不仅会为事务日志中的每个事务添加编号,而且还会给它们都标上一个时间,因此允许将数据库恢复到几分钟或几个小时前的状态,这就是时间点恢复。但是,时间点恢复不适用于完全备份和差异备份,而只适用于事务日志备份。使用时间点恢复后,指定恢复时间点以后对数据库进行的修改操作都将被丢失。例如,12:00时进行了事务日志备份,13:00时系统出错,这时使用时间点恢复可以将数据恢复到12:00时的状态,在12:00~13:00对数据库所做的所有修改都将丢失。 使用SQL Server Management Studio进行时间点恢复数据库的操作步骤如下所述。 (1) 右击GISDATA数据库,在弹出的快捷菜单中选择“任务”—“还原”—“数据库”选项,打开“还原数据库”对话框。 (2) 单击目标下面的“时间线”按钮,打开“备份时间线:GISDATA”对话框,选中“特定日期和时间”单选按钮,输入具体时间,如图338所示。 图338设置时间点恢复 (3) 设置完成后单击“确定”按钮。 324不同备份与恢复策略的比较 备份是恢复数据库最容易和最能防止意外的方法。没有备份、所有的数据都可能会丢失。备份可以防止表和数据库遭受破坏、介质失效或用户错误而造成数据灾难。恢复是在意外发生后,利用备份来恢复数据库的操作。备份和恢复数据需要应用到具体的数据库环境中,因此,对于数据库管理员来说选择合适的数据库备份和恢复策略显得十分重要。良好的备份和恢复策略不仅可以提高数据的可用性,减少数据丢失,还能满足企业业务的特殊需求。 1确定备份和恢复的目标与要求 设计有效的备份和恢复策略需要数据库管理员计划、实现和测试。这其中涉及很多因素:企业对数据库可用性和防止数据丢失方面的要求,每个数据库的大小、使用模式和数据要求,硬件、人员、存储设备等物理安全性的要求。数据库管理员必须了解何时需要访问数据以及数据丢失后对企业业务产生何种影响,可以从以下几个方面来确定备份和恢复的目标与要求。 (1) 数据库可用性要求。主要包括每天数据库必须处于在线状态的时间段;服务器停机会对企业造成多大损失;如果遇到介质故障,企业可以接受的停机时间有多长;如果发生系统灾难,企业可以接受的停机时间有多长。 (2) 恢复要求。包括不丢失任何更改的重要程度和重新创建丢失的数据的难易程度。 (3) 数据库的使用模式。包括确定关键数据库的生产时段,以及这些时间段内所应采用的使用模式;确定什么时候需要大量使用数据库,从而导致频繁的插入和更新操作;确定哪些表更容易出现频繁修改;事务日志空间消耗是否会由于大量的更新活动而可能成为问题;数据库是否易受周期性的数据库大容量操作影响;如果是,则在使用完整恢复模式时,应切换为大容量日志恢复模式,以保证最小日志记录。 (4) 技术环境。数据库是否处于集中管理的多服务器环境中;数据库服务器是否是高可用性故障转移群集的一部分;是否计划为数据库创建数据库快照;是否计划使用日志传送等。 (5) 人员因素。是否有专职的数据库管理员;由谁负责执行备份和恢复操作;如何进行人员培训等。 2几种备份和恢复策略比较 1) 完整备份和恢复策略 当数据库规模比较小时,可以采用该策略。这种策略的主要优点是恢复过程比较快,例如,5月10日对数据库进行了完整备份,5月12日发生故障,则可以使用5月10日的备份对数据库进行恢复。这种策略的缺点是只能对备份点进行恢复,无法保证将数据库恢复到指定的时间点和故障点。如上面用5月10日的备份对5月12日的故障进行恢复,则会丢失5月10—12日对数据库所做的所有修改,更不可能恢复到10—12日的某个时间点。另外,完整备份较慢,所花的时间较长。 2) 完整兼差异备份和恢复策略 如果数据库比较大,定期执行完整备份将非常耗费人力、物力和财力,这时可以采用完整兼差异备份和恢复策略。相对于完整备份和恢复策略,该策略能够提供一个更快的备份,数据库管理员每次备份时,系统只记录完整备份以后数据库中发生的变化。 这种策略的主要缺点是恢复过程较慢,因为它需要恢复多个备份,包括完整备份和所需的差异备份。例如,系统在周一对数据库进行了完整备份,在以后每天都进行了差异备份,如果系统在周四出现了故障,则数据库管理员必须恢复周一的完整备份以及周二、周三的差异备份。 3) 完整兼事务日志备份和恢复策略 完整兼事务日志备份和恢复策略适用于任何类型的数据库,这种策略的优点有:可以提供一个非常快的备份过程,是从事务日志中清除旧事务的唯一备份和恢复策略,是唯一能够提供时间点恢复功能的备份和恢复策略。 这种策略的主要缺点是恢复过程比较慢,因为它同样需要恢复很多的备份。例如,系统在周一进行了完整备份,接下来在以后每天都对数据库分时段进行了4次备份,如果系统在周四出现故障,则数据库管理员至少要恢复周一的完整备份和周一到周三的12次事务日志备份。因此,虽然这种策略的备份速度很快,但其恢复往往很漫长。 4) 完整、差异兼事务日志备份和恢复策略 在实际应用中,将完整、差异、事务日志这3种备份方法结合起来使用可以获得最佳效果。例如,系统在周一进行了完整备份,在以后每天晚上10点进行差异备份,每天分4个时段进行4次事务日志备份。如果数据库在某一天出现故障,数据库管理员只需要恢复周一的完整备份、故障前一晚的差异备份以及当天发生故障前的事务日志备份即可。这种策略恰当而又简单。 5) 文件组备份和恢复策略 对于超大型数据库系统,最好的方法是采用文件组备份和恢复策略,文件组备份的机制是一次只备份数据库的一部分,而不是备份整个数据库。例如,一个3TB的数据库,可以将其存放在不同硬盘上的文件组中,如果某天某个文件出现故障,则只需要恢复文件所在的文件组备份和事务日志备份即可,而不需要恢复整个完整备份。 33SQL Server数据库安全性管理 系统安全保护措施是否有效是数据库系统的主要技术指标之一。对于数据库系统的任何一类用户而言,数据库系统的安全性都是至关重要的问题。SQL Server 2012数据库在安全性方面较以前版本有了显著增强,提供了许多旨在改善数据库环境的总体安全性的增强功能和新功能,增加了密钥加密和身份验证功能,并引入了新的审核系统,以帮助报告用户行为并满足法规要求。 本节首先介绍了SQL Server的安全管理机制,然后详细讲述了SQL Server中的服务器安全管理和数据库安全管理等内容,主要内容有: SQL Server的安全机制;服务器登录模式;创建登录账户和服务器角色管理;架构和数据库用户管理;数据库角色管理和数据库权限管理。 331SQL Server的安全机制 SQL Server的安全机制可以分为4个层次,分别为网络访问控制安全机制、服务器级别安全机制、数据库级别安全机制和对象级别安全机制,如图339所示。 图339SQL Server 2012安全层次结构示意图 1 网络访问控制安全机制 用户使用客户端计算机通过网络访问SQL Server服务器时,要先获得客户端计算机操作系统的使用权。在网络环境中,SQL Server可以直接访问网络端口,所以可以实现对Windows NT安全体系以外的服务器及其数据库的访问。SQL Server 2012采用了集成Windows NT网络安全性的机制,所以使操作系统安全性得以提高,但同时也加大了管理数据库系统性和灵活性的难度。 2服务器级别安全机制 SQL Server 2012服务器级别的安全性建立在控制服务器登录的基础上。SQL Server 2012支持两种登录身份验证模式:Windows 身份验证模式、SQL Server和Windows身份验证模式。用户的登录身份决定了用户在访问SQL Server 2012进程时可以拥有的权利,设计合理的登录方式是SQL Server 2012数据库管理员的重要任务之一。 SQL Server 2012事先定义了许多服务器角色,这些角色是用户分配权限的单位。例如,拥有服务器角色的用户可以拥有服务器级别的管理权限,能为登录用户分配使用权限。 3数据库级别安全机制 用户登录SQL Server 2012服务器后并不意味着对每个数据库都能进行操作,通常在建立登录账户时,需要为登录账户选择默认的数据库,如果没有指定数据库,用户的权限将局限在master数据库以内。 默认情况下,数据库的拥有者可以访问该数据库的对象,可以分配访问权限给其他用户,以便让其他用户也拥有针对该数据库的访问权限。SQL Server 2012可以要求每一个用户在系统或者服务器上有一个账户和口令,这样可以提供附加的保护。 4对象级别安全机制 数据对象的访问权限定义了用户对数据库中数据对象的引用、数据操作语句的许可权限。在创建数据库对象的时候,SQL Server 2012自动把该数据库对象的拥有权限赋给该对象的所有者,对象的所有者可以实现该对象的安全控制。 在SQL Server 2012安全机制的作用下,用户访问数据要经历3个阶段:首先,用户必须登录到SQL Server服务器进行身份验证,确认合法后才能登录SQL Server实例;其次,用户在每个要访问的数据库里必须要有一个账户,SQL Server将登录账户映射到数据库用户账户上,使用这个数据库账户来定义数据库管理和数据对象访问的安全策略;最后,检查用户是否具有访问数据库对象、执行动作的权限,经过权限的验证才能够实现对数据的操作。 332服务器登录模式 连接到SQL Server 2012服务器时,必须提供正确的登录用户名和口令,数据库引擎首先会检查用户名和口令是否有效,然后再检查该登录用户是否是具备连接数据库访问许可的数据库用户。SQL Server 2012服务器支持两种登录身份验证模式:Windows身份验证模式和SQL Server身份验证模式。 当用户以Windows身份验证模式进行登录时,SQL Server依靠操作系统来认证用户的合法性,由于该用户本身就是操作系统的合法用户,因此不需要提供用户的任何认证信息。当使用SQL Server身份验证时,SQL Server依靠现有的SQL Server登录名来验证用户的合法性,因此需要提供用户名和口令。管理员可以根据需要对登录模式进行设置。具体操作步骤如下所述。 (1)在“开始”菜单中选择“所有程序”→Microsoft SQL Server 2012→SQL Server Management Studio命令,出现“连接到服务器”对话框,如图340所示。 图340“连接到服务器”对话框 (2)在“连接到服务器”对话框中选择相应的登录模式,单击“连接”按钮连接到服务器,如图341所示。 图341连接到服务器 (3)在对象资源管理器中,在SQL Server实例名(PC20150512KQN)上右击,从弹出的快捷菜单中选择“属性”命令,打开“服务器属性”界面,在“服务器属性”界面的左边的“选择页”中选择“安全性”,打开“安全性”选项页,如图342所示。 图342“服务器属性”界面 (4)如图342所示,可以在“服务器身份验证”中设置身份验证模式,如果更改了身份验证模式后,则要重新启动SQL Server实例才能使其生效。 Windows身份验证模式是推荐的身份验证模式。Windows身份验证中没有密码信息,使用操作系统已有的所有安全特性,可以在集中的企业存储方案中管理用户账户信息。但是,当需要为不属于自己操作系统的用户或者所用操作系统与Windows安全体系不兼容的用户提供访问授权时,就需要采用SQL Server身份验证模式,并使用合法的SQL Server登录名连接SQL Server服务器。 333创建登录账户和服务器角色管理 1创建Windows 身份登录账户 Windows身份验证是SQL Server默认的登录验证方式。这种方式下的登录用户必须是Windows Server 2000或Windows Server 2003中已存在的用户,并且要通过SQL Server Management Studio或命令方式对该Windows用户进行授权。创建Windows身份登录账户,具体操作步骤如下。 (1) 选择“控制面板”—“管理工具”—“计算机管理”命令,在该窗口中展开“本地用户和组”节点,如图343所示。 图343“计算机管理”窗口 (2) 右击“用户”节点,从弹出的快捷菜单中选择“新用户”命令,打开“新用户”对话框,在该对话框中设置用户的相应信息,如mapview,完成后单击“创建”按钮,新用户创建成功,如图344所示。 图344创建Windows新用户 (3) 打开SQL Server Management Studio,选择“安全性”—“登录名”命令。右击“登录名”节点,从弹出的快捷菜单中选择“新建登录名”命令,打开“登录名—新建”对话框。单击“搜索”按钮,在打开的“选择用户或组”对话框中把上一步创建的用户“PC20150512DKQN\\mapview”添加进来,单击“确定”按钮返回,如图345所示。 图345添加用户或组 (4) 右击用户名“PC20150512DKQN\\mapview”节点,从弹出的快捷菜单中选择“属性”命令,打开“登录属性”对话框,如图346所示。 图346新建Windows身份登录 2创建SQL Server登录账户 当采用SQL Server和Windows身份验证模式时,则必须创建SQL Server账户进行登录。创建SQL Server登录账户,具体操作步骤如下所述。 (1) 打开Microsoft SQL Server Management Studio,展开“安全性”节点。 (2) 右击“登录名”,从弹出的快捷菜单中选择“新建登录名”命令,打开“登录名新建”对话框,输入登录名,如lemon,选中“SQL Server身份验证”单选按钮,再输入相应的密码,如图347所示。 图347创建SQL Server登录账户 (3) 在如图347所示的对话框中,单机“确定”按钮,即完成了用户名为“lemon”的SQL Server登录账户的创建。 3 服务器角色管理 登录名创建后,SQL Server使用服务器角色来限定登录用户对服务器的管理权限。服务器角色是SQL Server事先定义的,其角色名称及功能如表31所示。 表31服务器角色 服务器角色 功能描述 Bulkadmin Dbcreator Diskadmin Processadmin Securityadmin Serveradmin Setupadmin Sysadmin Public 运行BULK INSERT语句 创建、修改删除和恢复数据库 管理磁盘文件 管理SQL Server进程 管理和审计服务器登录 配置服务器端设置 管理已连接的服务器并执行系统存储过程 能够在服务器上执行任何操作 每个登录名都属于 public 服务器角色 334架构和数据库用户管理 1架构 用户与架构分离是SQL Server 2005对于安全体系最重要的改进,SQL Server 2012同样继承了这一特点。架构是形成单个命名空间的数据库实例的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。架构是数据库对象的命名空间。多个用户可以通过角色或成员身份或Windows组成员身份拥有一个架构,可以对这一架构进行安全权限的设置,删除数据库用户时不需要重命名该用户架构包含的对象,极大地简化了删除数据库用户的操作。 用SQL Server Management Studio创建架构,具体步骤如下所述。 (1) 打开SQL Server Management Studio工具,选择要创建架构的数据库,展开该数据库,再展开“安全性”节点,右击“架构”节点,在弹出快捷菜单中选择“新建架构”命令,弹出“架构新建”对话框,如图348所示。 图348新建架构 (2) 输入架构名称,选择架构的所有者,默认所有者为dbo。 (3) 配置完成后,单击“确定”按钮。 2数据库用户管理 数据是存放在数据库中的,登录的SQL Server服务器的用户需要具有访问某一数据库的权限。因此管理员必须为登录账户在数据库中建立用户,将它们之间关联,通过授权来指定用户可以访问的数据库对象。使用SQL Server Management Studio来创建数据库用户账户,具体操作步骤如下所述。 (1) 打开SQL Server Management Studio,展开“数据库”节点,再展开相应的数据库,如GISDATA。 (2) 展开“安全性”节点,右击“用户”节点,从快捷菜单中选择“新建用户”命令,打开“数据库用户新建”对话框,如图349所示。 图349新建数据库用户 (3) 在对话框中输入新用户的用户名gisoper,单击“登录名”文本框旁边的按钮,选择SQL Server登录账户lemon。 (4) 选择默认架构为dbo,设置用户角色为dbowner,如图349所示。 (5) 单击“确定”按钮,完成数据库用户的创建。 335数据库角色管理 1固定的数据库角色 数据库用户创建后,可以使用数据库角色来为一组数据库用户指定数据库权限。SQL Server 2012为数据库创建了10个固定的数据库角色,这些角色是权限的集合,便于进行用户权限管理。用户不能增加、修改和删除这些固定的数据库角色,表32列出了这些固定的数据库角色。 通过SQL Server Management Studio将用户添加到固定数据库角色中来获得权限,具体操作步骤如下所述。 表32固定数据库角色 固定数据库角色名称 权限说明 dbowner 可以执行数据库的所有配置和维护活动,还可以删除数据库 dbsecurityadmin 可以修改角色成员身份和管理权限。向此角色中添加主体可能会导致意外的权限升级 dbaccessadmin 可以为Windows登录名、Windows组和SQL Server登录名添加或删除数据库访问权限 dbbackupoperator 可以备份数据库 dbddladmin 可以在数据库中运行任何数据定义语言(DDL)命令 dbdatawriter 可以在所有用户表中添加、删除或更改数据 dbdatareader 可以从所有用户表中读取所有数据 dbdenydatawriter 不能添加、修改或删除数据库内用户表中的任何数据 dbdenydatareader 不能读取数据库内用户表中的任何数据 public 一个特别的数据库角色,所有数据库用户都属于public角色,不能将用户从public角色中移除 (1) 打开SQL Server Management Studio,在“对象资源管理器”中展开“数据库”节点,例如,选择GISDATA—“安全性”—“角色”—“数据库角色”命令。 (2) 双击db_owner,打开“数据库角色属性db_owner”对话框。 (3) 单击“添加”按钮,打开“选择数据库用户或角色”对话框,然后单击“浏览”按钮打开“查找对象”对话框,选中数据库用户“guest”的复选框,如图350所示。 图350“查找对象”对话框 (4) 单击“确定”按钮打开“选择数据库用户或角色”对话框,再单击“确定”按钮打开“数据库角色属性”对话框,就可以看到guest已经列入db_owner的角色成员中了,如图351所示。 图351“数据库角色属性”对话框 (5) 单击“确定”按钮关闭“数据库角色属性db_owner”对话框,操作完成。 2用户自定义角色 如果要使用角色对用户权限进行更细致的设置,就需要创建一个自定义的数据库角色,对这个自定义角色分配权限,然后将用户指派给该角色。创建一个自定义数据库角色,具体步骤如下所述。 (1) 打开SQL Server Management Studio,选择“数据库”—GISDATA—“安全性”—“角色”— “数据库角色”,右击“数据库角色”节点,从弹出的快捷菜单中选择“新建数据库角色”命令,打开“数据库角色新建”对话框。输入角色名称“gisrole”,选择所有者为“dbo”,单击“添加”按钮,选择数据库用户为“guest”,设置情况如图352所示。 图352新建数据库角色 (2) 在图352对话框中打开“安全对象”页面,单击“搜索”按钮,选择“属于该架构的所有对象”中的“dbowner”,单击“确定”按钮,在“安全对象”中选择“ziyuan”,选中对话框下面的“选择”后面的“授予”复选框。 (3) 单击“列权限”按钮为表中每一列分配具体的权限,分配好权限后单击“确定”按钮创建这个角色。 336数据库权限管理 数据库权限决定了用户对数据库对象的使用权和操作权。用户在数据库中的权限取决于用户所在的角色和用户账户的数据库权限。SQL Server提供了一个完善的权限结构,可以对登录账户、角色、表、存储过程等对象设置权限。表33列出了表的操作权限。 表33表的操作权限 权限 说明 权限 说明 alter control delete insert references 可以更改表的属性 提供所有权之类的权限 可以在表中删除行 可以向表中插入行 可以通过外键引用其他表 select take ownership update view definition 可以在表中选择行 可以取得表的所有权 可以更新行 可以访问表的元数据 存储过程是开发人员最常用到的数据库对象之一,也是需要保护的对象。用户需要具备相应的权限来执行一个存储过程。表34列出了可以为存储过程授予的权限,当执行一个存储过程时,SQL Server会检查当前的数据库用户是否具有正存储过程的执行权限,如果当前用户不具备执行权限,则执行被拒绝。 表34存储过程权限 权 限 说 明 权 限 说 明 Alter Control Execute 可以更改存储过程属性 可以提供所有权之类的权限 可以执行存储过程 Take ownership View definition 可以取得存储过程的所有权 可以查看存储过程的元数据 首先,本章系统地介绍了SQL Server数据库的组成,包括系统数据库、数据库存储文件和数据库主要元素。当计算机硬件或软件出现故障时,会造成数据库中的数据丢失或破坏,因此需要一套完整的数据库备份与恢复机制。其次,本章介绍了数据的导入与导出、数据库的备份策略与备份方法、数据库的恢复模式与恢复方法以及不同备份与恢复策略的比较。随着计算机网络技术和数据库技术的发展,数据库安全性问题更为突出。最后,本章介绍了SQL Server安全机制、服务器登录模式、创建登录和服务器角色管理、架构和数据加用户管理、数据库角色管理和数据库权限管理。 一、 填空题 1 SQL Server 2012提供的4种备份策略:()、()、()和()。 2 SQL Server 2012中,系统数据库是()、()、()和()。 3 SQL Server 2012中,3个独立的存储文件包括:()、()和()。 4常见的数据库备份的设备类型有()、()和( )。 二、简答题 1 SQL Sever 2012提供的3种不同数据恢复模式。 2简述数据库备份的作用。 3简述SQL Server的安全机制。 第4章SQL Server Management Studio管理数据库 管理数据库就是对数据库进行设计、定义以及维护的过程。数据库的效率和性能在很大程度上取决于数据库的设计和优化。本章将对Microsoft SQL Server 2012系统的常用对象:数据库、数据表和索引,进行全面的分析和介绍。 41数据库的建立与维护 411创建数据库 图41“连接到服务器”对话框 每个SQL Server 2012数据库都由以下数据库对象组成:关系图、表、视图、存储过程、用户、角色、规则、默认、用户自定义数据类型和用户自定义函数。 创建数据库就是确定数据库名称、文件名称、数据文件大小、数据库的字符集、是否自动增长以及如何自动增长等信息的过程。在一个Microsoft SQL Server实例中,最多可以创建32 767个数据库。数据库的名称必须满足系统的标识符规则。在命名数据库时,要使数据库名称简短且有一定的含义。 在SQL Server 2012中创建数据库,最简单的方法是使用SQL Server Management Studio工具。在该工具中,用户可以对数据库的大部分特性进行设置,用户根据提示创建数据库,具体操作步骤如下所述。 (1) 启动SQL Server Manageme nt Studio工具,出现“连接到服务器”对话框,如图41所示。 (2) 在“连接到服务器”对话框中,单击“连接”,SQL Server Management Studio主窗口 图42“对象资源管理器”窗口 也随之打开,本节的操作是在名为ALVINLEEPC的服务器默认安装实例上进行的,读者应根据自己的练习环境和实例来做相应的替换。 (3) 在如图42所示的“对象资源管理器”窗口中,右击“数据库”,在弹出的快捷菜单中选择“新建数据库”命令,系统会打开“新建数据库”窗口,如图43所示。 0 0 (4) 单击“新建数据库”对话框中的“常规”选项卡,如图43所示。在“数据库名称”文本框中,输入数据库的名称,系统会自动为数据库设定“逻辑名称”等信息。本例中数据库名称设为“test”,系统会自动为该数据库建立两个数据库文件“testmdf”和“testlog”,默认存储在安装目录下。在“选项”选项卡中,可以充分配置数据库,具体内容详见412节。 图43“新建数据库”窗口 (5) 单击“确定”按钮,创建数据库完成。在“对象资源管理器”中,打开“数据库”目录,可以看到新建的“test”数据库,如图44所示。 图44新建的“test”数据库 412配置数据库 在如图43所示的“新建数据库”对话框中,可以充分配置数据库。 (1) 在“常规”页面中,“所有者”可以是具有创建数据库权限的登录名。 (2) “数据库文件”默认mdf为扩展名存储在硬盘上,例如,testmdf。mdf代表master data file,是主数据文件(primary data file)的名字。所有的数据库都必须有一个主数据文件,该文件不仅用来为数据库保存数据,也存储了构成数据库的所有其他文件的位置,还存储了数据库目录的启动信息。 (3) “文件类型”列显示文件是数据文件还是日志文件,数据文件是用来存放数据,而日志文件用来存放对数据所做操作的记录。 (4) “初始大小(MB)”列,如果数据库全空,则数据库的初始大小就是其大小。但数据库的空间一开始就会被系统表占用一些,因此数据库是不会彻底为空的。预估出需要用到的大小,可多给一些空间,以避免产生碎片。 (5) “自动增长”列,该选项显示SQL Server是否能在数据库达到其初始大小极限时自动应付。 在如图45所示的“选项”页面中,可以设置数据库的排序规则,恢复模式兼容级别及其他选项的设置。 图45“选项”页面 在如图46所示的“文件组”页面中,可设置或添加数据库文件和文件组的属性,如只读、默认值等。 图46“文件组”页面 413更改数据库 应用SQL Server Management Studio,修改已建立数据库的某些设置以及创建时无法设置的属性,具体操作步骤如下所述。 (1) 右击所要修改的数据库,例如,test,从弹出的快捷菜单中选择“属性”选项,出现如图47所示的“数据库属性test”设置窗口,比创建数据库时多了两个选择页,即“选项”和“权限”页框。 (2) 在“常规”页面中,可以看到数据库的状态,所有者、创建日期、大小、可用空间、用户数、备份和维护等信息,如图47所示。 图47“数据库属性”—“常规”页面 (3) 在“文件”页面中,与创建数据库时相同,可以重新指定数据库文件和事务文件的名称、存储位置、初始容量大小等属性。 (4) 在“文件组”页面中,与创建数据库时相同,可以添加或删除文件组。但是,如果文件组中有文件则不能删除,必须先将文件移除后,才能删除文件组。 (5) 在“选项”页面中,可以为数据库设置若干个决定数据库特点的数据库级选项,如图48所示,包括自动创建统计信息、自动更新统计信息、自动异步更新统计信息、自动关闭和自动收缩等功能。 图48“数据库属性”—“选项”页面 414删除数据库 应用SQL Server Management Studio,删除已建立的数据库,具体操作步骤如下所述。 (1) 在“对象资源管理器”窗口中展开“数据库”文件夹,找到要删除的数据库。 (2) 右击要删除的数据库,选择“删除”选项,在弹出的“删除对象”对话框中单击“确定”按钮,删除该数据库,如图49所示。删除后系统无法轻易恢复被删除的数据库。 图49“删除对象”窗口 42数据表的建立与维护 表是关系模型中表示实体的方式,是具有行列结构的数据库对象。表是数据库中最基本、最重要和最核心的对象,是组织数据的方式,是实际存储数据的地方。其他许多数据库对象,例如,索引、视图等,都依附于表对象存在。管理数据库实际上就是管理数据库中的表,表结构的设计质量直接影响到数据库中数据的使用效率。 421列的数据类型 在SQL Server 2012中,指定列的数据类型相当于定义了该列的4个特性:①对象所含的数据类型,如字符、整数或二进制数;②所存储值的长度或它的大小;③数据精度(仅用于数字数据类型);④小数位数(仅用于数字数据类型)。 SQL Server提供系统数据类型集,定义了可与SQL Server一起使用的所有数据类型;每个表可以定义至多250个字段,除文本和图像数据类型外,每个记录的最大长度限制为1 962个字节。下面介绍常用的几类数据类型。 1精确数字类型 精确数字类型包括:整数类型、Bit(位类型)、Decimal和Numeric(数值类型)、Money和SmallMoney(货币类型)。 1) 整数类型 整数类型是最常用的数据类型之一,它主要用来存储数值,可以直接进行数据运算,而不必使用函数转换。整数类型包括以下4类,如表41所示。 表41整 数 类 型 整数类型 存储整数范围 存储字节 Bigint -263~263-1(9 223 372 036 854 775 807) 8个 Int(Integer) -231~231-1 4个 Smallint -215~215-1 2个 Tinyint 0~255 1个 2) 位数据类型 Bit称为位数据类型,其数据有两种取值:0和1,长度为1字节,如表42所示。当输入0以外的其他值时,系统均视为1。这种数据类型常作为逻辑变量使用,用来表示真、假或是、否二值数据。 表42位数据类型 位数据类型 取值范围 存储字节 Bigint 0、1 1个 3) 十进制数据类型 十进制数据类型包括:Decimal数据类型和Numeric数据类型。这两种数据类型功能完全相同,定义格式是Decimal[(p[,s])]或Numeric[(p[,s])],其中p表示精度(即最多可以存储的十进制数的位数),默认值为18;s 表示小数点后的位数,默认值为0。例如,Decimal(10,5),表示共有10位数,其中整数5位,小数5位。该数据类型可存储-1038+1~1038-1的固定精度和小数位的数据,如表43所示。 表43十进制数据类型 十进制类型 取值范围 Decimal -1038+1~1038-1,最大位数为38位 Numeric -1038+1~1038-1,最大位数为38位 4) 货币数据类型 货币数据类型用于存储货币值,包括:Money和SmallMoney两种,如表44所示。当输入Money或SmallMoney类型数据时,必须加一个货币单位符号作前缀。 表44货币数据类型 货币类型 存储货币值范围 存储字节 Money922 337 203 685 477580 8~922 337 203 685 477580 7。精确到货币单位的万分之十,固定有4位小数 8个 SmallMoney 214 748364 8~214 748364 7 4个 2 近似数字类型 近似数字类型,包括Real和Float两大类,如表45所示。Real可以存储正的或者负的十进制数值,最大可以精确到7位小数。Float可以精确到第15位小数,如果不指定Float数据类型的长度,它占用8个字节的存储空间。Float数据类型也可以写为Float(n)的形式,n指定Float数据的精度,n为1~15的整数值。当n取1~7时,实际上是定义了一个Real 类型的数据,占用4个字节存储空间;当n取8~15时,实际是定义了一个Float类型,占用8个字节存储空间。 表45近似数字类型 近似数字类型 存储范围 存储字节 Real-340×10-38~340×1038 4个 Float-179×10-308~179×10308 4个或8个 3日期和时间类型 日期和时间类型,包括Datetime和Smalldatetime,如表46所示。Datetime前4个字存储基于1900年1月1日之前或者之后日期数,数值分正负,负数存储的数值代表在基数日期之前的日期,正数表示基数日期之后的日期,时间以子夜后的毫秒存储在后面的4个字节中。Smalldatetime前2个字节存储日期1900年1月1日以后的天数,时间以子夜后的分钟数形式存储在后面2个字节中。 表46日期和时间类型 日期和时间类型 存储范围 存储字节 Datetime公元1753年1月1日零时起—公元9999年12月31日23时59分59秒的所有日期和时间,其精确度可达三百分之一秒,即333毫秒。默认的格式是MM DD YYYY hh:mm AM/PM8个字节 Smalldatetime1900年1月1日—2079年6月6日内的日期,精度为1分钟4个字节 4字符数据类型 字符数据类型也是SQL Server中最常用的数据类型之一,它可以用来存储各种字母、数字符号和特殊符号。在使用字符数据类型时,需要在其前后加上英文单引号或者双引号,如表47所示。 表47字符数据类型 日期和时间类型 存储范围 存储字节 char最大长度为8 000个字符定长单字节字符 varchar 最大长度为8 000个字符 变长单字节字符 text 最大长度为231-1(2 147 483 647)个字符 变长单字节字符 (1) char: 其定义形式为char(n),当用char 数据类型存储数据时,每个字符和符号占用一个字节的存储空间。n表示所有字符所占的存储空间,n的取值为1~8 000。若不指定n值,系统默认n的值为1。若输入数据的字符串长度小于n,则系统自动在其后添加空格来填满设定好的空间;若输入的数据过长,将会截掉其超出部分。如果定义了一个char数据类型,而且允许该列为空,则该字段被当作varchar来处理。 (2) varchar: 其定义形式为varchar(n)。用char数据类型可以存储长达255个字符的可变长度字符串,和char类型不同的是varchar类型的存储空间是根据存储在表的每一列值的字符数变化的。例如,定义varchar(20),则对应的字段最多可以存储20个字符,但是在每一列的长度达到20字节之前,系统不会在其后添加空格来填满设定好的空间,因此使用varchar类型可以节省空间。 (3) text:用于存储文本数据,其容量理论上为231-1(2 147 483 647)个字节,但实际应用时要根据硬盘的存储空间而定。 5 Unicode字符数据类型 Unicode字符数据采用双字节字符编码标准,每个字符和符号占用两个字节的存储空间。Unicode字符数据类型,包括nchar、nvarchar和ntext三种,如表48所示。 表48Unicode字符数据类型 字符数据类型 存储范围 存储字节 nchar最大长度为4 000个字符定长双字节字符 nvarchar 最大长度为4 000个字符 变长双字节字符 ntext 最大长度为230-1个字符 变长双字节字符 (1) nchar: 其定义形式为nchar(n)。与char数据类型类似,不同的是nchar数据类型n的取值范围为1~4 000。nchar 数据类型采用Unicode标准字符集,Unicode标准用两个字节为一个存储单位,其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都包括在内,在一个数据列中就可以同时出现中文、英文、法文等,而不会出现编码冲突。 (2) nvarchar: 其定义形式nchar(n)。与varchar数据类型相似,nvarchar 数据类型也采用Unicode标准字符集,n的取值范围为1~4 000。 (3) ntext:与text数据类型类似,存储在其中的数据通常是直接能输出到显示设备上的字符,显示设备可以是显示器、窗口或者打印机。ntext 数据类型采用Unicode标准字符集,因此其理论上的容量为230-1个字节。 6二进制字符数据类型 二进制数据类型,包括Binary、Varbinary和Image三种,如表49所示。 表49二进制字符数据类型 二进制数据类型 存储范围 存储字节 Binary最大长度为8 000个字符定长二进制数据 Varbinary 最大长度为8 000个字符 变长二进制数据 Image 最大长度为231-1个字符 变长二进制数据 (1) Binary: 其定义形式为Binary(n),数据的存储长度是固定的,即n+4个字节,当输入的二进制数据长度小于n时,余下部分填充0。二进制数据类型的最大长度(即n的最大值)为8 000,常用于存储图像等数据。 (2) Varbinary: 其定义形式为Varbinary(n),数据的存储长度是变化的,实际为所输入数据的长度加4个字节。其他含义同Binary。 (3) Image: 用于存储照片、目录图片或者图画,其理论容量为231-1个字节。其存储数据的模式与text数据类型相同,通常存储在Image字段中的数据不能直接用insert语句直接输入。 7其他数据类型 (1) sqlvariant:用于存储除文本、图形数据和timestamp类型数据外的其他任何合法的SQL Server数据。此数据类型极大地方便了SQL Server的开发工作。 (2) table: 用于存储对表或者视图处理后的结果集。这种新的数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。 (3) timestamp: 亦称时间戳数据类型,它提供数据库范围内的唯一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器。当它所定义的列在更新或者插入数据行时,此列的值会被自动更新,一个计数值将自动地添加到此timestamp数据列中。如果建立一个名为“timestamp”的列,则该列的类型将自动设为timestamp数据类型。 (4) uniqueidentifier: 用于存储一个16字节长的二进制数据类型,它是SQL Server根据计算机网络适配器地址和CPU时钟产生的全局唯一标识符代码(globally unique identifier,GUID)。此数字可以通过调用SQL Server的newid()函数获得,在全球各地的计算机经由此函数产生的数字不会相同。 (5) XML: 可以存储XML 数据的数据类型。利用它可以将XML实例存储在字段中或者XML 类型的变量中。注意存储类型为XML的数据长度不能超过2GB。 (6) cursor: 这是变量或存储过程OUTPUT 参数的一种数据类型,这些参数包含对游标的引用。使用cursor数据类型创建的变量可以为空。注意:对于Createtable语句中的列,不能使用cursor数据类型。 422创建表 应用SQL Server Management Studio创建表,具体操作步骤如下所述。 (1) 在“对象资源管理器”列表中展开要建表的数据库,如test。 (2) 右击“表”选项,在弹出的快捷菜单中选择“新建表”命令,则出现“表设计器”窗口,如图410所示。 图410“表设计器”窗口 (3) 在“表设计器”窗口中定义表结构,即逐个定义好表中的列(字段),包括名称(列名)、数据类型、长度等,如图411所示。 图411表设计器窗口—输入字段 (4) 单击工具栏上的“保存”图标,保存新建的数据表,如图412所示。 图412表设计器窗口—保存表 (5) 在“选择名称”对话框中,输入数据表的名称,单击“确定”按钮,如图413所示。