精华内容
下载资源
问答
  • 原子重组算法,有点穷尽的意思,计算机只会简单的重复。制造的分子是否合格。
  • 原子重组成分子的算法,原子重组成分子的算法原子重组成分子的算法
  • 重组优化卷2016高考化学复习考点14原子结构化学键练习
  • 《数据库原理》— 数据库系统概论第五版习题解析

    万次阅读 多人点赞 2017-05-29 14:57:48
    数据库系统概论前七章习题解析 第1章绪论 1.试述数据、数据库、数据库系统、数据库管理系统的概念。答: (l)数据(Data):描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。...

    数据库系统概论前七章习题解析

    第1章 绪论

    1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答:  

    ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表示这些对象的数据也越来越复杂。数据与其语义是不可分的。 500 这个数字可以表示一件物品的价格是 500 元,也可以表示一个学术会议参加的人数有 500 人,还可以表示一袋奶粉重 500 克。  ( 2 )数据库( DataBase ,简称 DB ) :数据库是长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。 

    ( 3 )数据库系统( DataBas 。 Sytem ,简称 DBS ) :数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。解析数据库系统和数据库是两个概念。数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。  

    ( 4 )数据库管理系统( DataBase Management sytem ,简称 DBMs ) :数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据。 DBMS 的主要功能包括数据定义功能、数据操纵功能、数据库的运行管理功能、数据库的建立和维护功能。解析 DBMS 是一个大型的复杂的软件系统,是计算机中的基础软件。目前,专门研制 DBMS 的厂商及其研制的 DBMS 产品很多。著名的有美国 IBM 公司的 DBZ 关系数据库管理系统和 IMS 层次数据库管理系统、美国 Oracle 公司的 orade 关系数据库管理系统、 s 油 ase 公司的 s 油 ase 关系数据库管理系统、美国微软公司的 SQL Serve ,关系数据库管理系统等。   

    2 .使用数据库系统有什么好处? 答: 

    使用数据库系统的好处是由数据库管理系统的特点或优点决定的。使用数据库系统的好处很多,例如,可以大大提高应用开发的效率,方便用户的使用,减轻数据库系统管理人员维护的负担,等等。使用数据库系统可以大大提高应用开发的效率。因为在数据库系统中应用程序不必考虑数据的定义、存储和数据存取的具体路径,这些工作都由 DBMS 来完成。用一个通俗的比喻,使用了 DBMS 就如有了一个好参谋、好助手,许多具体的技术工作都由这个助手来完成。开发人员就可以专注于应用逻辑的设计,而不必为数据管理的许许多多复杂的细节操心。还有,当应用逻辑改变,数据的逻辑结构也需要改变时,由于数据库系统提供了数据与程序之间的独立性,数据逻辑结构的改变是 DBA 的责任,开发人员不必修改应用程序,或者只需要修改很少的应用程序,从而既简化了应用程序的编制,又大大减少了应用程序的维护和修改。使用数据库系统可以减轻数据库系统管理人员维护系统的负担。因为 DBMS 在数据库建立、运用和维护时对数据库进行统一的管理和控制,包括数据的完整性、安全性、多用户并发控制、故障恢复等,都由 DBMS 执行。总之,使用数据库系统的优点是很多的,既便于数据的集中管理,控制数据冗余,提高数据的利用率和一致性,又有利于应用程序的开发和维护。读者可以在自己今后的工作中结合具体应用,认真加以体会和总结。  

     3 .试述文件系统与数据库系统的区别和联系。 答: 

    文件系统与数据库系统的区别是:文件系统面向某一应用程序,共享性差,冗余度大,数据独立性差,记录内有结构,整体无结构,由应用程序自己控制。数据库系统面向现实世界,共享性高,冗余度小,具有较高的物理独立性和一定的逻辑独立性,整体结构化,用数据模型描述,由数据库管理系统提供数据的安全性、完整性、并发控制和恢复能力。 

    文件系统与数据库系统的联系是:文件系统与数据库系统都是计算机系统中管理数据的软件。解析文件系统是操作系统的重要组成部分;而 DBMS 是独立于操作系统的软件。但是 DBMS 是在操作系统的基础上实现的;数据库中数据的组织和存储是通过操作系统中的文件系统来实现的。  

    4 .举出适合用文件系统而不是数据库系统的例子;再举出适合用数据库系统的应用例子。答 : ( l )适用于文件系统而不是数据库系统的应用例子数据的备份、软件或应用程序使用过程中的临时数据存储一般使用文件比较合适。早期功能比较简单、比较固定的应用系统也适合用文件系统。 

     ( 2 )适用于数据库系统而非文件系统的应用例子目前,几乎所有企业或部门的信息系统都以数据库系统为基础,都使用数据库。例如,一个工厂的管理信息系统(其中会包括许多子系统,如库存管理系统、物资采购系统、作业调度系统、设备管理系统、人事管理系统等),学校的学生管理系统,人事管理系统,图书馆的图书管理系统,等等,都适合用数据库系统。希望读者能举出自己了解的应用例子。  

    5 .试述数据库系统的特点。 答: 

    数据库系统的主要特点有: 

     ( l )数据结构化数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。解析注意这里的“整体’夕两个字。在数据库系统中,数据不再针对某一个应用,而是面向全组织,具有整体的结构化。不仅数据是结构化的,而且数据的存取单位即一次可以存取数据的大小也很灵活,可以小到某一个数据项(如一个学生的姓名),大到一组记录(成千上万个学生记录)。而在文件系统中,数据的存取单位只有一个:记录,如一个学生的完整记录。 

     ( 2 )数据的共享性高,冗余度低,易扩充数据库的数据不再面向某个应用而是面向整个系统,因此可以被多个用户、多个应用以多种不同的语言共享使用。由于数据面向整个系统,是有结构的数据,不仅可以被多个应用共享使用,而且容易增加新的应用,这就使得数据库系统弹性大,易于扩充。解析数据共享可以大大减少数据冗余,节约存储空间,同时还能够避免数据之间的不相容性与不一致性。所谓“数据面向某个应用”是指数据结构是针对某个应用设计的,只被这个应用程序或应用系统使用,可以说数据是某个应用的“私有资源”。所谓“弹性大”是指系统容易扩充也容易收缩,即应用增加或减少时不必修改整个数据库的结构,只需做很少的改动。可以取整体数据的各种子集用于不同的应用系统,当应用需求改变或增加时,只要重新选取不同的子集或加上一部分数据,便可以满足新的需求。 

     ( 3 )数据独立性高数据独立性包括数据的物理独立性和数据的逻辑独立性。数据库管理系统的模式结构和二级映像功能保证了数据库中的数据具有很高的物理独立性和逻辑独立性。 

    ( 4 )数据由 DBMS 统一管理和控制数据库的共享是并发的共享,即多个用户可以同时存取数据库中的数据甚至可以同时存取数据库中同一个数据。为此, DBMS 必须提供统一的数据控制功能,包括数据的安全性保护、数据的完整性检查、并发控制和数据库恢复。解析 DBMS 数据控制功能包括四个方面:数据的安全性保护:保护数据以防止不合法的使用造成的数据的泄密和破坏;数据的完整性检查:将数据控制在有效的范围内,或保证数据之间满足一定的关系;并发控制:对多用户的并发操作加以控制和协调,保证并发操作的正确性;数据库恢复:当计算机系统发生硬件故障、软件故障,或者由于操作员的失误以及故意的破坏影响数据库中数据的正确性,甚至造成数据库部分或全部数据的丢失时,能将数据库从错误状态恢复到某一已知的正确状态(亦称为完整状态或一致状态)。下面可以得到“什么是数据库”的一个定义:数据库是长期存储在计算机内有组织的大量的共享的数据集合,它可以供各种用户共享,具有最小冗余度和较高的数据独立性。 DBMS 在数据库建立、运用和维护时对数据库进行统一控制,以保证数据的完整性、安全性,并在多用户同时使用数据库时进行并发控制,在发生故障后对系统进行恢复。数据库系统的出现使信息系统从以加工数据的程序为中心转向围绕共享的数据库为中心的新阶段。

    6 .数据库管理系统的主要功能有哪些? 答: 

    ( l )数据库定义功能;  ( 2 )数据存取功能;  ( 3 )数据库运行管理;  ( 4 )数据库的建立和维护功能。 

    7 .什么是概念模型?试述概念模型的作用。 

    答:概念模型,也称信息模型,是按用户的观点来对数据和信息建模,主要用于数据库设计。 

    概念模型实际上是现实世界到机器世界的一个中间层次。概念模型用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言。 

    8.定义并解释概念模型中以下术语:实体,实体型,实体集,实体之间的联系。 答: 

    实体:客观存在并可以相互区分的事物叫实体。实体型:具有相同属性的实体具有相同的特征和性质,用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。实体集:同型实体的集合称为实体集;实体之间的联系:通常是指不同实体型的实体集之间的联系,实体之间的联系有一对一,一对多和多对多等多种类型。   

    9 .试述数据模型的概念、数据模型的作用和数据模型的三个要素。 答: 

    数据模型是数据库中用来对现实世界进行抽象的工具,是数据库中用于提供信息表示和操作手段的形式构架。一般地讲,数据模型是严格定义的概念的集合。这些概念精确描述了系统的静态特性、动态特性和完整性约束条件。因此数据模型通常由数据结构、数据操作和完整性约束三部分组成。  ( l )数据结构:是所研究的对象类型的集合,是对系统静态特性的描述。 

     ( 2 )数据操作:是指对数据库中各种对象(型)的实例(值)允许进行的操作的集合,包括操作及有关的操作规则,是对系统动态特性的描述。 

     ( 3 )数据的约束条件:是一组完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。解析数据模型是数据库系统中最重要的概念之一。必须通过 《 概论 》 的学习真正掌握数据模型的概念和作用。数据模型是数据库系统的基础。任何一个 DBMS 都以某一个数据模型为基础,或者说支持某一个数据模型。数据库系统中,模型有不同的层次。根据模型应用的不同目的,可以将模型分成两类或者说两个层次:一类是概念模型,是按用户的观点来对数据和信息建模,用于信息世界的建模,强调语义表达能力,概念简单清晰;另一类是数据模型,是按计算机系统的观点对数据建模,用于机器世界,人们可以用它定义、操纵数据库中的数据,一般需要有严格的形式化定义和一组严格定义了语法和语义的语言,并有一些规定和限制,便于在机器上实现。 

    12 .试述网状、层次数据库的优缺点。 答: 

    层次模型的优点主要有: ( l )模型简单,对具有一对多层次关系的部门描述非常自然、直观,容易理解,这是层次数据库的突出优点; ( 2 )用层次模型的应用系统性能好,特别是对于那些实体间联系是固定的且预先定义好的应用,采用层次模型来实现,其性能优于关系模型; ( 3 )层次数据模型提供了良好的完整性支持。 

    层次模型的缺点主要有: ( l )现实世界中很多联系是非层次性的,如多对多联系、一个结点具有多个双亲等,层次模型不能自然地表示这类联系,只能通过引入冗余数据或引入虚拟结点来解决; ( 2 )对插入和删除操作的限制比较多; ( 3 )查询子女结点必须通过双亲结点。 

    网状数据模型的优点主要有: ( l )能够更为直接地描述现实世界,如一个结点可以有多个双亲; ( 2 )具有良好的性能,存取效率较高。 

    网状数据模型的缺点主要有: ( l )结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握; ( 2 )其 DDL 、 DML 语言复杂,用户不容易使用。由于记录之间联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径。因此,用户必须了解系统结构的细节,加重了编写应用程序的负担。 

    13.试述关系模型的概念,定义并解释以下术语: ( l )关系( 2 )属性( 3 )域( 4 )元组 ( 5 )主码( 6 )分量( 7 )关系模式 答: 

    关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。 ( l )关系:一个关系对应通常说的一张表; ( 2 )属性:表中的一列即为一个属性; ( 3 )域:属性的取值范围; ( 4 )元组:表中的一行即为一个元组; ( 5 )主码:表中的某个属性组,它可以惟一确定一个元组; ( 6 )分量:元组中的一个属性值; ( 7 )关系模式:对关系的描述,一般表示为关系名(属性 1 ,属性 2 , „ ,属性 n )  14 .试述关系数据库的特点。 答: 

    关系数据模型具有下列优点: ( l )关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的。 ( 2 )关系模型的概念单一,无论实体还是实体之间的联系都用关系表示,操作的对象和操作的结果都是关系,所以其数据结构简单、清晰,用户易懂易用。 ( 3 )关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。当然,关系数据模型也有缺点,其中最主要的缺点是,由于存取路径对用户透明,查询效率往往不如非关系数据模型。因此为了提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的难度。

    15.试述数据库系统三级模式结构,这种结构的优点是什么? 答: 

    数据库系统的三级模式结构由外模式、模式和内模式组成。(参见书上图 1 . 29 ) 外模式,亦称子模式或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。模式,亦称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式涉及的是数据的局部逻辑结构,通常是模式的子集。内模式,亦称存储模式,是数据在数据库系统内部的表示,即对数据的物理结构和存储方式的描述。数据库系统的三级模式是对数据的三个抽象级别,它把数据的具体组织留给 DBMs 管理,使用户能逻辑抽象地处理数据,而不必关心数据在计算机中的表示和存储。为了能够在内部实现这三个抽象层次的联系和转换,数据库系统在这三级模式之间提供了两层映像:外模式/模式映像和模式/内模式映像。正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。 

    16 .定义并解释以下术语:模式、外模式、内模式、 DDL 、 DML 。 

    模式、外模式、内模式,亦称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式涉及的是数据的局部逻辑结构,通常是模式的子集。内模式,亦称存储模式,是数据在数据库系统内部的表示,即对数据的物理结构和存储方式的描述。 DDL :数据定义语言,用来定义数据库模式、外模式、内模式的语言。 DML :数据操纵语言,用来对数据库中的数据进行查询、插入、删除和修改的语句。  

    17.什么叫数据与程序的物理独立性?什么叫数据与程序的逻辑独立性?为什么数据库系统具有数据与程序的独立性? 答: 

    数据与程序的逻辑独立性:当模式改变时(例如增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式的映像做相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。数据与程序的物理独立性:当数据库的存储结构改变了,由数据库管理员对模式/内模式映像做相应改变,可以使模式保持不变,从而应用程序也不必改变,保证了数据与程序的物理独立性,简称数据的物理独立性。数据库管理系统在三级模式之间提供的两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。  

    18 .试述数据库系统的组成。 答: 

    数据库系统一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。 19 .数据库管理员、系统分析员、数据库设计人员、应用程序员的职责是什么? 答: 

    数据库管理员的职责:(1)决定数据库中的信息内容和结构; (2)决定数据库的存储结构和存取策略; (3)定义数据的安全性要求和完整性约束条件; (4)监控数据库的使用和运行; (5)数据库的改进和重组、重构。 

    系统分析员负责应用系统的需求分析和规范说明,系统分析员要和用户及 DBA 相结合,确定系统的硬件、软件配置,并参与数据库系统的概要设计。数据库设计人员负责数据库中数据的确定、数据库各级模式的设计。数据库设计人员必须参加用户需求调查和系统分析,然后进行数据库设计。在很多情况下,数据库设计人员就由数据库管理员担任。应用程序员负责设计和编写应用系统的程序模块,并进行调试和安装。

     

    第二章 关系数据库

    1、试述关系模型的三个组成部分。
    答:关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。

    2、试述关系数据语言的特点和分类。

    答:关系数据语言可以分为三类:

    关系代数语言。

    关系演算语言:元组关系演算语言和域关系演算语言。

    SQL:具有关系代数和关系演算双重特点的语言。

    这些关系数据语言的共同特点是,语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入高级语言中使用。

    5 . 述关系模型的完整性规则。在参照完整性中,为什么外部码属性的值也可以为空?什么情况下才可以为空?

    答:实体完整性规则是指若属性A是基本关系R的主属性,则属性A不能取空值。

    若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。即属性F本身不是主属性,则可以取空值,否则不能取空值。

    6.设有一个SPJ数据库,包括S,P,J,SPJ四个关系模式:

    1)求供应工程J1零件的供应商号码SNO:

    πSno(σJno=‘J1’(SPJ))

    2)求供应工程J1零件P1的供应商号码SNO:

    πSno(σJno=‘J1’∧Pno=‘P1‘(SPJ))

    3)求供应工程J1零件为红色的供应商号码SNO:

    πSno(πSno,,Pno(σJno=‘J1‘ (SPJ))∞πPno(σCOLOR=’红‘ (P)))

    4)求没有使用天津供应商生产的红色零件的工程号JNO:

    πJno(SPJ)- πJNO(σcity=‘天津’∧Color=‘红‘ (S∞SPJ∞P)

    5)求至少用了供应商S1所供应的全部零件的工程号JNO:

    πJno,Pno(SPJ)÷ πPno(σSno=‘S1‘ (SPJ))

    7. 试述等值连接与自然连接的区别和联系。

    答:连接运算符是“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A,B属性值相等的那些元组

    自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。

    8.关系代数的基本运算有哪些 ? 如何用这些基本运算来表示其他运算? 

    答:并、差、笛卡尔积、投影和选择5种运算为基本的运算。其他3种运算,即交、连接和除,均可以用这5种基本运算来表达。

    第三章 关系数据库语言SQL

    1 .试述 sQL 语言的特点。

    答:(l)综合统一。 sQL 语言集数据定义语言 DDL 、数据操纵语言 DML 、数据控制语言 DCL 的功能于一体。

    (2)高度非过程化。用 sQL 语言进行数据操作,只要提出“做什么”,而无需指明“怎么做”,因此无需了解存取路径,存取路径的选择以及 sQL 语句的操作过程由系统自动完成。

    (3)面向集合的操作方式。 sQL 语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。

    (4)以同一种语法结构提供两种使用方式。 sQL 语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互的使用方式;作为嵌入式语言,它能够嵌入到高级语言程序中,供程序员设计程序时使用。

    (5)语言简捷,易学易用。

    3 (1) select * from S where A='10';

     (2) select  A,B  from S;

     (3) select A,B,S.C,S.D,E,F from S ,T  where S.C=T.C and S.D=T.D;

     (4) select * from S ,T  where S.C=T.C;

     (5) select * from S ,T  where S.A<T.E;

     (6) select S.C,S.D,T.* from S ,T ;

    4.用 sQL 语句建立第二章习题 6中的 4 个表。

    答:

    对于 S 表: S ( SNO , SNAME , STATUS , CITY ) ;

    建 S 表:

        CREATE TABLE S ( Sno C(2) UNIQUE,Sname C(6) ,Status  C(2),City C(4));

    对于 P 表: P ( PNO , PNAME , COLOR , WEIGHT );

    建 P 表 :

    CREATE TABLE P(Pno  C(2)  UNIQUE,Pname  C(6),COLOR  C(2),  WEIGHT INT);

    对于 J 表: J ( JNO , JNAME , CITY) ;

    建 J 表:

    CREATE  TABLE  J(Jno  C(2) UNlQUE,JNAME  C(8), CITY C(4))

    对于 sPJ 表: sPJ ( sNo , PNo , JNo , QTY) ;

    建 SPJ 表:SPJ(SNO,PNO,JNO,QTY)

    CREATE TABLE SPJ(Sno  C(2),Pno  C(2),JNO  C(2),  QTY  INT))

    针对建立的 4 个表用 sQL 语言完成第二章习题6中的查询。

     ( l )求供应工程 Jl 零件的供应商号码 SNO ;

    SELECT DIST SNO FROM SPJ WHERE  JNO=’J1’

     ( 2 )求供应工程 Jl 零件 Pl 的供应商号码 SNO ;

    SELECT  DIST SNO FROM SPJ WHERE JNO='J1' AND PNO='P1'

    ( 3 )求供应工程 Jl 零件为红色的供应商号码 SNO ;

    SELECT SNO FROM SPJ,P WHERE JNO='J1' AND SPJ.PNO=P.PNO AND COLOR='红'

    ( 4 )求没有使用天津供应商生产的红色零件的工程号 JNO ;

    SELECT  DIST  JNO FROM SPJ  WHERE JNO NOT IN (SELE JNO FROM SPJ,P,S WHERE S.CITY='天津' AND COLOR='红' AND S.SNO=SPJ.SNO  AND P.PNO=SPJ.PNO)。

    ( 5 )求至少用了供应商 Sl 所供应的全部零件的工程号 JNO ;

    由于VFP不允许子查询嵌套太深,将查询分为两步

    A、查询S1供应商供应的零件号

    SELECT DIST PNO FROM SPJ WHERE SNO='S1'结果是(P1,P2)

    B、查询哪一个工程既使用P1零件又使用P2零件。

    SELECT JNO FROM SPJ WHERE PNO='P1'

    AND JNO IN (SELECT JNO FROM SPJ WHERE PNO='P2')

    5.针对上题中的四个表试用SQL语言完成以下各项操作:

    (1)找出所有供应商的姓名和所在城市。

           SELECT SNAME,CITY FROM S

    (2)找出所有零件的名称、颜色、重量。

    SELECT PNAME,COLOR,WEIGHT FROM P

    (3)找出使用供应商S1所供应零件的工程号码。

            SELECT  DIST JNO FROM SPJ WHERE SNO='S1'

    (4)找出工程项目J2使用的各种零件的名称及其数量。

    SELECT PNAME,QTY FROM SPJ,P

    WHERE P.PNO=SPJ.PNO AND SPJ.JNO='J2'

    (5)找出上海厂商供应的所有零件号码。

    SELECT PNO FROM SPJ,S WHERE S.SNO=SPJ.SNO AND CITY='上海'

    (6)出使用上海产的零件的工程名称。

    SELECT JNAME FROM SPJ,S,J

    WHERE S.SNO=SPJ.SNO AND S.CITY='上海' AND J.JNO=SPJ.JNO

    (7)找出没有使用天津产的零件的工程号码。

    注意: SELECT DISP JNO FROM SPJ  WHERE JNO NOT IN (SELECT DIST JNO FROM SPJ,S WHERE S.SNO=SPJ.SNO AND S.CITY='天津') 适用于JNO是唯一或不唯一的情况.

        注意: SELECT DIST JNO FROM SPJ,S WHERE S.SNO=SPJ.SNO AND S.CITY<>'天津'适用于JNO是唯一的情况

    (8)把全部红色零件的颜色改成蓝色。

    UPDATE P SET COLOR='蓝'  WHERE COLOR='红'

    (9)由S5供给J4的零件P6改为由S3供应。

        UPDATE  SPJ  SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6'

    (10)从供应商关系中删除供应商号是S2的记录,并从供应情况关系中删除相应的记录。

        A、DELETE  FROM  S  WHERE  SNO=’S2’

        B、DELETE  FROM  SPJ  WHERE  SNO=‘S2’

    (11)请将(S2,J6,P4,200)插入供应情况关系。

         INSERT  INTO  SPJ  VALUES(‘S2’,‘J6’,‘P4’,200)

    6 .什么是基本表?什么是视图?两者的区别和联系是什么?

    答:基本表是本身独立存在的表,在 sQL 中一个关系就对应一个表。视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。

    7 .试述视图的优点。

    ( l )视图能够简化用户的操作; ( 2 )视图使用户能以多种角度看待同一数据; ( 3 )视图对重构数据库提供了一定程度的逻辑独立性; ( 4 )视图能够对机密数据提供安全保护。

    8 .哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。

    答:基本表的行列子集视图一般是可更新的。若视图的属性来自集合函数、表达式,则该视图肯定是不可以更新的。

    所有的视图是否都可以更新?为什么?

    答:不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的.

    9 .请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。

    CREATE VIEW VSP AS SELECT SNO,SPJ.PNO,QTY FROM SPJ,J

     WHERE SPJ.JNO=J.JNO AND J.JNAME='三建'

    针对该视图VSP完成下列查询:

    (1)找出三建工程项目使用的各种零件代码及其数量。

    SELECT  DIST  PNO,QTY  FROM  VSP

    (2)找出供应商S1的供应情况。

    SELECT  DIST * FROM VSP WHERE SNO='S1'

    第四章 数据库安全性

    1 .什么是数据库的安全性?

    答:数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。

    2 .数据库安全性和计算机系统的安全性有什么关系?
    答:安全性问题不是数据库系统所独有的,所有计算机系统都有这个问题。只是在数据库系统中大量数据集中存放,而且为许多最终用户直接共享,从而使安全性问题更为突出。
    系统安全保护措施是否有效是数据库系统的主要指标之一。
    数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的,

    4 .试述实现数据库安全性控制的常用方法和技术。

    答:实现数据库安全性控制的常用方法和技术有:
    ( l )用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。
    ( 2 )存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如CZ 级中的自主存取控制( DAC ) , Bl 级中的强制存取控制(MAC )。
    ( 3 )视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。

    ( 4 )审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
    ( 5 )数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。

    5.什么是数据库中的自主存取控制方法和强制存取控制方法? 

    答:自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。

    强制存取控制方法:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。

    6. (1) GRANT ALL PRIVILEGES ON Student,Class  

    TO U1
    WITH GRANT OPTION ;

      (2)GRANT SELECT,UPDATE(家庭住址),DELETE ON Student TO U2;

      (3)GRANT SELECT ON Class TO PUBLIC;

      (4)GRANT SELECT,UPDATE ON Student TO R1;

      (5)GRANT R1 TO U1 WITH ADMIN OPTION ;

     7 .SQL 语言中提供了哪些数据控制(自主存取控制)的语句?请试举几例说明它们的使用方法。

    答:SQL 中的自主存取控制是通过GRANT语句和REVOKE语句来实现的。如:

    GRANT SELECT , INSERT ON Student  

    TO 王平
    WITH GRANT  OPTION ;

    就将Student 表的SELECT 和INSERT 权限授予了用户王平,后面的“WITH GRANT OPTION ”子句表示用户王平同时也获得了“授权”的权限,即可以把得到的权限继续授予其他用户。
    REVOKE INSERT ON Student FROM 王平CASCADE ;
    就将Student 表的INSERT 权限从用户王平处收回,选项CASCADE 表示,如果用户王平将Student 的INSERT 权限又转授给了其他用户,那么这些权限也将从其他用户处收回。

    7.请用SQL的GRANT 和REVOKE语句(加上视图机制)完成以下授权定义或存取控制功能:

    ( a )用户王明对两个表有SELECT 权力。

    GRANT SELECT ON 职工,部门

    TO 王明

    ( b )用户李勇对两个表有INSERT 和DELETE 权力。

    GRANT INSERT,DELETE ON 职工,部门

    TO 李勇

    ( c ) 每个职工只对自己的记录有SELECT 权力。

    GRANT SELECT ON 职工

    WHEN USER()=NAME

    TO ALL;

    ( d )用户刘星对职工表有SELECT 权力,对工资字段具有更新权力。

    GRANT SELECT,UPDATE(工资) ON 职工

    TO 刘星

     ( e )用户张新具有修改这两个表的结构的权力。

    GRANT ALTER TABLE ON 职工,部门

    TO 张新;

     ( f )用户周平具有对两个表所有权力(读,插,改,删数据),并具有给其他用户授权的权力。

    GRANT ALL PRIVILIGES ON 职工,部门

    TO 周平

    WITH GRANT OPTION;

    ( g )用户杨兰具有从每个部门职工中SELECT 最高工资、最低工资、平均工资的权力,他不能查看每个人的工资。

    CREATE VIEW 部门工资 AS

    SELECT 部门.名称,MAX(工资),MIN(工资),AVG(工资)

    FROM 职工,部门

    WHERE 职工.部门号=部门.部门号

    GROUP BY 职工.部门号

    GRANT SELECT ON 部门工资

    TO 杨兰;

    8 .把习题8 中(1)---(7)的每一种情况,撤销各用户所授予的权力

    (1) REVOKE SELECT ON 职工,部门 FROM 王明;

    (2) REVOKE INSERT , DELETE ON 职工,部门 FROM 李勇;

    (3) REOVKE SELECT ON 职工
    WHEN USER ( ) =NAME
    FROM ALI ;

    (4) REVOKE SELECT , UPDATE ON 职工
    FROM 刘星;

    (5) REVOKE ALTER TABLE ON 职工,部门
    FROM 张新;

    (6) REVOKE ALL PRIVILIGES ON 职工,部门
    FROM 周平;

    (7) REVOKE SELECT ON 部门工资
    FROM 杨兰;
    DROP VIEW 部门工资;

    9.理解并解释MAC 机制中主体、客体、敏感度标记的含义。

    答:主体是系统中的活动实体,既包括DBMS 所管理的实际用户,也包括代表用户的各进程。
    客体是系统中的被动实体,是受主体操纵的,包括文件、基表、索引、视图等。对于主体和 客体,DBMS 为它们每个实例(值)指派一个敏感度标记(Label )。

    敏感度标记被分成若干级别,例如绝密(Top Secret )、机密(Secret )· 可信( Confidential )、公开(PubliC )等。主体的敏感度标记称为许可证级别(ClearanCe 玫vel ) ,客体的敏感度标记称为密级(Classification Level )。

    11 .什么是数据库的审计功能,为什么要提供审计功能?

    答:审计功能是指DBMS 的审计模块在用户对数据库执行操作的同时把所有操作自动记录到系统的审计日志中。
    因为任何系统的安全保护措施都不是完美无缺的,蓄意盗窃破坏数据的人总可能存在。利用数据库的审计功能,DBA 可以根据审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。

    第5章 数据库完整性

    1什么是数据库的完整性?

    答:数据库的完整性是指数据的正确性和相容性。

    2 .数据库的完整性概念与数据库的安全性概念有什么区别和联系?

    答:数据的完整性和安全性是两个不同的概念,但是有一定的联系。前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出( Garba : e In Garba : e out )所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。

    3 .什么是数据库的完整性约束条件?可分为哪几类?

    答:完整性约束条件是指数据库中的数据应该满足的语义约束条件。一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。静态列级约束是对一个列的取值域的说明,包括以下几个方面: ( l )对数据类型的约束,包括数据的类型、长度、单位、精度等; ( 2 )对数据格式的约束; ( 3 )对取值范围或取值集合的约束; ( 4 )对空值的约束; ( 5 )其他约束。静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。

    常见的静态关系约束有: ( l )实体完整性约束; ( 2 )参照完整性约束; ( 3 )函数依赖约束。

    动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面: ( l )修改列定义时的约束; ( 2 )修改列值时的约束。动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。

    4 . DBMS 的完整性控制机制应具有哪些功能?

    答:DBMS 的完整性控制机制应具有三个方面的功能: ( l )定义功能,即提供定义完整性约束条件的机制; ( 2 )检查功能,即检查用户发出的操作请求是否违背了完整性约束条件;( 3 )违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。

    5 . RDBMS 在实现参照完整性时需要考虑哪些方面?

    答 :RDBMs 在实现参照完整性时需要考虑以下几个方面:

    ( l )外码是否可以接受空值。

    ( 2 )册 l 除被参照关系的元组时的考虑,这时系统可能采取的作法有三种: l )级联删除( CASCADES ) ; 2 )受限删除( RESTRICTED ) ; 3 )置空值删除( NULLIFIES )。 ( 3 )在参照关系中插入元组时的问题,这时系统可能采取的作法有: l )受限插入; 2 )递归插入。

    ( 4 )修改关系中主码的问题。一般是不能用 UPDATE 语句修改关系主码的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。如果允许修改主码,首先要保证主码的惟一性和非空,否则拒绝修改。然后要区分是参照关系还是被参照关系。

    6 .假设有下面两个关系模式:职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;部门(部门号,名称,经理名,电话),其中部门号为主码。用 sQL 语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:定义每个模式的主码;定义参照完整性;定义职工年龄不得超过 60 岁。

    CREATE TABLE DEPT

        (Deptno NUMBER(2),

         Deptname VARCHAR(10),

         Manager VARCHAR(10),

         PhoneNumber Char(12)

         CONSTRAINT PK_SC RIMARY KEY(Deptno));

    CREATE TABLE EMP

        (Empno NUMBER(4),

         Ename VARCHAR(10),

         Age NUMBER(2),

         CONSTRAINT C1 CHECK ( Aage<=60),

          Job VARCHAR(9),

          Sal NUMBER(7,2),

          Deptno NUMBER(2),

          CONSTRAINT FK_DEPTNO

             FOREIGN KEY(Deptno)

             REFFERENCES DEPT(Deptno));

    7 .关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的?

    答:对于违反实体完整性和用户定义的完整性的操作一般都采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。

    第6章 关系数据库理论

    1 .理解并给出下列术语的定义:
    函数依赖、部分函数依赖、完全函数依赖、传递依赖、候选码、主码、外码、全码(All 一key )、1 NF 、ZNF 、3NF 、BcNF 、多值依赖、4NF 。

    定义1:设R(U)是属性集U上的关系模式。X,Y是属性集U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作XàY。(即只要X上的属性值相等,Y上的值一定相等。)

    术语和记号:

    XàY,但Y不是X的子集,则称XàY是非平凡的函数依赖。若不特别声明,总是讨论非平凡的函数依赖。

    XàY,但Y是X的子集,则称XàY是平凡的函数依赖。

    若XàY,则X叫做决定因素(Determinant)。

    若XàY,YàX,则记作XßàY。

    若Y不函数依赖于X,则记作X à Y。

    定义2:在R(U)中,如果 XàY,并且对于X的任何一个真子集X’,都有X’ à Y,则称Y对X完全函数依赖

           若XàY,但Y不完全函数依赖于X,则称Y对X部分函数依赖

    定义3:若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式(1NF)。

    定义4:若关系模式R∈1NF,且每一个非主属性完全函数依赖于码,则关系模式R∈2NF 。(即1NF消除了非主属性对码的部分函数依赖则成为2NF)。

    定义5:关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Z不是Y的子集)使得XàY,Y à X,Y à Z成立,则称R<U,F>∈3NF。

    定义6:关系模式R<U,F>∈1NF 。若XàY且Y不是X的子集时,X必含有码,则R<U,F>∈BCNF。

    定义7:关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖XààY(Y不是X的子集,Z=U-X-Y不为空),X都含有码,则称R<U,F>∈4NF。

    2.建立一个关于系、学生、班级、学会等诸信息的关系数据库。

    学生:学号、姓名、出生年月、系名、班号、宿舍区。

    班级:班号、专业名、系名、人数、入校年份。

    系:系名、系号、系办公地点、人数。

    学会:学会名、成立年份、办公地点、人数。

        语义如下:一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。一个系的学生住在同一宿舍区。每个学生可参加若干学会,每个学会有若干学生。学生参加某学会有一个入会年份。

    请给出关系模式,写出每个关系模式的极小函数依赖集,指出是否存在传递函数依赖,对于函数依赖左部是多属性的情况讨论函数依赖是完全函数依赖,还是部分函数依赖。指出各关系模式的候选码、外部码,有没有全码存在?

     

     

    解:(1)关系模式如下:

      学生:S(Sno,Sname,Sbirth,Dept,Class,Rno)

      班级:C(Class,Pname,Dept,Cnum,Cyear)

      系:D(Dept,Dno,Office,Dnum)

      学会:M(Mname,Myear,Maddr,Mnum)

      (2)每个关系模式的最小函数依赖集如下:

      A、学生S (Sno,Sname,Sbirth,Dept,Class,Rno) 的最小函数依赖集如下:SnoàSname,SnoàSbirth,SnoàClass,ClassàDept,DEPTàRno

        传递依赖如下:

    由于SnoàDept,而DeptàSno ,DeptàRno(宿舍区)

     

    所以Sno与Rno之间存在着传递函数依赖。

        由于ClassàDept,Dept à Class,DeptàRno

             所以Class与Rno之间存在着传递函数依赖。

        由于SnoàClass,ClassàSno,ClassàDept

             所以Sno与Dept之间存在着传递函数依赖。

      B、班级C(Class,Pname,Dept,Cnum,Cyear)的最小函数依赖集如下:

        ClassàPname,ClassàCnum,ClassàCyear,PnameàDept.

        由于ClassàPname,PnameàClass,PnameàDept

            所以C1ass与Dept之间存在着传递函数依赖。

     C、系D(Dept,Dno,Office,Dnum)的最小函数依赖集如下:

        DeptàDno,DnoàDept,DnoàOffice,DnoàDnum

        根据上述函数依赖可知,Dept与Office,Dept与Dnum之间不存在传递依赖。

     D、学会M(Mname,Myear,Maddr,Mnum)的最小函数依赖集如下:

        MnameàMyear,MnameàMaddr,MnameàMnum

         该模式不存在传递依赖。

      (3)各关系模式的候选码、外部码,全码如下:

      A、学生S候选码:Sno;外部码:Dept、Class;无全码

      B、班级C候选码:Class;外部码:Dept;无全码

      C、系D候选码:Dept或Dno;无外部码;无全码

      D、学会M候选码:Mname;无外部码;无全码

    7.下面的结论哪些是正确的? 哪些是错误的? 对于错误的请给一个反例说明之。

    (1)任何一个二目关系是属于3NF。

    答:正确。因为关系模式中只有两个属性,所以无传递。

    (2)任何一个二目关系是属于BCNF.

    答:正确。按BCNF的定义,若XàY,且Y不是X的子集时,每个决定因素都包含码,对于二目关系决定因素必然包含码。详细证明如下:(任何二元关系模式必定是BCNF)。

    证明:设R为一个二目关系R(A1,A2),则属性A1和A2之间可能存在以下几种依赖关系:

    A、A1àA2,但A2àA1,则关系R的码为A1,决定因素都包含码,所以,R是BCNF。

    B、A1àA2,A2àA1,则关系R的码为A2,所以决定因素都包含码,R是BCNF。

    包含码。R是BCNF。C、R的码为(A1,A2)(即A1 àA2,A2 àA1),决定因素都

    第七章 数据库设计

    1.试述数据库设计过程。

    答:这里只概要列出数据库设计过程的六个阶段: ( l )需求分析; ( 2 )概念结构设计; ( 3 )逻辑结构设计; ( 4 )数据库物理设计; ( 5 )数据库实施; ( 6 )数据库运行和维护。这是一个完整的实际数据库及其应用系统的设计过程。不仅包括设计数据库本身,还包括数据库的实施、运行和维护。设计一个完善的数据库应用系统往往是上述六个阶段的不断反复。

    2 .试述数据库设计过程各个阶段上的设计描述。

    答:各阶段的设计要点如下: ( l )需求分析:准确了解与分析用户需求(包括数据与处理)。 ( 2 )概念结构设计:通过对用户需求进行综合、归纳与抽象,形成一个独立于具体 DBMS 的概念模型。 ( 3 )逻辑结构设计:将概念结构转换为某个 DBMS 所支持的数据模型,并对其进行优化。 ( 4 )数据库物理设计:为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。 ( 5 )数据库实施:设计人员运用 DBMS 提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。 ( 6 )数据库运行和维护:在数据库系统运行过程中对其进行评价、调整与修改。

    3 .试述数据库设计过程中结构设计部分形成的数据库模式。

    答:数据库结构设计的不同阶段形成数据库的各级模式,即: ( l )在概念设计阶段形成独立于机器特点,独立于各个 DBMS 产品的概念模式,在本篇中就是 E 一 R 图; ( 2 )在逻辑设计阶段将 E 一 R 图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式,然后在基本表的基础上再建立必要的视图 ( Vi 娜),形成数据的外模式; ( 3 )在物理设计阶段,根据 DBMS 特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。

    5 .什么是数据库的概念结构?试述其特点和设计策略。

    答:概念结构是信息世界的结构,即概念模型,其主要特点是: ( l )能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是对现实世界的一个真实模型; ( 2 )易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据库设计成功的关键; ( 3 )易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充; ( 4 )易于向关系、网状、层次等各种数据模型转换。概念结构的设计策略通常有四种: l )自顶向下,即首先定义全局概念结构的框架,然后逐步细化; 2 )自底向上,即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构; 3 )逐步扩张,首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构; 4 )混合策略,即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。

    7.学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教员,其中有的教授和副教授每人各带若干研究生;每个班有若干学生,每个学生选修若干课程,每门课可由若干学生选修。请用 E 一 R 图画出此学校的概念模型。

    答:

     

    各实体属性为:

    系:系编号,系名

    班级:班级号,班级名

    教研室:教研室号,教研室

    学生:学号,姓名,学历

    课程:课程号,课程名

    教员:职工号,姓名,职称

    联系的属性:“选修”的属性为“成绩”

    转换为关系模型如下:

    系(系编号,系名,学校名)

    班级(班级号,班级名,系编号)

    教研室(教研室号,教研室,系编号)

    学生(学号,姓名,学历,班级号,导师职工号)

    课程( 课程号,课程名)

    教员(职工号,姓名,职称,教研室号)

    选修(学号,课程号,成绩)

    8 .某工厂生产若干产品,每种产品由不同的零件组成,有的零件可用在不同的产品上。这些零件由不同的原材料制成,不同零件所用的材料可以相同。这些零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中。请用 E 一 R 图画出此工厂产品、零件、材料、仓库的概念模型。

    答:

     

    各实体属性为:

    产品:产品号,产品名

    零件:零件号,零件名

    原材料:原材料号,原材料名,类别

    仓库:仓库号,仓库名

    各联系的属性为:

    产品组成:使用零件量

    零件制造:使用原材料量

    零件存储:存储量

    材料存放:存储量

    转换为关系模型如下:

    产品(产品号,产品名,仓库号)

    零件:零件号,零件名

    原材料:原材料号,原材料名,类别,仓库号,存放量)

    仓库(仓库号,仓库名)

    产品组成(产品号,零件号,使用零件量)

    零件组成(零件号,原材料号,使用原材料量)

    零件储存(零件号,仓库号,存储量)

    9 .什么是数据库的逻辑结构设计?试述其设计步骤。

    答:数据库的逻辑结构设计就是把概念结构设计阶段设计好的基本 E 一 R 图转换为与选用的 DBMS 产品所支持的数据模型相符合的逻辑结构。设计步骤为 : ( l )将概念结构转换为一般的关系、网状、层次模型; ( 2 )将转换来的关系、网状、层次模型向特定 DBMS 支持下的数据模型转换; ( 3 )对数据模型进行优化。

    11、第七题中设计的关系模型中的各个关系模式都只有一个码,且都是唯一的决定因素,所以属于BCNF,不会发生更新异常。

     

    展开全文
  • MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作...MySQL数据字典提供的集中式事务元数据存储消除了这一障碍,使得将DDL语句操作重组原子事务成为可能。 官方文档: https
  • 为深入理解煤焦油重组分化学结构,采用正庚烷沉淀与柱色谱分离法将中低温煤焦油重组分分离成饱和分、芳香分、胶质和沥青质。综合采用元素分析、红外光谱、分子量及核磁共振氢谱等分析方法对各组分组成与分子结构进行...
  • 它引入了一种有趣的设计方法,该方法使用设计透镜来解决用户目标追求中固有的挑战,然后以技能原子的形式迭代原型化并测试用户活动的重组,以最佳方式提供游戏性的激励性,令人愉悦的体验。 在两个案例研究中说明了...
  • 通过适当的扩散控制过程的计算机模型可以估计杂质对相关空位和已从规则晶格点位移的I原子重组的影响。 结论是,可以用位移I原子的强各向异性准一维扩散来定量解释实验结果。 此外,在皮秒级电子束辐照的影响之间...
  • ARM下的原子操作实现原理 本文的重点是学习C内嵌汇编的语法和ldrex/strex指令。 1、atomic_t类型定义 typedef struct { int counter; } atomic_t; 把整型原子操作定义为结构体,让原子函数只接收atomic_t类型的...

    ARM下的原子操作实现原理

    本文的重点是学习C内嵌汇编的语法和ldrex/strex指令。


    1、atomic_t类型定义
    typedef struct {
        int counter;
    } atomic_t;
    把整型原子操作定义为结构体,让原子函数只接收atomic_t类型的参数进而确保原子操作只与这种特殊类型数据一起使用,同时也保证了该类型的数据不会被传递给非原子函数。

    2、定义并初始化一个atomic_t变量
    atomic_t v = ATOMIC_INIT(0);
    #define ATOMIC_INIT(i)    { (i) }

    3、基本操作
    atomic_inc(v); // 原子变量自增1
    atomic_dec(v); // 原子变量自减1
    4、atomic_inc()函数的实现
    static inline void atomic_inc(atomic_t *v)
    {
    atomic_add_return(1, v);
    }

    #define atomic_inc_return(v)    atomic_add_return(1, (v))
    static inline int atomic_add_return(int i, atomic_t *v)
    {
        unsigned long tmp;
        int result;
        smp_mb();
     
        __asm__ __volatile__("@ atomic_add_return\n"
            "1:    ldrex    %0, [%3]\n"
            "    add    %0, %0, %4\n"
            "    strex    %1, %0, [%3]\n"
            "    teq    %1, #0\n"
            "    bne    1b"
            : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
            : "r" (&v->counter), "Ir" (i)
            : "cc");
     
        smp_mb();
        return result;
    }

    4.1 C函数内嵌汇编
    4.1.1 内嵌汇编语法
    __asm__内嵌汇编关键字,告知编译器下述语句为汇编代码
    __volatile__告知编译器不要优化(比如重组优化)下述汇编语句
    语法的格式:
    __asm__ (
        "asm code 1\n" // instruction list
        "asm code 2\n"
        "asm code n"
        : Output Operands // 把汇编指令的数值输出到C代码的变量中
        : Input  Operands
        : clobbers // 告知编译器这条指令会修改什么值
    );

    变量列表中常见符号:
    "+":操作数可读可写
    "=":操作数只写
    "&":常用于输出操作,表示输出操作不能使用输入操作使用过的寄存器,只能+&或=&方式使用
    "r":操作数是任何可用的通用寄存器
    "m":操作数是内存变量
    "p":操作数是一个合法的内存地址
    "I":0~31之间的立即数
    "i":操作数是立即数
    "Q":A memory address which uses a single base register with no offset
    "o":操作数是内存变量,但其寻址方式必须是偏移量类型的,即基址寻址或基址加变址寻址
    "V":操作数是内存变量,但其寻址方式非偏移量类型

    4.1.2 atomic_add_return中汇编分析
    __asm__ __volatile__("@ atomic_add_return\n"
        "1:    ldrex    %0, [%3]\n"
        "    add    %0, %0, %4\n"
        "    strex    %1, %0, [%3]\n"
        "    teq    %1, #0\n"
        "    bne    1b"
        : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
        : "r" (&v->counter), "Ir" (i)
        : "cc");
    %0 <-- result
    %1 <-- tmp
    %3 <-- v->counter的地址
    %4 <-- i
    注意:此时C变量的数据都已经放至寄存器中
    (1) ldrex %0, [%3]
    独占式地加载(Load-Exclusive)v->counter的地址,把它的值放到result中,并更新exclusive monitor(s)
    用C描述就是:
    result = v->counter
    (2) add %0, %0, %4
    result = result + i
    (3) strex %1, %0, [%3]
    独占式地保存(Store-Exclusive)数据至v->counter的地址,数据来自result,操作结果(成功/失败)保存在tmp中
    用C描述就是:
    v->counter = result
    (4) teq %1, #0
    检测strex的操作是否成功
    (5) bne 1b
    strex的操作失败的话,向后跳转到指定标号(jump to 1 label backward)处重新执行
    (6) "cc"

    "cc"是一个特殊的参数,用来标明汇编代码会修改标志寄存器(flags register)
    在某些机器平台上,GCC通过一个特殊的硬件寄存器表征条件类型的代码,"cc"就是这个特殊寄存器的名字
    某些机器平台没有上述功能,"cc"会被忽略,不起作用。

    附:

    1、How to Use Inline Assembly Language in C Code

    2、ldrex和strex简介

    LDREX and STREX
    The LDREX and STREX instructions split the operation of atomically updating memory into
    two separate steps. Together, they provide atomic updates in conjunction with exclusive
    monitors that track exclusive memory accesses.
    Load-Exclusive and Store-Exclusive must only access memory regions marked as
    Normal.


    LDREX
    The LDREX instruction loads a word from memory, initializing the state of the exclusive
    monitor(s) to track the synchronization operation. For example, LDREX R1, [R0]
    performs a Load-Exclusive from the address in R0, places the value into R1 and updates
    the exclusive monitor(s).


    STREX
    The STREX instruction performs a conditional store of a word to memory. If the exclusive
    monitor(s) permit the store, the operation updates the memory location and returns the
    value 0 in the destination register, indicating that the operation succeeded. If the
    exclusive monitor(s) do not permit the store, the operation does not update the memory
    location and returns the value 1 in the destination register. This makes it possible to
    implement conditional execution paths based on the success or failure of the memory
    operation. For example, STREX R2, R1, [R0] performs a Store-Exclusive operation to the
    address in R0, conditionally storing the value from R1 and indicating success or failure
    in R2.

    详见ARM Synchronization Primitives
    ————————————————
    版权声明:本文为CSDN博主「__2017__」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u013686019/article/details/78235624

    展开全文
  • 首次在放电后的状态下,在热干燥和湿空气等离子体柱中测量了处于基态(N4S)的原子氮的绝对密度。 空间分辨的绝对密度的确定导致获得等离子体中分子氮的解离度。 当将空气流以10 slm的压力直接注入位于下游侧的微波...
  • 原子化操作,操作原子化,这在软件开发中经常被听到,那到底什么是操作原子化呢,其实从字面上不难理解,原子化就是一体化,整体化,原子化操作就是将多个操作组合在一起,要么这个组合一起发生,要么一个都不发生,...

    占占定义:

    原子化操作,操作原子化,这在软件开发中经常被听到,那到底什么是操作原子化呢,其实从字面上不难理解,原子化就是一体化,整体化,原子化操作就是将多个操作组合在一起,要么这个组合一起发生,要么一个都不发生,这就是操作的原子化,在程序开发中,我们经常使用事务来干这事!

    网上的解释:

    一种不可分割的操作。从外部看,原子操作要么整体发生,要么根本不发生。例如,在实现业务交易的数据管理系统中,把每一笔业务交易都作为数据库上的原子化操作。这就意味着组成业务的所有数据更新操作或者都被执行,或者一个也不被执行;一部分更新操作被执行,而其他更新操作都不被执行的情况永远不可能发生。RAID阵列必须实现原子化的写操作,使得客户机能够正确地重组单磁盘语义。原子化操作用以确保部分组建的失效不会破坏存储的数据。

    C#中的原子化操作:

              using (TransactionScope scope = new TransactionScope())
                    {
                        var list = _context.Order.Include("OrderItem")
                            .Where(x => x.ID == order.ID);
                        if (list.Count() > 0)
                        {
                            //更新Order列
                            Order _order = list.First();
                            _order.Count = order.Count;
                            _order.Delivery = order.Delivery;
                            _order.Favorable = order.Favorable;
                            _order.Freightage = order.Freightage;
                            _order.OrderNumber = order.OrderNumber;
                            _order.PersonID = order.PersonID;
                            _order.Price = order.Price;
                            _order.TotalPrice = order.TotalPrice;
    
                            //删除原有的订单明细项OrderItem
                            if (list.First().OrderItem.Count != 0)
                                foreach (var item in list.First().OrderItem)
                                    DeleteOrderItem(item.ID);
                            //加入新的订单明细项OrderItem
                            if (order.OrderItem.Count != 0)
                            {
                                foreach (var item in order.OrderItem)
                                {
                                    var _orderItem = new OrderItem();
                                    _orderItem.Count = item.Count;
                                    _orderItem.Goods = item.Goods;
                                    _orderItem.OrderID = item.OrderID;
                                    _orderItem.Price = item.Price;
                                    AddOrderItem(_orderItem);
                                }
                            }
                            returnValue = _context.SaveChanges();
                        }
                        else
                            returnValue = 0;
    
                        scope.Complete();
                    }
                }

    感谢阅读!

    本文转自博客园张占岭(仓储大叔)的博客,原文链接:基础才是重中之重~何为原子化操作,如需转载请自行联系原博主。

    展开全文
  • 《数据库系统概论》复习

    千次阅读 多人点赞 2019-05-27 12:13:27
    基本关系的6条性质:列同质、异列可同域、行列无序性、候选码唯一性、分量原子性 2、关系模式 关系模式:关系的描述称为模式,它的形式化表达为R(U,D,DOM,F),其中R为关系名,U为属性名集合,D为属性域,DOM为...

    《数据库系统概论》复习

    除标题外加粗的是长安大学软件工程系数据库期末考试的考点,没有加粗的是课堂涉及的内容,省略和没有提及的内容是没有在课堂上讨论的内容。
    仅用于个人复习,本文著作权归原书作者所有,转载必须注明原书作者和出版社。

    第一章 绪论

    1.1 数据库系统概述

    1、数据库系统的四个基本概念
    数据(Data):描述事物的符号记录称为数据,数据是数据库存储的基本对象。
    数据库(DB):长期存储在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按照一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。概括地讲,数据库数据具有永久储存、有组织和可共享三个基本特点。
    数据库管理系统(DBMS):位于用户和操作系统之间的一层数据管理软件。主要功能包括提供数据定义语言(DDL)、数据的组织存储和管理、提供数据操纵语言(DML)、事务管理和运行管理、创建和维护等。
    数据库系统(DBS):数据库系统是由数据库、数据库管理系统、应用程序和数据库管理员(DBA)组成的存储、管理和维护数据的系统。DBS=DB+DBMS+APP+DBA
    2、数据管理技术的产生和发展
    数据管理的三个阶段:人工管理、文件管理、数据库管理系统
    文件系统与数据库管理系统的区别

    人工管理阶段文件系统阶段数据库系统阶段
    数据的管理者用户(程序员)文件系统数据库管理系统
    数据面向的对象某一应用程序某一应用现实世界(法人、社团)
    数据的共享程度无共享,冗余性极大共享性差,冗余度大共享性高,冗余度小
    数据的独立性不独立,完全依赖于程序独立性差具有高度的物理独立性和一定的逻辑独立性
    数据的结构性无结构记录内有结构、整体无结构整体结构化,用数据模型描述
    数据控制能力应用程序自己控制应用程序自己控制由数据库管理系统提供数据安全性、完整性、并发控制和恢复能力

    3、数据库系统的特点
    数据结构化;数据的共享性高、冗余性低且易扩充;数据独立性高;数据由数据库管理系统统一管理和控制。

    1.2 数据模型

    数据模型:对现实世界数据特征的抽象,用来描述数据、组织数据和操作数据,是数据库系统的核心和基础。
    1、两类数据模型:①概念模型②逻辑模型和物理模型
    概念模型:按照用户的观点对数据和信息建模,主要用于数据库设计。
    逻辑模型:按照计算机系统的观点对数据建模,主要用于数据库管理系统的实现。
    物理模型:对数据最底层的抽象,描述数据在系统内部或存储介质上的表示方式和存取方法。
    构建数据模型的方法:将现实世界抽象为信息世界,得到概念模型;将信息世界转换为机器世界,得到DBMS支持的数据模型。
    2、概念模型:
    信息世界中的基本概念:
    (1)实体:客观存在并可相互区别的事物。
    (2)属性:实体的特性称为属性。
    (3)码:唯一标识实体的属性集称为码。
    (4)实体型:用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。
    (5)实体集:同一类型的实体的集合称为实体集。
    (6)联系:实体内部的联系指组成实体的属性之间的联系,实体之间的联系指不同实体集之间的联系。实体之间的联系有一对一、一对多和多对多等多种类型。
    概念模型的表示方法:实体-联系(E-R)方法,该方法使用E-R图描述概念模型。
    3、数据模型的组成要素
    数据模型通常由数据结构、数据操作和完整性约束条件三部分组成。数据结构描述数据库组成对象和对象之间的联系;数据操作指对数据库中各种对象(型)的实例(值)允许执行操作的集合;数据的完整性约束条件是一组完整性规则,包括实体完整性、参照完整性和用户定义的完整性。
    4、常用的数据模型
    层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结构化数据模型等。
    5、层次模型(略)
    6、网状模型(略)
    7、关系模型
    关系模型的数据结构:
    (1)关系:一个关系对应通常所说的一张表。
    (2)元组:表中的一行即为一个元组。
    (3)属性:表中的一列即为一个属性。
    (4)码/键:唯一确定一个元组的属性集。
    (5):一组具有相同数据类型的值的集合。属性的取值范围来自某个域。
    (6)分量:元组中的一个属性值。
    (7)关系模式:对关系的描述,一般表示为
    关系名(属性1,属性2,…,属性n)
    关系模型的数据操作:增删改查
    【必考】关系的完整性约束:实体完整性、参照完整性、用户定义的完整性
    关系模型的评价:严格数学定义、概念单一、存储路径对用户透明、查询效率稍稍逊于格式化数据模型。

    1.3 数据库系统的结构

    1、数据库系统模式的概念
    “型”和“值”:型是指对某一类数据的结构和属性的说明,值是型的一个具体赋值。
    模式:数据库中全体数据的逻辑结构和特征的描述,仅仅涉及型的描述,不涉及具体的值。模式的一个具体值称为模式的一个实例。模式是相对稳定的,实例是相对变动的。
    2、数据库系统的三层模式结构
    在这里插入图片描述
    模式:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共视图。在数据库系统模式结构中处于中间层,与硬件平台和应用程序无关。一个数据库只有一个模式。
    外模式:也称子模式和用户模式,它是数据库用户(应用程序员与最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。外模式通常是模式的子集,一个数据库可以有很多外模式。
    内模式:也称存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。例如,记录的存储方式是堆存储、升序/降序存储还是聚簇存储;B+树索引还是哈希索引;是否压缩存储,是否加密;数据存储记录结构是定长结构还是边长结构;等等。
    3、数据库的而二级映像功能与数据独立性
    数据库的二级映像功能:外模式/模式映像、模式/内模式映像。
    外模式/模式映像针对于每一个外模式,定义了外模式与模式的对应关系;模式/内模式映像是唯一的,定义了数据全局逻辑结构与存储结构之间的对应关系。
    数据的逻辑独立性:当模式改变时,由DBA对各个外模式/模式的映像作相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据逻辑独立性。
    数据的物理独立性:当数据库的存储结构改变时,由DBA对模式/内模式映像作出相应改变,可以使模式保持不变,从而应用程序也不必改变,保证了数据与程序的物理独立性,简称数据物理独立性。

    1.4 数据库系统的组成

    数据库系统=数据库+数据库管理系统+应用程序+数据库管理员
    数据库管理员(DBA)的职责
    (1)决定数据库中的信息内容和结构;
    (2)决定数据库的存储结构和存取策略;
    (3)定义数据的安全性要求和完整性约束条件;
    (4)监控数据库的使用与运行;
    (5)数据库的改进、重组和重构

    第二章 关系数据库

    2.1 关系数据结构及形式化定义

    关系模型三要素:关系数据结构、关系操作集合、关系完整性约束
    1、关系
    关系:描述现实世界的实体以及实体之间的各种联系的单一结构类型就是关系,站在用户的视角,关系就是一张二维表。
    (1):域是一组具有相同数据类型的集合。
    (2)笛卡尔积:给定的一组域D1,D2,…,Dn,允许其中某些域是相同的,它们的笛卡尔积定义为
    D1×D2×…×Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
    其中每一个元素(d1,d2,…,dn)叫做一个n元组,或简称元组,元组中的每一个分量di叫做一个分量。一个域允许的不同取值个数称为这个域的基数。
    (3)关系:D1×D2×…×Dn的子集叫做在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn),R表示关系的名字,n是关系的目或度。关系中的每个元素是关系中的元组,用t表示。

    • 关系是笛卡尔积的有限子集,所以关系也是一张二维表,表的每一行表示一个元组,表的每一列对应一个域,区分域的列名就是属性名。
    • 候选码:某一属性组的的值能够唯一地标识一个元组,但是它的任何一个真子集不能,则称该属性组为候选码
    • 主码:若一个关系有多个候选码,则选定其中一个为主码。
    • 主属性:候选码的诸属性为主属性,不包含在任何候选码中的属性称为非主属性。
    • 全码:关系模式的所有属性构成这个关系模式的候选码,称为全码。
    • 关系类型:基本关系(基本表或基表)、查询表和视图表。基本表是实表;查询表是查询结果对应的表;视图表是导出表,是虚表。
    • 关系的补充限定:禁止无限关系,附加属性名来消除关系属性的有序性
    • 基本关系的6条性质:列同质、异列可同域、行列无序性、候选码唯一性、分量原子性

    2、关系模式
    关系模式:关系的描述称为模式,它的形式化表达为R(U,D,DOM,F),其中R为关系名,U为属性名集合,D为属性域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。
    3、关系数据库(略)
    4、关系模型的存储结构(略)

    2.2 关系操作

    1、基本的关系操作:增删改查
    查询操作:选择、投影、连接、除、并、差、交、笛卡尔积
    2、关系数据语言的分类:关系代数和关系演算
    结构化查询语言SQL:DQL、DDL、DML、DCL

    2.3 关系的完整性

    【必考】关系模型三类完整性约束:实体完整性、参照完整性、用户定义完整性
    1、实体完整性:主码不可重复且不为空
    2、参照完整性:若属性/属性组F是基本关系R的外码,它与基本关系S的主码Ks相对应(R与S可以是同一关系),则对于R中每个元组在F上的值必须取空值或S中某个元组的主码值。
    外码:设F是基本关系R的属性/属性集,但不是关系R的码,Ks是基本关系S的主码,如果F与Ks相对应,则称F是R的外码,并称R为参照关系,S为被参照关系或目标关系,R与S可以是同一关系。
    3、用户定义的完整性

    2.4 关系代数

    1、传统的集合运算:并、差、交、笛卡尔积
    2、专门的关系运算:选择、投影、连接、除
    (1)选择:σF(R),F是选择条件
    (2)投影:ΠA(R),A是属性列
    (3)连接:从两个关系的笛卡尔积中选取属性间满足条件AθB的元组。
    等值连接:θ为“=”的连接运算。
    自然连接:特殊的等值连接,要求比较的分量必须是同名的属性组,并在结果中去掉重复的列。
    悬浮元组:自然连接中,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,因此被舍弃,这些元组称为悬浮元组。
    外连接:进行自然连接时,保留悬浮元组,而在其他属性列上填空值。分为左外连接和右外连接,分别表示保留哪一边关系的悬浮元组。
    (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={t r[X]|t r∈R∧Π Y(S)⊆Y x}
    其中Y x为x在R中的象集,x=t r[X]。

    象集Yx:给定一个关系R(X,Y),X和Y为属性组。当t[X]=x时,x在R中的象集定义为:

    Y x={t[Y]|t∈R,t[X]=x}

    如何理解除运算:R÷S,将R中属性分为公共属性和非公共属性,对于同一个非公共属性值,如果公共属性值在S中的元组中都出现过,那么把非公共属性值加入结果中。除运算一般用于解决“至少”问题。

    2.5 关系演算(略)

    第3章 关系数据库标准语言SQL

    3.1 SQL概述

    1、SQL的产生与发展
    2、SQL语言的特点
    (1)综合统一,集DDL、DML、DCL、DQL于一身。
    (2)高度非过程化。
    (3)面向集合的操作方式。
    (4)以同一种语法结构提供多种使用方式。
    (5)语言简介,易学易用。
    3、SQL的基本概念
    外模式——视图,模式——基本表,内模式——存储文件

    3.2 学生-课程数据库(略)

    之后几节全部是重点,不考察exists谓词

    3.3 数据定义

    1、模式的定义与删除
    定义模式:

    CREATE SCHEMA 模式名 AUTHORIZATION 用户名;
    CREATE SCHEMA 模式名 AUTHORIZATION 用户名 [表定义子句|视图定义子句|授权定义子句]
    

    删除模式:

    DROP SCHEMA 模式名 [CASCADE|RESTRICT]
    

    2、基本表的定义、删除与修改
    定义基本表:

    CREATE TABLE 表名 (
    	列名 数据类型 [列级完整性约束条件], 
    	[列名 数据类型 [列级完整性约束条件]] 
    	... 
    	[, 表级完整性约束条件]
    );
    

    参照完整性约束条件:

    FOREIGN KEY(Sno) REFERENCES Student(Sno)
    

    数据类型:定长与变长字符串,大对象,整型,定点数,浮点数,布尔型,时间类型
    修改基本表:

    ALTER TABLE 表名 
    [ADD [COLUMN] 新列名 数据类型 [完整性约束]] 
    [ADD 表级完整性约束]
    [DROP [COLUMN] 列名 [CASCADE|RESTRICT]]
    [DROP [CONSTRAINT] 完整性约束名 [RESTRICT|CASCADE]]
    [ALTER COLUMN 列名 数据类型];
    

    删除基本表:

    DROP TABLE 表名 [RESTRICT|CASCADE];
    

    3、索引的建立与删除
    索引类型:顺序文件上的索引、B+树索引、散列索引、位图索引
    建立索引:

    CREATE [UNIQUE|CLUSTER] INDEX 索引名 ON 表名(列名 [ASC|DESC] [, 列名 [ASC|DESC]] ... );
    

    修改索引:

    ALTER INDEX 旧索引名 RENAME TO 新索引名;
    

    删除索引:

    DROP INDEX 索引名;
    

    4、数据字典:记录数据库中所有定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、权限定义、统计信息,的一组系统表。

    3.4 数据查询

    SELECT [ALL|DISTINCT] 目标列表达式[, 目标列表达式] ... 
    FROM 表名|视图名[, 表名|视图名] | (SELECT语句) [AS] 别名
    [WHERE 条件表达式]
    [GROUP BY 列名1 [HAVING 条件表达式]]
    [ORDER BY 列名2 [ASC|DESC]];
    

    1、单表查询
    常用的查询条件

    查询条件谓词
    比较关系运算符,NOT
    确定范围BETWEEN AND,NOT BETWEEN AND
    确定集合IN,NOT IN
    字符匹配LIKE,NOT LIKE
    空值IS NULL,IS NOT NULL
    多重条件AND,OR,NOT

    通配符:%,_
    聚集函数

    聚集函数功能
    COUNT(*)统计元组个数
    COUNT([DISTINCT|ALL] 列名)统计一列中值的个数
    SUM([DISTINCT|ALL] 列名)计算一列值的总和
    AVG([DISTINCT|ALL] 列名)计算一列值的平均值
    MAX([DISTINCT|ALL] 列名)求一列值中的最大值
    MIN([DISTINCT|ALL] 列名)求一列值中的最小值

    GROUP BY子句:将查询结果按照某一列或多列的值分组,值相等的为一组。分组后聚集函数将作用于每一组,即每一组都有一个函数值。HAVING子句与WHERE子句的区别在于HAVING子句作用于组,可以使用聚集函数,但WHERE子句中不可以。
    具体使用:

    SELECT Sno,Sname FROM Student;
    SELECT * FROM Student;
    SELECT Sname,'Year of Birth',2014-Sage BIRTHDAY,LOWER(Sdept);/*目标列表达式可以是属性列,常量,函数,也可以是表达式,通过指定别名可以改变列标题*/
    SELECT DISTINCT Sno FROM SC;/*去重*/
    SELECT Sname FROM Student WHERE Sdept='cs';/*比较大小*/
    SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;/*确定范围*/
    SELECT Sname,Ssex FROM Student WHERE Sdept IN ('cs','ma','is');/*确定集合*/
    SELECT * FROM Student WHERE Sname LIKE '刘%';/*字符匹配*/
    SELECT * FROM SC WHERE GRADE IS NULL;/*空值查询*/
    SELECT * FROM Student WHERE Sdept='cs' AND Sage<20;/*多重条件查询*/
    SELECT COUNT(*) FROM Student;/*使用聚集函数*/
    SELECT Sno,AVG(Grade)
    FROM SC
    GROUP BY Sno
    HAVING AVG(Grade)>=90;/*使用GROUP BY子句*/
    

    2、连接查询

    -- 等值连接
    SELECT Student.*,SC.*
    FROM Student,SC
    WHERE Student.Sno=SC.Sno;
    -- 自身连接
    SELECT FIRST.Cno,SECOND.Cpno
    FROM Course FIRST,Course SECOND
    WHERE FIRST.Cpno=SECOND.Cno;
    -- 外连接
    SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
    FROM Student LEFT OUTER JOIN SC ON(Student.Sno=SC.Sno);
    -- 多表连接
    SELECT Student.Sno,Sname,Cname,Grade
    FROM Student,SC,Course
    WHERE Student.Sno=SC.Sno AND SC.Sno=Course.Cno;
    

    嵌套循环连接算法:R与S等值连接,先在R找到第一个元组,扫描S表查找符合等值条件的S表元组,合并后形成结果表中第一个元组,然后再在R找第二个元组,重复以上步骤,直到遍历完整个R表。使用索引可以提高查找的效率。
    3、嵌套查询
    嵌套查询:一个SELECT-FROM-WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。需要特别指出的是子查询的SELECT语句中不能使用ORDER BY子句,ORDER BY子句只能对最终查询结果排序。
    不相关子查询:子查询的查询条件不依赖于父查询。
    相关子查询:子查询的查询条件依赖于父查询。相关子查询的一种执行过程为,从外层查询中取出一个元组,将它的属性值传给内层查询,执行内层查询得到一个值,用该值代替内层查询,得到外层查询,执行外层查询。
    (1)带有IN谓词的子查询

    SELECT Sname 
    FROM Student
    WHERE Sno IN(
    	SELECT Sno 
    	FROM SC
    	WHERE Cno='2'
    );
    

    (2)带有比较运算符的子查询

    SELECT Sno,Sname,Sdept
    FROM SC x
    WHERE Grade>=(
    	SELECT AVG(Grade)
    	FROM SC y
    	WHERE y.Sno=x.Sno
    );
    

    (3)带有ANY(SOME)或ALL谓词的子查询
    op ANY表示对于子查询中某一个值条件成立则为真,op是关系运算符
    op ALL表示对于子查询中所有值条件都成立才为真,op是关系运算符

    -- 查询年龄至少小于一个计科学生的非计科的学生的姓名和年龄
    SELECT Sname,Sage
    FROM Student
    WHERE Sage<ANY(
    	SELECT Sage
    	FROM Student
    	WHERE Sdept='cs'
    ) AND Sdept <> 'cs';
    -- 等价于
    SELECT Sname,Sage
    FROM Student
    WHERE Sage<(
    	SELECT MAX(Sage)
    	FROM Student
    	WHERE Sdept='cs'
    ) AND Sdept <> 'cs';
    

    (4)带有EXISTS谓词的子查询
    带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真或假。内层查询不为空则为真,内层查询为空则为假。可以使用NOT运算符对逻辑值结果取反。

    -- 查询选修了1号课程的学生
    SELECT Sname
    FROM Student
    WHERE EXISTS(
    	SELECT *
    	FROM SC
    	WHERE Sno=Student.Sno AND Cno='1'
    );
    /*使用了相关子查询,对于每一个Student,将Sno属性值传入子查询中,执行子查询,
    根据结果是否为空得到一个布尔值,为真时就将这个学生的姓名放在结果中。*/
    
    -- 变态版子查询
    -- 查询至少选修了学生201215122选修的全部课程的学生号码
    /*
    p:“学生201215122选修了课程y”
    q:“学生x也选修了课程y”
    查询:(∀y)p->q
    转换:(∀y)p->q ≡ ┐(∃y(┐(p->q))) ≡ ┐(∃y(┐(┐p∨q))) ≡ ┐∃y(p∧┐q)
    */
    SELECT DISTINCT Sno
    FROM SC SCX -- 表示学生x
    WHERE NOT EXISTS( -- 再次取反,表示x没有选修课程y的这种情况不出现
    	SELECT *
    	FROM SC SCY -- 表示学生201215122
    	WHERE SCY.Sno='201215122' AND NOT EXISTS( -- 取反,也就是x没有选修课程y
    		SELECT *
    		FROM SC SCZ
    		WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno -- 表示x也选修了课程y
    	)
    );
    

    4、集合查询
    集合操作主要包括并操作(UNION)、交操作(INTERSECT)、差操作(EXCEPT),将两个SELECT语句通过集合操作运算符连接即可。
    5、基于派生表的查询
    子查询出现在FROM子句中。

    3.5 数据更新

    1、插入数据

    -- 插入元组
    INSERT INTO 表名 [(属性列1, 属性列2 ...)]
    VALUES(常量1, 常量2 ...),[(常量1, 常量2 ...) ...];
    -- 插入子查询结果
    INSERT INTO 表名 [(属性列1, 属性列2 ...)]
    子查询;
    

    2、修改数据

    UPDATE 表名
    SET 列名=表达式[, 列名=表达式 ...]
    [WHERE 条件];
    -- 子查询也可以出现在UPDATE语句的where子句中
    

    3、删除数据

    DELETE
    FROM 表名
    [WHERE 条件];
    -- 子查询也可以出现在DELETE语句的where子句中
    

    3.6 空值的处理

    空值的产生:插入仅给部分属性赋值的元组、外连接、空值的关系运算
    空值的判断:IS NULL、IS NOT NULL
    空值的约束条件:NOT NULL、UNIQUE、码属性不能为空
    空值的算术运算、比较运算和逻辑运算:空值的算术运算结果为空值,空值的比较运算结果为UNKNOWN,UNKNOWN的逻辑运算结果如下:
    NOT U = U, U AND U = U U AND T = U, U AND F = F,U OR U = U, U OR T = T, U OR F = U

    3.7 视图

    1、定义视图
    (1)建立视图

    CREATE VIEW 视图名 [(列名[, 列名]...)]
    AS 子查询
    [WITH CHECK OPTION];
    /*WITH CHECK OPTION表示对视图进行UPDATE、INSERT、DELETE操作时
    要保证执行操作的行满足视图定义中的谓词条件(即子查询中的条件表达式)*/
    

    组成视图的所有列名全部省略或全部指定,必须指定列名的情况:

    • 某个目标列不是单纯的属性名,而是聚集函数或列表达式;
    • 多表连接时选出了几个同名列作为视图的字段
    • 需要在视图中为某个列启用新的更合适的名字
      CREATE VIEW语句并不执行子查询,而是在查询视图时才执行子查询。
      行列子集视图:从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,则称这类视图为行列子集视图。
      视图可以建立在基本表、视图、基本表和视图的组合之上。
      虚拟列:由基本表经过计算导出的属性列称为虚拟列,带虚拟列的视图也称为带表达式的视图。
      分组视图:用带有聚集函数和GROUP BY子句的查询定义的视图称为分组视图。
      (2)删除视图
    DROP VIEW 视图名 [CASCADE];
    

    2、查询视图
    查询视图的方法与查询表的方法一样。
    视图消解:从数据字典中取出数据的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。这一转换过程称为视图消解。
    目前多数关系型数据库能够对行列子集视图的查询均能进行正确转换,但对非行列子集视图的查询就不一定能够转换,这类查询应当直接对基本表进行。
    视图查询与派生表查询的区别:视图定义将永久保存在数据字典中,派生表是临时定义,执行后即被删除。
    3、更新视图
    视图是虚表,对视图的更新将转换为对基本表的更新。
    使用WITH CHECK OPTION定义视图可以防止对非视图基本表数据进行操作。
    视图并不总是可以更新的,一般地,行列子集视图是可更新的。
    4、视图的作用
    简化操作、多角度看待数据、为重构数据库提供一定程度逻辑独立性、安全性控制、更清晰的表达

    第4章 数据库安全性

    4.1 数据库安全性概述

    数据库安全性:保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
    1、数据库的不安全因素:非法入侵、数据泄露、安全环境的脆弱性
    2、安全标准简介:TCSEC、CC

    4.2 数据库安全性控制

    数据库安全性控制:身份鉴别、多层存取控制、审计、视图和数据加密
    1、用户身份鉴别(略)
    2、存取控制
    存取控制机制:

    • 定义用户权限,并将用户权限登记到数据字典中
    • 合法权限检查

    存取控制方法:

    • 自主存取控制:采用授权方式实现存取控制,比较灵活。
    • 强制存取控制:采用密级标定数据库对象,比较严格。

    3、自主存取控制方法
    用户权限二要素:数据库对象、操作类型
    授权:定义存取权限。
    在关系型数据库系统中,存取控制的对象不仅有数据本身,还有数据库模式(数据库、基本表、视图和索引的创建)。
    4、授权:授予与收回
    (1)GRANT

    GRANT 权限[, 权限]...
    ON 对象类型 对象名[, 对象类型 对象名]...
    TO 用户[, 用户]...
    [WITH GRANT OPTION];-- 允许权限传播
    

    eg:

    GRANT SELECT ON TABLE Student TO U1;
    GRANT ALL PRIVILEGES ON TABLE Student,Course TO U2,U3; -- mysql中不允许写多个用户和多个表
    GRANT SELECT ON TABLE SC TO PUBLIC; -- mysql中没有PUBLIC
    GRANT UPDATE(Sno),SELECT ON TABLE Student TO U4;
    GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION;
    

    (2)REVOKE

    REVOKE 权限[, 权限]...
    ON 对象类型 对象名[, 对象类型 对象名]...
    FROM 用户[, 用户]...
    [CASCADE|RESTRICT]
    

    eg:

    REVOKE UPDATE(Sno) ON TABLE Student FROM U4;
    REVOKE SELECT ON TABLE SC FROM PUBLIC;
    REVOKE INSERT ON TABLE SC FROM U5 CASCADE;
    REVOKE ALL PRIVILEGES,GRANT OPTION ON TABLE Student FROM U4;-- 收回一切权限
    

    自主控制控制:用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将“授权”的权限授予别人。因此称这样的存取控制是自主存取控制。
    3、创建数据库模式的权限
    创建用户:

    CREATE USER 用户名 [WITH DBA|RESOURCE|CONNECT];
    
    • 只有系统的超级用户才有权创建一个新的数据库用户
    • 新创建的数据库用户有三种权限:CONNECT、RESOURCE和DBA
    • 新用户默认的权限为CONNECT,拥有CONNECT权限的用户只能登录数据库
    • 拥有RESOURCE权限的用户能创建基本表和视图,成为所创建对象的属主,但不能创建模式,也不可以新建用户。数据库对象的属主可以把该对象上的权限授权给其他用户。
    • 拥有DBA权限的用户具有最高权限。

    【注意】CREATE USER语句不是SQL标准

    5、数据库角色
    数据库角色:被命名的一组与数据库操作相关的权限,角色是权限的集合。使用角色管理数据库权限可以简化授权的过程。
    角色的创建:

    CREATE ROLE 角色名
    

    给角色授权:

    GRANT 权限[, 权限]...
    ON 对象类型 对象名
    TO 角色[, 角色]...
    

    将一个角色授予其他用户或角色:

    GRANT 角色[, 角色]...
    TO 角色|用户[,角色|用户]...
    [WITH ADMIN OPTION];-- mysql不支持WITH ADMIN OPTION
    

    角色权限的收回:

    REVOKE 权限[, 权限]...
    ON 对象类型 对象名
    FROM 角色[, 角色]...
    

    6、强制存取控制方法(MAC)
    基本思想:对系统控制下的所有主客体实施强制存取控制策略。在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两部分,主体包括用户和外部进程,客体包括数据库对象如文件、表、索引、视图。数据库系统为每个主体和客体指派敏感度标记,主体敏感度标记称为许可证级别,客体敏感度标记称为密级。同等或高许可证级别用户可以读取相应客体(规则Ⅰ),同等或低许可证级别用户可以写相应客体(规则Ⅱ),规则Ⅱ防止密级从高流向低从而泄密。MAC对数据进行密级标记,无论数据如何复制,标记与数据都是不可分割的整体,只有符合密级要求的用户才能访问,从而提供更高级别的安全性。

    4.3 视图机制(略)

    4.4 审计

    审计:建立审计日志记录数据库操作

    4.5 数据加密(略)

    4.6 其他安全性保护(略)

    第5章 数据库完整性

    数据库的完整性:正确性+相容性
    数据库完整性要求:定义完整性约束性机制+完整性检查+违约处理

    5.1 实体完整性

    1、实体完整性定义
    两种约束条件说明方法:列级约束条件、标记约束条件

    CREATE TABLE Student(
    	Sno CHAR(9) PRIMARY KEY, -- 列级约束条件
    	Sname CHAR(20) NOT NULL,
    	Ssex CHAR(2),
    	Sage SMALLINT,
    	Sdept CHAR(20)
    );
    -- 等价于
    CREATE TABLE Student(
    	Sno CHAR(9),
    	Sname CHAR(20) NOT NULL,
    	Ssex CHAR(2),
    	Sage SMALLINT,
    	Sdept CHAR(20),
    	PRIMARY KEY(Sno) -- 表级约束条件
    );
    

    2、实体完整性检查和违约处理
    唯一性检查+空值检查

    5.2 参照完整性

    1、定义参照性完整性

    CREATE TABLE SC(
    	Sno CHAR(9),
    	Cno CHAR(4),
    	Grade SMALLINT,
    	PRIMARY KEY(Sno,Cno), -- 只能用表级实体完整性约束
    	FOREIGN KEY(Sno) REFERENCES Student(Sno), -- 表级完整性约束
    	FOREIGN KEY(Cno) REFERENCES Course(Cno) -- 表级完整性约束
    );
    

    2、参照完整性检查和违约处理

    可能破坏参照完整性的情况及违约处理
    被参照表(如Student)参照表(如SC)违约处理
    可能破坏参照完整性插入元组NO ACTION
    可能破坏参照完整性修改外码值NO ACTION
    删除元组可能破坏参照完整性NO ACTION/CASCADE DELETE/NULL
    修改主码值可能破坏参照完整性NO ACTION/CASCADE UPDATE/NULL

    显式说明参照完整性约束:

    CREATE TABLE SC(
    	Sno CHAR(9),
    	Cno CHAR(4),
    	Grade SMALLINT,
    	PRIMARY KEY(Sno,Cno), -- 只能用表级实体完整性约束
    	FOREIGN KEY(Sno) REFERENCES Student(Sno)
    		ON DELETE CASCADE
    		ON UPDATE CASCADE, -- 表级完整性约束
    	FOREIGN KEY(Cno) REFERENCES Course(Cno)
    		ON DELETE NO ACTION
    		ON UPDATE CASCADE-- 表级完整性约束
    );
    

    5.3 用户定义的完整性

    1、属性上的约束条件

    -- 列值非空
    CREATE TABLE SC(
    	Sno CHAR(9) NOT NULL, /* 列值非空 */
    	Cno CHAR(4) NOT NULL, /* 列值非空 */
    	Grade SMALLINT NOT NULL, /* 列值非空 */
    	PRIMARY KEY(Sno,Cno),
    	...
    );
    -- 列值唯一
    CREATE TABLE DEPT(
    	Dno NUMERIC(2),
    	Dname CHAR(9) UNIQUE NOT NULL, /* 列值唯一,非空 */
    	Location CHAR(9),
    	PRIMARY KEY(Dno)
    );
    -- CHECK短语
    CREATE TABLE Student(
    	Sno CHAR(9) PRIMARY KEY,
    	Sname CHAR(8) NOT NULL,
    	Ssex CHAR(2) CHECK(Ssex IN ('男','女')),
    	Sage SMALLINT,
    	Sdept CHAR(20)
    );
    -- 注意在MySQL8.0.16之前的版本不支持CHECK短语
    

    2、元组上的约束条件

    CREATE TABLE Student(
    	Sno CHAR(9),
    	Sname CHAR(8) NOT NULL,
    	Ssex CHAR(2),
    	Sage SMALLINT,
    	Sdept CHAR(20),
    	PRIMARY KEY(Sno),
    	CHECK(Ssex='女' OR Sname NOT LIKE 'Ms.%')
    );
    

    5.4 完整性约束命名子句

    1、完整性约束命名子句

    CONSTRAINT 完整性约束条件名 完整性约束条件
    -- 完整性约束条件包括NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK短语
    -- 完整性约束条件可以作为列级约束条件或表级约束条件出现
    

    2、修改表中的完整性约束

    ALTER TABLE 表名 ADD 完整性约束条件子句
    ALTER TABLE 表名 DROP CONSTRAINT 完整性约束条件名
    

    5.5 域中的完整性限制(略)

    5.6 断言(略)

    5.7 触发器

    不同数据库触发器实现方式差异较大,其中MYSQL不支持语句级触发器。
    1、定义触发器

    -- SQL标准触发器定义
    CREATE TRIGGER 触发器名 -- 只有表的拥有者才有权创建触发器
    BEFORE|AFTER 触发事件 ON 表名 -- 触发器只能定义在基本表上,触发事件可以是INSERT、DELETE、UPDATE
    REFERENCING NEW|OLD ROW AS 变量
    FOR EACH ROW|STATEMENT -- 触发器类型可以是行级触发器和语句级触发器
    [WHEN 触发条件] 触发动作体
    -- MySQL触发器定义
    CREATE [DEFINER = 用户名] TRIGGER 触发器名
    BEFORE|AFTER 触发事件
    ON tbl_name FOR EACH ROW
    [FOLLOWS|PRECEDES 其他触发器名]
    触发动作体
    /*触发动作体既可以是一个匿名PL/SQL过程块,也可以是对过程的调用。
    如果是行级触发器,用户可以在过程体中使用NEW/OLD引用触发事件发生
    之前的旧值和之后的新值*/
    

    书上例题的MySQL写法

    -- 习题5.21
    DROP TRIGGER IF EXISTS `lifang`.`sc_AFTER_UPDATE`;
    DELIMITER $$
    USE `lifang`$$
    CREATE DEFINER = CURRENT_USER TRIGGER `lifang`.`sc_AFTER_UPDATE` AFTER UPDATE ON `sc` FOR EACH ROW
    BEGIN
    	if new.grade >= 1.1 * old.grade
        then
    		insert into sc_u values(new.sno,new.cno,old.grade,new.grade);
        end if;
    END$$
    DELIMITER ;
    -- 习题5.23
    CREATE TABLE `lifang`.`insert_log` (
      `numbers` INT UNSIGNED NOT NULL);
    DROP TRIGGER IF EXISTS `lifang`.`worker_BEFORE_UPDATE`;
    DELIMITER $$
    USE `lifang`$$
    CREATE DEFINER = CURRENT_USER TRIGGER `lifang`.`worker_BEFORE_UPDATE` BEFORE INSERT ON `worker` FOR EACH ROW
    BEGIN
    	if(new.wpos="经理" and new.wwage<4000) then
    		set new.wwage=4000;
        end if;
    END$$
    DELIMITER ;
    

    2、激活触发器的顺序:BEFORE触发器->触发事件->AFTER触发器
    3、删除触发器

    DROP TRIGGER 触发器名 ON 表名;
    

    第6章 关系数据理论

    6.1 问题的提出

    数据依赖:一个关系内部属性和属性之间的一种约束关系,这种约束关系是通过属性间值相等与否体现出来的数据间相关联系。其中函数依赖和多值依赖是最重要的数据依赖。
    函数依赖:关系R的属性x,y如果满足y=f(x)的关系,则称y函数依赖于x。

    一个好的模式应当不会发生插入异常、删除异常和更新异常,数据冗余应尽可能少。

    6.2 规范化

    1、函数依赖
    定义:X、Y是关系R上的属性集,对于R中任意一个关系r,如果不存在元组t1,t2使得t1[X]=t2[X]且t1[Y]≠t2[Y],那么称X函数确定Y或Y函数依赖于X,记作X->Y。
    非平凡的函数依赖:X→Y且Y⊈X,则称X→Y是非平凡的函数依赖。
    平凡的函数依赖:X→Y且Y⊆X,则称X→Y是平凡的函数依赖。
    决定因素:若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素。
    X→Y且Y→X,记作X←→Y。
    完全函数依赖:在R(U)中,如果X->Y且对于X任何一个真子集X’,都有X’-/->Y,则称Y对X完全函数依赖,记作X-F->Y。
    部分函数依赖:不是完全函数依赖的函数依赖是部分函数依赖,记作X-P->Y。
    传递函数依赖:在R(U)中,如果X->Y(Y⊈X),Y-/->X,Y->Z,Z⊈Y则称Z对X传递函数依赖,记作X-传递->Z。
    2、
    候选码:关系R的全体属性U完全函数依赖于R中的属性(集)K,则K是R的候选码。
    超码:关系R的全体属性U部分函数依赖于R中的属性(集)K,则K是R的超码。
    主码、主属性、非主属性、全码的概念见第2章。
    3、范式
    范式:关系数据库中关系需要满足的要求称为范式,根据要求的程度可以将范式分为1NF、2NF、3NF、BCNF、4NF、5NF(范围依次缩小)。
    规范化:低级范式转换成高级范式的过程称为规范化,方法为模式分解。
    1NF:关系的每一个分量具有原子性,不能再分割。
    4、2NF
    2NF:满足1NF且每一个非主属性完全函数依赖于任何一个候选码。
    在这里插入图片描述
    这个关系模式不是2NF,就会产生以下问题:
    (1)插入异常。如果插入一个学生(Sdept,Sdept,Sloc),但该学生并未选课没有课程号Cno,这样的元组就无法插入S-L-C中。
    (2)删除异常。某个学生只选了一门课,如果现在要删除这门课,就必须连带整个元组删除。
    (3)修改复杂。某个学生转专业,本来只需修改Sdept,但Sloc函数依赖于Sdept,所以要连带修改住处Sloc。如果学生选了多门课,Sdept和Sloc冗余度大,修改次数成倍增长。
    模式分解方法:用投影分解把关系模式转换成两个关系模式。
    在这里插入图片描述
    5、3NF
    3NF:1NF,不存在码X,属性组Y和非主属性Z(Z不包含Y),使得Z函数依赖于Y,Y函数依赖于X。
    3NF的必要条件:没有传递函数依赖,没有部分函数依赖,是2NF。注意,定义里没有说Y不包含X,如果有部分函数依赖,就一定存在定义里面的X,Y,Z,如上面的Sno->(Sno,Cno)->Sdept。
    模式分解方法:分解传递依赖。
    在这里插入图片描述
    6、BCNF
    BCNF:1NF,Y非平凡函数依赖于X时X必有码。
    BCNF的必要条件:3NF、主属性不函数依赖于非主属性。
    显然,全码一定是BCNF。
    7、多值依赖
    多值依赖:关系模式R(U),X、Y、Z是U的子集,且Z=U-X-Y。多值依赖X->->Y成立当且仅当对R(U)的任一关系r,给定(x, z),有一组Y的值,这组值仅决定于x值而与z值无关。这里的“无关”应该理解为,将R按X属性值分组,在每一组中对于任意z,z的象集都相等。
    平凡的多值依赖:Y多值依赖于X且Z为空集。
    多值依赖的性质:
    (1)对称性:若X->->Y则X->->Z,Z=U-X-Y。
    (2)传递性:若X->->Y,Y->->Z,则X->->Z-Y。
    (3)函数依赖可以看成特殊的多值依赖。
    (4)若X->->Y,X->->Z,则X->->YZ。
    (5)若X->->Y,X->->Z,则X->->Y∩Z。
    (6)若X->->Y,X->->Z,则X->->Y-Z,X->->Z-Y。
    多值依赖与函数依赖的区别:
    (1)多值依赖的有效性与属性集的范围有关。
    (2)如果Y函数依赖于X,则Y的非空真子集也函数依赖于X。但是如果Y多值依赖于X,却不能断言Y的非空真子集也多值依赖于X。
    8、4NF
    4NF:1NF,如果对于R的每个非平凡多值依赖X->->Y(Y⊈X),X都含有码,则称关系模式满足4NF。
    4NF必要条件:限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
    9、规范化小结
    关系模式的规范化过程是通过对关系模式的分解来实现的,即把低一级的关系模式为若干个高一级的关系模式。

    6.3 数据依赖的公理系统(难度太大)

    6.4 模式的分解

    模式分解的三个定义:

    • 分解具有无损连接性
    • 分解要保持函数依赖
    • 分解既要保持函数依赖,又要具有无损连接性

    第7章 数据库设计

    7.1 数据库设计概述

    数据库设计的一般定义:指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的需求,包括信息管理需求和数据操作需求。
    1、数据库设计的特点:
    三分技术,七分管理,十二分基础数据
    结构设计和处理设计相结合
    2、数据库设计方法(略)
    3、数据库设计基本步骤
    需求分析阶段->概念结构设计阶段->逻辑结构设计阶段->物理结构设计阶段->数据库实施阶段->数据库运维
    需求分析阶段:数字字典、全系统中数据项、数据结构、数据流、数据存储的描述
    概念结构设计阶段:概念模型(E-R图)、数据字典
    逻辑结构设计阶段:关系模式转换
    物理结构设计:存储结构、存取方式、存取路径建立
    数据库实施:创建数据库、装入数据、数据库试运行
    数据库运维:性能监测、转储/恢复、数据库重组和重构

    7.2 需求分析

    数据字典:关于数据库中数据的描述,即元数据。需求分析阶段建立,设计过程中完善。数据字典通常包括数据项、数据结构、数据流、数据存储、处理过程。

    7.3 概念结构设计

    1、概念模型(略)
    2、E-R模型
    实体之间的联系:一对一、一对多、多对多
    E-R图:实体、属性、联系
    3、扩展E-R图(略)
    4、uml(略)
    5、概念结构设计
    实体与属性划分原则:能作为属性就作为属性,属性不能再有属性,属性不能与其他实体有联系
    E-R图的集成:合并->修改与重构
    合并时的冲突:属性冲突、命名冲突、结构冲突

    • 属性冲突:域冲突和单位冲突,协商解决
    • 命名冲突:同名异义、一义多名,协商解决
    • 结构冲突:同一对象一个是实体一个是属性,统一抽象;属性个数和排列不同,统一属性;联系类型不同,综合调整。

    消除冗余:数据字典+数据流图或采用规范化理论

    7.4 逻辑结构设计

    1、关系模型转换
    转换方法:

    • 一对一联系:任意一端合并或转换为独立的关系模式
    • 一对多联系:n端合并或转换为独立的关系模式
    • 多对多联系:转换为独立的关系模式
    • 三元联系:转换为独立的关系模式
    • 具有相同码的关系模式可合并

    2、数据模型的优化
    数据模型优化的方法:
    (1)确定数据依赖;
    (2)对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系;
    (3)按照数据依赖的理论对关系模式逐一进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式;
    (4)根据需求分析阶段得到的处理要求分析对于这样的应用环境这些模式是否合适,确定是否要对某些模式进行合并或分解;
    (5)对关系模式进行必要分解,提高数据操作效率和存储空间利用率。常用的两种分解方法是水平分解和垂直分解。
    水平分解是把(基本关系)的元组分为若干子集合,定义每个子集合为一个子关系,以提高系统的效率。根据“二八原则”把经常使用的数据分解出来,形成一个子关系。
    垂直分解是把关系模式R的属性分解为若干子集合,形成若干子关系模式。垂直分解的原则是将经常在一起使用的属性从R中分解出来形成一个子关系模式。垂直分解需要确保无损连接性和保持函数依赖
    3、设计用户子模式(略)

    7.5 物理结构的设计

    数据库的物理设计:为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理结构。
    数据库的物理结构设计通常分两步走:
    (1)确定数据库的物理结构;
    (2)对物理结构进行评价。
    1‘、数据库物理设计的内容和方法
    目标:事务响应时间小、存储空间利用率高、事务吞吐量大。
    关系数据库物理设计的内容主要包括:为关系模式选择存取方法,以及设计关系、索引等数据库文件的物理存储结构。
    2、关系模式存取方法选择
    常用的存取方法:索引方法、聚簇方法
    常用的索引方法:B+树索引、hash索引
    (1)B+树索引存取方法的选择
    建立索引的原则:属性经常出现在出查询条件中、属性经常作为聚簇函数的参数、属性经常在连接操作的连接条件中出现、更新频率较高的关系不能建立太多索引。
    (2)hash索引存取方法的选择
    选择hash存取方法的原则:关系属性主要出现在等值连接条件或等值比较选择条件中,而且满足以下两个条件,则此关系可以选择hash存取方法。
    ①一个关系的大小可预知,而且不变;
    ②关系的大小动态改变,但DBMS提供了动态hash存取方法。
    (3)聚簇存取方法的选择
    聚簇:把具有相同属性值的元组放在连续的物理块中称为聚簇,该属性(组)称为聚簇码。
    特点:提高查询效率、适用于单个或多个关系、一个关系只能加入一个聚簇。
    候选聚簇的原则:经常一起进行连接操作的关系、关系属性经常出现在相等比较条件中、关系在某个属性上冗余度高
    聚簇方法排除原则:经常全表扫描的关系、更新操作多于连接、加入其他聚簇的关系
    聚簇的局限性:只能提高某些应用的性能、开销大、所有索引失效、改变聚簇码需要维护开销
    3、确定数据库的存储结构
    内容:存放位置和存储结构
    指标:存取时间、存储空间利用率、维护代价

    7.6 数据库的实施与维护(略)

    第8章 数据库编程

    8.1 嵌入式SQL

    1、处理过程
    含嵌入式SQL主语言程序->预处理,将嵌入式SQL翻译为主语言函数调用->转换后的主语言程序->编译链接
    2、嵌入式SQL语句与主语言之间的通信
    数据库工作单元与源程序工作单元之间的通信包括:
    (1)向主语言传递SQL语句执行状态信息,主要使用SQL通信区;
    (2)主语言向SQL语句提供参数,主要用主变量实现;
    (3)将SQL语句的查询结果提交给主语言,主变量和游标实现。
    SQL通信区:SQL语句执行后的执行状态信息通过SQL通信区传递给主语言,主语言根据这些信息决定接下来执行的语句。
    主变量:SQL语句中使用的主语言程序变量简称为主变量,分为输入主变量和输出主变量。指示变量是主变量附带的一个整型变量,指示输入主变量是否为空,检测输出主变量是否为空。
    游标:游标是系统为用户开设的一个数据缓冲区,存放SQL语句执行的结果,每个游标区都有一个名字,用户通过游标逐一获取记录并赋给主变量。
    程序实例

    EXEC SQL BEGIN DECLARE SECTION;/*主变量说明开始*/
    	char deptname[20];
    	char hsno[9];
    	char hsname[20];
    	char hssex[2];
    	int HSage;
    	int NEWAGE;
    EXEC SQL END DECLARE SECTION;/*主变量说明结束*/
    long SQLCODE;
    EXEC SQL INCLUDE SQLCODE;/*定义SQL通信区*/
    int main(void){/*C语言主程序开始*/
    	int count = 0;
    	char yn;
    	printf("Please choose the department name(cs/ma/is):");
    	scanf("%s",&deptname);
    	EXEC SQL CONNECT TO TEST@localhost:54321 USER "SYSTEM"/"MANAGER";/*连接数据库TEST*/
    	EXEC SQL DECLARE SX CURSOR FOR/*定义游标SX*/
    		SELECT Sno,Sname,Ssex,Sage
    		FROM Student
    		WHERE Sdept=:deptname;/*SX对应的语句*/
    	EXEC SQL OPEN SX;/*开启游标,指向查询结果的第一行*/
    	while(1){/*逐行处理查询的结果*/
    		EXEC SQL FETCH SX INTO:HSno,:HSname,:HSsex,:HSage;/*推进游标,将当前结果放入主变量*/
    		if(SQLCA.SQLCODE!=0) break;/*SQLCODE记录操作状态,成功或失败*/
    		if(count++==0)
    			printf("\n%-10s %-20s %-10s %-10s\n","Sno","Sname","Ssex","Sage");/*打印表头*/
    		printf("%-10s %-20s %-10s %-10d\n",HSno,HSname,HSsex,HSage);/*输出结果*/
    		printf("UPDATE AGE(y/n)?");
    		do{
    			scanf("%c",&yn);
    		}while(yn!='N'&&yn!='n'&&yn!='Y'&&yn!='y');
    		if(yn=='Y'||yn=='y'){
    			printf("INPUT NEW AGE:");
    			scanf("%d",&NEWAGE);/*输入新年龄到主变量中*/
    			EXEC SQL UPDATE Student/*SQL更新语句*/
    				SET Sage=:NEWAGE
    				WHERE CURRENT OF SX;/*对当前游标指向的学生进行更新*/
    		}
    	}
    	EXEC SQL CLOSE SX;/*关闭游标,不再与查询结果对应*/
    	EXEC SQL COMMIT WORK;/*提交更新*/
    	EXEC SQL DISCONNECT TEST;/*断开数据库连接*/
    	return 0;
    }
    

    3、不用游标的SQL语句(略)
    4、使用游标的SQL语句(略)
    5、动态SQL|(略)

    8.2 过程化SQL

    1、过程化SQL的块结构

    DECLARE /*定义的变量、常量只能块中使用*/
    变量、常量、游标、异常等
    BEGIN
    	SQL语句、PL/SQL语句
    EXCEPTION
    	异常处理部分
    END;
    

    2、变量和常量的定义

    变量名 数据类型 [[NOT NULL]:=初值表达式]/*定义变量*/
    变量名 数据类型 [[NOT NULL] 初值表达式]/*定义变量*/
    常量名 数据类型 CONSTANT:=常量表达式/*定义常量*/
    变量名:=表达式/*赋值*/
    

    3、流程控制

    IF condition THEN
    	statements;
    END IF
    
    IF condition THEN
    	statements1;
    ELSE
    	statements2;
    END IF;
    
    LOOP
    	statements;/*使用EXIT、BREAK或LEAVE退出循环*/
    END LOOP;
    
    WHILE condition LOOP
    	statements;
    END LOOP;
    
    FOR count IN [REVERSE] lower_bound .. upper_bound LOOP
    	statements
    END LOOP;
    

    8.3 存储过程和函数

    1、存储过程
    存储过程的优点:编译运行效率高、降低C/S之间通信量、集中控制方便维护
    存储过程的用户接口:
    (1)创建存储过程

    CREATE OR REPLACE PROCEDURE 过程名([参数1, 参数2, ...])
    AS 过程化SQL

    注解:ROLLBACK表示回滚事务
    (2)执行存储过程

    CALL/PERFORM PROCEDURE 过程名([参数1, 参数2, ...]);
    

    (3)修改存储过程

    ALTER PROCEDURE 过程名1 RENAME TO 过程名2;/*重命名*/
    ALTER PROCEDURE 过程名 COMPILE;
    

    (4)删除存储过程

    DROP PROCEDURE 过程名();
    

    2、函数
    (1)函数的定义语句格式

    CREATE OR REPLACE FUNCTION 函数名([参数1, 参数2, ...]) RETURNS 类型
    AS 过程化SQL

    (2)函数的执行语句格式

    CALL/SELECT 函数名([参数1, 参数2, ...]);
    

    (3)修改函数

    ALTER FUNCTION 函数名1 RENAME 函数名2;
    ALTER FUNCTION 函数名 COMPILE;
    

    3、过程化SQL中的游标
    当查询返回多条记录时,使用游标对结果集进行处理。一个游标与一个SQL语句相关联。在存储过程中可以定义普通游标、REFCURSOR类型游标、带参数的游标等。

    CREATE OR REPLACE PROCEDURE proc_cursor() AS
    DECLARE
    	cno CHAR(3);
    	cname CHAR(8);
    	CURSOR mycursor(leaderno CHAR(3)) FOR
    		SELECT lno,lname FROM leader WHERE Lno=leaderno;
    BEGIN
    	OPEN mycursor('L01');
    	FETCH mycursor INTO cno,cname;
    	INSERT INTO temp(lno,lname) VALUES(cno,cname);
    	CLOSE mycursor;
    	OPEN mycursor('L02');
    	FETCH mycursor INTO cno,cname;
    	INSERT INTO cno,cname;
    	INSERT INTO temp(lno,lname) VALUES(cno,cname);
    	CLOSE mycursor;
    END
    

    8.4 ODBC编程(略)

    8.5 OLE DB(略)

    8.6 JDBC编程(略)

    第9章 关系查询处理和查询优化

    查询优化一般可分为代数优化(逻辑优化)和物理优化(非代数优化)

    9.1 关系数据库系统的查询处理

    1、查询处理步骤
    查询处理步骤:查询分析、查询检查、查询优化、查询执行
    查询分析:语句扫描、词法分析、语法分析
    查询检查:语义检查、视图消解、存取权限检查、转换成等价的关系代数并构建语法分析树
    查询优化:代数优化和物理优化
    查询执行:生成查询执行计划、由代码生成器执行查询计划并返回查询结果
    2、实现查询优化的算法举例
    (1)选择操作的实现
    简单全表扫描算法
    索引扫描算法
    (2)连接操作实现
    嵌套循环算法:类似于二重循环
    排序合并算法:先排序再查找。常用于等值连接。
    索引连接算法:通过索引查找元组然后连接
    hash join算法:第一步,划分阶段,对包含元组较少的表进行散列;第二步,试探阶段,对另一个表用相同的散列函数进行处理,把hash值相同的元组进行匹配。处理等值连接。

    9.2 关系数据库系统的查询优化

    1、查询优化概述
    查询优化的优点是用户不再需要考虑如何表达查询可以达到最高的效率。
    总代价=I/O代价+CPU代价+内存代价+通信代价
    2、一个实例
    题目:求选取了2号课程的学生姓名
    SQL表达:

    SELECT Student.Sname
    FROM Student,SC
    WHERE Student.Sno=SC.Sno AND SC.Cno='2';
    

    关系代数表达:
    Q1SnameStudent.Sno=SC.Sno∧SC.Cno=‘2’(Student×SC))
    Q2SnameSC.Cno=‘2’(Student⋈SC))
    Q3Sname(Student⋈σSC.Cno=‘2’(SC))
    查询效率分析:
    假设学生-课程表数据库中有1000个学生记录,10000个选课记录,其中选修2号课程的选课记录为50个。一个块能够装10个Student元组或100个SC元组,在内存中存放5块Student元组和1块SC元组,每块能装连接后的元组10块。
    (1)第一种情况:
    计算广义笛卡尔积:读取1000/10+1000/(10*5)*10000/100=2100块,连接后元组107个写出106块。
    选择操作:读入106块。
    投影操作:把上一步结果投影输出即可。
    总读写数据块=2100+106+106
    (2)第二种情况:
    计算自然连接:读取1000/10+1000/(10*5)*10000/100=2100块,连接后元组104个写出103块。
    选择操作:读入103块。
    投影操作:把上一步结果投影输出即可。
    总读写数据块=2100+103+103
    (3)第三种情况:
    选择操作:读取一遍SC表,共计100块;满足条件的块只有50个不必写入中间文件。
    连接操作:读取Student表,共计100块,把读入的元组和内存中的SC元组作连接。
    投影操作:把上一步结果投影输出即可。
    总读写数据块=100+100=200

    9.3 代数优化

    1、关系代数表达式等价变换规则
    连接、笛卡尔积交换律与结合律、投影与选择串接定律、选择与投影可以交换次序、选择对笛卡尔积的分配律、选择对并、差、自然连接的分配律、投影对笛卡尔积和并的分配律
    2、查询树的启发式优化
    先选择;投影与选择同步;逆用分配律减少投影次数;选择与连接的合并;找出公共子表达式。
    重在例题。

    9.4 物理优化

    物理优化的方法:基于规则的启发式优化、基于代价估算的优化、两者结合的优化
    1、基于启发式规则的存取路径选择优化
    (1)选择操作的启发式优化:
    对于小关系全表扫描
    对于大关系,启发式规则有:

    选择条件启发式规则
    主码=值主码索引
    非主属性=值索引扫描/全表扫描(估算结果>10%)
    非等值条件/范围查询索引扫描/全表扫描(估算结果>10%)
    AND连接的合取条件优先组合索引,索引扫描次之,如果选择率>10%全表扫描
    OR连接的析取条件全表扫描

    (2)连接操作的启发式规则
    已排序->排序合并算法;
    有索引->索引连接算法;
    其中一个表较小->hash join算法;
    嵌套循环算法垫底。
    2、基于代价估算的优化(略)

    9.5 查询计划的执行(略)

    第10章 数据库恢复技术

    10.1 事务的基本概念

    1、事务
    事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全都不做,是一个不可分割的工作单位。
    定义事务的语句:

    BEGIN TRANSACTION;
    COMMIT;/*提交事务的全部操作*/
    ROLLBACK;/*回滚,事务中对数据库的所有已完成操作全部撤销*/
    

    2、事务的ACID特性
    (1)原子性:事务中的操作要么都做要么都不做。
    (2)一致性:事务执行是一致性状态的切换,事务中断会造成不一致。
    (3)隔离性:事务与事务相互独立。
    (4)持续性:一经提交永久改变。

    10.2 数据库恢复概述

    数据库的恢复:把数据库从错误状态恢复到一致性状态的过程

    10.3 故障的种类

    1、故障的种类
    (1)事务内部故障:非预期不可控,撤销(UNDO)处理。
    (2)系统故障(软故障):造成系统停摆需要重启的事件,不破坏数据库但会丢失内存中数据,重做(REDO)处理。
    (3)介质故障(硬故障):存储介质故障,破坏数据库,仅能通过备份恢复。
    (4)计算机病毒:人为破坏,需要信息安全技术支持。
    2、恢复的基本原理:冗余

    10.4 恢复的实现技术

    建立冗余的技术:数据转储、登记日志文件
    1、数据转储:定期将数据库拷贝到后备副本,数据库被破坏后可将数据库恢复到转储时的状态。静态转储在无事务时进行,只拷贝不修改;动态转储期间允许对数据库的修改,需要日志文件。海量转储指每次都全部转储数据库,增量转储指只转储更新的部分。
    2、登记日志文件
    日志文件的格式与内容:登记内容包括事务的开始、结束和所有更新操作;记录内容包括事务标识、操作类型、操作对象、旧值和新值。
    日志文件的作用:事务和系统故障恢复的依据,动态转储必须建立日志文件以便结合后备副本恢复数据库,静态转储中可创建日志文件以提高恢复效率。
    登记日志文件二原则:严格时间顺序、先写日志后写数据库

    10.5 恢复策略

    1、事务故障的恢复:反向扫描+逆操作
    2、系统故障的恢复:正向扫描,已写的重做,未写的撤销
    3、介质故障的恢复:重装数据库、重做完成的事务,DBA介入

    10.6 具有检查点的恢复技术

    周期性设置检查点保存数据库状态,恢复时扫描日志到检查点为止。

    10.7数据库镜像(略)

    第11章 并发控制

    事务执行方式:串行执行、交叉并发、同时并发

    11.1 并发控制概述

    并发操作的不一致性:丢失修改、不可重复读、读脏数据。
    在这里插入图片描述
    并发控制的主要技术:封锁、时间戳、乐观控制法、多版本并发控制

    11.2 封锁

    封锁类型:排他锁(写锁,X锁)、共享锁(读锁、S锁)。

    XS-
    XNNY
    SNYY
    -YYY
    Y=Yes,表示相容,N=No,表示不相容

    11.3 封锁协议

    一级封锁协议:加X锁——修改——事务结束——释放X锁
    二级封锁协议:加S锁——读取——读取结束——释放S锁
    三级封锁协议:加S锁——读取——事务结束——释放S锁

    在这里插入图片描述

    11.4 活锁和死锁

    1、活锁:事务总是处于等待状态,采用先来先服务策略避免活锁
    2、死锁:互斥、请求与保持、不可剥夺、循环等待
    (1)死锁的预防:一次封锁、顺序封锁
    (2)死锁的诊断与解除:超时法、等待图法

    11.5 并发调度的可串行性

    1、可串行化调度
    可串行化调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务的结果相同,称这种调度策略为可串行化调度。可串行性是并发事务正调度的准则。
    2、冲突可串行化调度
    冲突操作:不同的事务对同一个数据的读-写操作和写-写操作。
    冲突可串行化调度:一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称Sc为冲突可串行化的调度。
    判断可串行化调度的充分条件:若一个调度是冲突可串行化,则一定是可串行化的调度。

    11.6 两段锁协议

    两段锁协议:读写操作先加锁、释放后不再加锁
    “两段锁”的含义:扩展阶段获得封锁,收缩阶段释放封锁
    若并发事务都遵守2PL协议,则对这些事务的任何并发调度策略都是可串行化的。

    11.7 封锁的粒度

    1、多粒度封锁
    封锁的粒度就是封锁对象的大小,封锁粒度与系统并发度和并发控制的开销密切相关。
    多粒度封锁:一个系统同时支持多种粒度的封锁。
    多粒度树:
    在这里插入图片描述
    多粒度封锁协议:允许每个节点独立加锁,对节点加锁意味着该节点子树节点加同类锁。显示封锁,直接加到数据对象上的锁,隐式封锁,因为父节点加锁而被加锁。检查封锁冲突时既要向上检查,又要向下检查。有了意向锁就无需向下检查。
    2、意向锁
    意向锁:节点加意向锁,说明下层节点正在被加锁;任一节点加锁必须给它的上层节点加锁。
    三种常用意向锁:意向共享锁(IS锁)、意向排他锁(IX锁)、共享意向排他锁(SIX)。
    节点加IS锁表示后裔节点拟加S锁,节点加IX锁表示后裔节点拟加X锁,节点加SIX锁表示对它加S锁再加IX锁。
    在这里插入图片描述

    11.8 其他并发控制机制(略)

    展开全文
  • 半导体物理·笔记之④晶体中原子的电子状态——能带 QQ:3020889729 小蔡仅有两个原子的情况下的电子状态(能带的形成)当两原子相距很远的情况下当两原子相互逐渐靠近的情况下N个原子的电子...
  • \(\def\vec#1{\boldsymbol{#1}}\) \(\def\t#1{\text{#1}}\) \(\def\bra#1{\langle#1|}\) \(\def\ket#1{|#1\rangle}\) \(\...参考了《原子结构理论》(黄时中), 《高等量子力学》(喀兴林), 《物理学中的群论》(Joshi),...
  • MySQL 8.0开始支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将与DDL操作关联的数据字典更新,存储引擎操作和二进制日志写入组合到单个原子事务中。即使服务器在操作期间暂停,也会提交事务,并...
  • 有序性 什么是有序性 我们再回到物理机,其实除了增加高速缓存之外,为了使 CPU 内部的运算单元能尽量被充分利用,CPU 可能会对输入代码进行乱序执行优化,CPU 会在计算之后将乱序执行的结果重组,保证该结果与顺序...
  • gkvdb Go语言开发的基于的高级高可用键值事务数据库。gkvdb是开源的,免费的,基于MIT协议进行分发,开源项目地址(gitee)与github仓库保持实时同步): Gitee ( ), Github ( )。 特色 基于纯Go语言实现,...
  • 能控制原子的“机器”: 科技发展越来越快,强人工智能终究会出现,机器会具有自我进化的能力,而且机器的进化速度将会非常的快, 在很短的时间内,机器智商进化到人类的10^n倍......有一天,这个机器能轻松控制...
  •  中性原子获取过程: 只有离子才能加速,因此采用离子源(氘)。离子加速后进入中性气体室,变为中性。少数没有变为中性的经过偏转体进入离子吸食器。变为中性的进入等离子体装置。注入到等离子体中的中性原子不...
  • 由于这项工作是通过一条语句执行的,因此 DBCC DBREINDEX 自动成为原子性的,而单个 DROP INDEX 和 CREATE INDEX 语句则必须包含在事务中才能成为原子性的。 此外,DBCC DBREINDEX 提供了比单个 DROP INDEX 和 ...
  • 文章目录一、概念二、背景2.1 高速缓存2.1 缓存一致性2.3 乱序执行2.4 引入Java内存模型三、Java内存模型3.1 主内存与工作内存3.2 内存间交互操作3.2.1 8种操作3.2.2 执行规则3.3 多线程三大特征3.3.1 原子性...
  • 1. 索引重建和重组有什么用? 当修改表(UPDATE、INSERT、DELETE等)中数据,数据库引擎自动维护索引的数据和结构。但是随着修改次数的累积,可能会现: 索引中记录的数据顺序(逻辑顺序)和数据的实际顺序不一致(物理...
  • IP碎片重组(2)

    千次阅读 2014-08-07 11:20:22
    网络数据接收过程分析(四)---IP碎片重组(2) (2008-09-19 14:31:39) 转载▼ 标签: linux 内核 网络内核分析 网络内核实现 杂谈 分类:linux内核网络实现(数据接收) ip_defrag函数 ...
  • 研究了不同表面活性剂(曲通-X-100、Tween-80、十六烷基三甲基溴化胺(CTAB)、十二烷基硫酸钠(SDS))和有机试剂(丙酮、异丙醇、乙醇)对苯丙氨酸解氨酶重组大肠杆菌细胞通透性的影响。结果表明曲通-X-100、Tween-80、 ...
  • volatile的内存模型: [url]...volitile与原子类atomic区别: [url]http://blog.csdn.net/jurson99/article/details/53406849[/url] atomic保证类原子性,volitile保证多个线程可...
  • 2019年1月6日,由阿里巴巴集团发起、阿里研究院主办的第四届新经济智库...阿里研究院在会上发布《解构与重组:开启智能经济》报告。 2018年前后,是两个重要时段的转换期。任何一轮大的技术革命,都将历经约20-30年...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,879
精华内容 1,551
关键字:

原子重组