• 数据库系统概论前七章习题解析 第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,不会发生更新异常。

     

    展开全文
  • Oracle数据库学习(一)--数据库原理及SQL标签: oracle 数据库 数据库原理 sql2016年03月22日 22:59:543089人阅读 评论(0) 收藏 举报 分类:数据库(6) 版权声明:本博客内容多为学习和工作笔记,有用的...
     

    Oracle数据库学习(一)--数据库原理及SQL

    标签: oracle 数据库 数据库原理 sql
    3089人阅读 评论(0) 收藏 举报
     分类:
    数据库(6) 

    目录(?)[+]

    1. 数据库原理

    1.1. 数据库简介

    1.1.1. 文件存储

    对数据的存储需求一直存在。保存数据的方式,经历了手工管理、文件管理等阶段,直至数据库管理阶段。

    文件存储方式保存数据的弊端:

    • 缺乏对数据的整体管理,数据不便修改;
    • 不利于数据分析和共享;
    • 数据量急剧增长,大量数据不可能长期保存在文件中。

    数据库应运而生,是人们存放数据、访问数据、操作数据的存储仓库。

    1.1.2. DB和DBMS

    数据库(Database,简称DB)是按照数据结构来组织、存储和管理数据的仓库。

    数据库管理系统(Database Management System,简称DBMS):管理数据库的软件。

    数据库建立了数据之间的联系,使用结构化的方式组织和处理数据,能够统一、集中及独立的管理数据,使数据的存取独立于使用数据的程序,实现了数据共享。

    数据库的典型特征包括:数据的结构化,数据间的共享,减少数据的冗余度,以及数据的独立性。

    数据库成为数据的知识仓库,并对这些数据的存储、访问、安全、数据一致性、并发操作及备份恢复负责。

    图-1 DB和DBMS

    1.1.3. 关系数据库简介

    关系是一个数学概念,描述两个元素间的关联或对应关系。所以关系型数据库,即是使用关系模型把数据组织到数据表(Table)中。现实世界可以用数据来描述。

    主流数据库产品:

    • Oracle(Oracle)
    • DB2(IBM)
    • SQL Server(MS)
    • MySQL(Oracle)

    1.1.4. 表的概念

    在关系数据库中,数据被存放于二维数据表(Table)中。

    一个关系数据库由多个数据表组成,数据表是关系数据库的基本存储结构,由行和列组成,行(Row)也就是横排数据,也经常被称作记录(Record),列(Column)就是纵列数据,也被称作字段(Field)。表和表之间是存在关联关系的。

    1.2. 主流关系型数据库

    1.2.1. Oracle数据库概述

    Oracle是当今著名的Oracle(甲骨文)公司的数据库产品,它是世界上第一个商品化的关系型数据库管理系统,也是第一个推出和数据库结合的第四代语言开发工具的数据库产品。

    Oracle采用标准的SQL结构化查询语言,支持多种数据类型,提供面向对象的数据支持,具有第四代语言开发工具,支持UNIX、WINDOWS、OS/2等多种平台。Oracle公司的软件产品丰富,包括Oracle服务器产品,Oracle开发工具和Oracle应用软件。其中最著名的就是Oracle数据库,目前最新的版本是Oracle 12c。

    1.2.2. DB2数据库概述

    DB2是IBM的关系型数据库管理系统,DB2有很多不同的版本,可以运行在从掌上产品到大型机不同的终端机器上。DB2 Universal Database Personal Edition和DB2 Universal Database Workgroup Edition分别是为OS/2和Windows系统的单用户和多用户提供的数据库管理系统。

    DB2在高端数据库的主要竞争对手是Oracle。

    1.2.3. Sybase数据库

    Sybase是美国Sybase公司研制的一种关系型数据库系统,是较早采用C/S技术的数据库厂商,是一种典型的UNIX或Windows NT平台上客户机/服务器环境下的大型数据库系统。 Sybase通常与Sybase SQL Anywhere用于客户机/服务器环境,前者作为服务器数据库,后者为客户机数据库,采用该公司研制的PowerBuilder为开发工具,在国内大中型系统中具有广泛的应用。

    SYBASE主要有三种版本,一是UNIX操作系统下运行的版本,二是Novell Netware环境下运行的版本,三是Windows NT环境下运行的版本。对UNIX操作系统目前广泛应用的为SYBASE 10 及SYABSE 11 for SCO UNIX。

    2010年Sybase被SAP收购。

    1.2.4. SQL Server数据库概述

    Microsoft SQL Server是运行在Windows NT服务器上,支持C/S结构的数据库管理系统。它采用标准SQL语言,微软公司对它进行了部分扩充而成为事务SQL(Transact-SQL)。

    SQL Server最早是微软为了要和IBM竞争时,与Sybase合作所产生的,其最早的发展者是Sybase,和Sybase数据库完全兼容。在与Sybase终止合作关系后,微软自主开发出SQL Server 6.0版,往后的SQL Server即均由微软自行研发。最新的版本是SQL Server 2012,上一版本是2008。

    Microsoft SQL Server几个初始版本适用于中小企业的数据库管理,但是后来它的应用范围有所扩展,已经触及到大型、跨国企业的数据库管理。

    1.2.5. MySQL数据库概述

    MySQL是一个开放源码的小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。

    与其它的大型数据库例如Oracle、IBM DB2等相比,MySQL自有它的不足之处,如规模小、功能有限等,但对于一般个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

    2008年1月16日,Sun正式收购MySQL。2009年4月20日,SUN被Oracle公司收购。目前的最新版本是MySQL5.6.

    1.3. SQL概述

    1.3.1. 结构化查询语言

    SQL(Structured Query Language) 是结构化查询语言的缩写。

    SQL是在关系数据库上执行数据操作、检索及维护所使用的标准语言,可以用来查询数据,操纵数据,定义数据,控制数据,所有数据库都使用相同或者相似的语言。

    SQL可分为:

    • 数据定义语言(DDL) : Data Definition Language
    • 数据操纵语言(DML) : Data Manipulation Language
    • 事务控制语言(TCL):Transaction Control Language)
    • 数据查询语言(DQL):Data Query Language
    • 数据控制语言(DCL) : Data Control Language

    执行SQL语句时,用户只需要知道其逻辑含义,而不需要知道SQL语句的具体执行步骤。

    1.3.2. 数据定义语言(DDL)

    用于建立、修改、删除数据库对象,包括创建语句(CREATE)、修改语句(ALTER)、删除语句(DROP),比如使用CREATE TABLE创建表,使用ALTER TABLE修改表,使用DROPTABLE删除表等动作。这类语言不需要事务的参与,自动提交。

    1.3.3. 数据操作语言(DML)

    用于改变数据库数据,包括INSERT、UPDATE、DELETE三条语句。其中,INSERT语句用于将数据插入到数据库中,UPDATE语句用于更新数据库中已存在的数据,DELETE用于删除数据库中已存在的数据。DML语言和事务是相关的,执行完DML操作后必须经过事务控制语句提交后才真正的将改变应用到数据库中。

    1.3.4. 事务控制语言(TCL)

    用来维护数据一致性的语句,包括提交(COMMIT)、回滚(ROLLBACK)、保存点(SAVEPOINT)三条语句,其中COMMIT用来确认已经进行的数据库改变, ROLLBACK语句用来取消已经进行的数据库改变,当执行DML操作后(也就是上面说的增加、修改、删除等动作),可以使用COMMIT语句来确认这种改变,或者使用ROLLBACK取消这种改变。SAVEPOINT语句用来设置保存点,使当前的事务可以回退到指定的保存点,便于取消部分改变。

    1.3.5. 数据查询语言(DQL)

    用来查询所需要的数据。使用最广泛,语法灵活复杂。

    1.3.6. 数据控制语言(DCL)

    用于执行权限的授予和收回操作、创建用户等,包括授予(GRANT)语句,收回(REVOKE)语句,CREATE USER语句,其中GRANT用于给用户或角色授予权限, REVOKE用于收回用户或角色已有的权限。DCL语句也不需要事务的参与,是自动提交的。

    1.4. Oracle数据库安装和访问

    1.4.1. Oracle数据库安装(Windows)

    打开Oracle首页http://www.oracle.com/,通过Downloads进入Oracle数据库的下载页面。

    安装过程(以本地安装为例):

    步骤1:解压,双击setup.exe,启动安装向导;

    图-2 Oracle数据库的安装页面

    在此步骤的设置如下:

    • 选择基本安装,指定要安装的Oracle数据库的基位置和主目录位置;
    • 安装类型为企业版;
    • 创建启动数据库(在安装数据库软件同时创建数据库,也可以在安装完毕后单独创建,此处选择默认值同时创建);
    • 指定全局数据库名称为orcl,以及口令,需要记住自己的密码,这里设置为oracle。

    然后点击“下一步”按钮,

    步骤2:进入检查安装环境的步骤,用来检查软硬件环境是否符合Oracle11g的安装要求,如图-3。如果满足安装要求,点击“下一步”按钮。

    图-3 Oracle数据库的安装环境检查

    步骤3:检查通过后,进入安装概要页面,如图-4。在这步可以检查之前的设置,包括安装类型和要安装的组件,如果有问题,点击“上一步”按钮回去修改,如果确认没问题,点击“安装”按钮,进入安装阶段。

    图-4 Oracle数据库的安装概要

    步骤4:提示正在安装。根据机器的软硬件配置不同,这个步骤可能耗费不同的时间。图略。

    步骤5:进入配置助手步骤,这个过程不需要用户干涉。图略。

    步骤6:创建数据库,图略。

    步骤7:数据库创建完成后,提示配置助手界面,显示数据库的初始信息。图略。

    在此步骤中可以点击“口令管理”按钮进行数据库初始用户的口令管理,这个步骤此时可以忽略,待安装完成后再进行口令管理。完成后,点击“确定”按钮离开口令管理界面。

    步骤8:弹出安装成功窗口,图略。

    步骤9:在安装成功界面上点击“下一步”按钮,提示安装结束。如图-5。

    图-5 Oracle数据库安装结束

    1.4.2. Oracle数据库安装(Linux)

    在Oracle官网下载所需的软件包,检查软硬件环境是否符合要求,规划空间和目录结构,安装数据库并创建配置。

    安装过程略。

    1.4.3. 远程登录数据库服务器

    Oracle数据库作为市场以及技术上领先的数据库产品,提供了丰富和简单易用的数据库开发和管理工具。有两种主要工具,一是命令行工具,Oracle自带的SQL*PLUS,二是Oracle提供的图形界面工具:SQL Developer。

    这些工具可能和数据库在同一台服务器上,也可能安装在另一台机器中。

    图-6 数据库和客户端

    1.4.4. 使用SQL*PLUS

    SQL*Plus是Oracle数据库提供的和数据库进行交互的工具,是被系统管理员和开发人员广泛使用的开发和管理工具,功能强大,使用简单,可以运行在任何Oracle运行的平台上,默认和数据库一起安装。SQL*Plus是一个基于传统的C/S结构的SQL开发工具,客户端和服务器端可以在同一台主机或不同主机上。

    在图-6中,我们主要使用最上面那种访问方式。

    首先,远程登录到数据库所在的机器上,输入远程机器操作系统的帐号和密码:

    图-7 远程登录数据库服务器

    然后在%提示符下,输入SQLPlus命令,并输入数据库的帐号和密码:

    图-8 运行sqlplus,登录数据库

    如果出现SQL提示符,则表示登录成功:

    图-9登录数据库成功

    退出时,在SQL>后输入exit即可:

    图-10退出SQL*Plus

    再输入exit,即退出远程服务器。

    1.4.5. 使用Oracle SQL Developer

    Oracle SQL Developer是Oracle官方出品的免费图形化开发工具,相对SQL*Plus来说,图形化的界面便于操作,不必记忆大量的命令,输出结果美观。它的基本功能包括结果的格式化输出,编辑器自动提示,代码美化,显示SQL的执行计划,监控会话,编写以及调试存储过程等。官方和免费两个特征让这个工具极具吸引力。

    SQL Developer工具的主界面,如图-11所示。

    图-11SQL Developer打开后的界面

    第一次进入SQL Developer,需要设置连接参数。首先在窗口左边的Connection上按右键,开启一个新的连接,输入远程数据库的参数,界面如图-12。

    图-12在SQL Developer中设置连接用户信息

    成功建立了连接之后,在连接上按右键点击Connect,将打开对应用户方案中的数据库对象。如图-13。

    图-13在SQL Developer中打开用户scott

    在这个界面中,即可操作SQL语句了。

    2. SQL(DDL、DML)

    2.1. Oracle数据类型

    2.1.1. NUMBER

    NUMBER表示数字类型,经常被定义成NUMBER(P,S)形式,其中:

    • P表示数字的总位数
    • S表示小数点后面的位数

    例如在表Emp中的Sal列的定义如下:

    1. Sal NUMBER(6,2)

    表示Sal列中的数据,整数位最大为4位,小数位最大位数是2位,也就是最大取值:9999.99。

    2.1.2. CHAR

    CHAR表示固定长度的字符类型,经常被定义成CHAR(N)形式, N表示占用的字节数,N的最大取值是2000。

    例如在表Emp中的Ename列的定义如下:

    1. Ename CHAR(20)

    表示Ename列中最多可存储20个字节的字符串,并且占用的空间是固定的20个字节。

    2.1.3. VARCHAR2

    VARCHAR2表示变长的字符类型,定义格式是VARCHAR2(N), N表示最多可占用的字节数,最大长度是4000字节。

    例如在表Emp中的JOB列的定义如下:

    1. JOB VARCHAR2(100)

    表示JOB列中最多可存储长度为100个字节的字符串。根据其中保存的数据长度,占用的空间是变化的,最大占用空间为100个字节。

    2.1.4. DATE

    DATE用于定义日期时间的数据,长度是7个字节,默认格式是:DD-MON-RR, 例如:“11-APR-71”。如果是中文环境,是“11-4月-71”这种形式。

    例如在表Emp中的Hiredate列的定义如下:

    1. Hiredate DATE;

    表示Hiredate列中存放的是日期数据。

    2.2. 创建表

    2.2.1. CREATE语句

    创建表的语法是:

    1. CREATE TABLE [schema.]table_name(
    2.     column_name datatype[DEFAULT expr][,]
    3. );

    创建职员表的例子:

    1. --创建表emp
    2. CREATE TABLE emp(
    3.     id NUMBER(10),
    4.     name VARCHAR2(20),
    5.     gender CHAR(1),
    6.     birth DATE,
    7.     salary NUMBER(6,2),
    8.     job VARCHAR2(30),
    9.     deptid NUMBER(2)
    10. );

    2.2.2. DESC语句

    DESC是查看表的数据结构,语法是:

    1. DESC table_name;

    查看emp表的结构,将会得到的结果如图-14所示:

    图-14查看数据表的结构

    2.2.3. DEFAULT

    可以通过DEFAULT子句给列指定默认值,例如,在emp表中给gender列赋默认值‘M’,如果插入数据时没有指定性别的员工,则默认是男性。

    创建表emp1:

    1. CREATE TABLE emp1(
    2.     id NUMBER(10),
    3.     name VARCHAR2(20),
    4.     gender CHAR(1) DEFAULT ‘M’,
    5.     birth DATE,
    6.     salary NUMBER(6,2),
    7.     job VARCHAR2(30),
    8.     deptid NUMBER(2)
    9. );

    2.2.4. NOT NULL

    默认情况下,任何列都允许有空值。非空(Not Null)是一种约束条件,用于确保字段值不为空,当某个字段被设置了非空约束条件,这个字段中必须存在有效值,也就是说,当执行插入数据的操作时,必须提供这个列的数据,当执行更新操作时,不能给这个列的值设置为NULL。

    创建表emp2,设置name字段为非空,也即是表emp2中的每条记录,name列都必须有值。

    1. CREATE TABLE emp2(
    2.     id NUMBER(10),
    3.     name VARCHAR2(20) NOT NULL,
    4.     gender CHAR(1),
    5.     birth DATE,
    6.     salary NUMBER(6,2),
    7.     job VARCHAR2(30),
    8.     deptid NUMBER(2)
    9. );

    2.3. 修改表

    2.3.1. 修改表名

    在建表后如果希望修改表名,可以使用RENAME语句实现,语法如下,将改变表名old_name为new_name:

    1. RENAME old_name TO new_name;

    举例说明,如果要将表名emp修改为employee,使用如下语法:

    1. RENAME emp TO employee;

    2.3.2. 增加列

    在建表之后,要给表增加列可以使用ALTER TABLE的ADD子句实现。语法如下:

    1. ALTER TABLE table_name ADD
    2. (column datatype [DEFAULT expr] [, column datatype…])

    注意一点,列只能增加在最后,不能插入到现有的列中。下例给表employee增加一列hiredate,并设置默认值为当前日期。

    1. ALTER TABLE employee ADD (hiredate DATE DEFAULT sysdate);

    2.3.3. 删除列

    在建表之后,使用ALTER TABLE的DROP子句删除不需要的列。语法如下:

    1.     ALTER TABLE table_name DROP (column);

    删除字段需要从每行中删掉该字段占据的长度和数据,并释放在数据块中占据的空间,如果表记录比较大,删除字段可能需要比较长的时间。

    下例删除表employee的列hiredate:

    1. ALTER TABLE employee DROP (hiredate);

    2.3.4. 修改列

    建表之后,可以改变表中列的数据类型、长度和默认值,注意这种修改仅对以后插入的数据有效,另外如果表中已经有数据的情况下,把长度由大改小,有可能不成功,比如原来的类型是VARCHAR2(100),其中已经存放了100个字节长度的数据,如果要改为VARCHAR2(80),则不会修改成功。

    语法如下:

    1. ALTER TABLE table_name MODIFY
    2. (column datatype [DEFAULT expr] [, column datatype…])

    下例修改表employee的列job,并增加默认值的设置:

    1. ALTER TABLE employee
    2. MODIFY(job VARCHAR2(40) DEFAULT 'CLERK' );

    2.4. DML语句

    在做后续练习之前,先熟悉本部分使用的样例表emp和dept的结构和数据:

    1. DROP TABLE dept;
    2. CREATE TABLE dept
    3. (deptno NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
    4.     dname VARCHAR2(14) ,
    5.     loc VARCHAR2(13) ) ;
    6. DROP TABLE emp;
    7. CREATE TABLE emp
    8. (empno NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
    9.     ename VARCHAR2(10),
    10.     job VARCHAR2(15),
    11.     mgr NUMBER(4),
    12.     hiredate DATE,
    13.     sal NUMBER(7,2),
    14.     comm NUMBER(7,2),
    15.     deptno NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
    16. INSERT INTO dept VALUES
    17.     (10,'ACCOUNTING','NEW YORK');
    18. INSERT INTO dept VALUES
    19. (20,'RESEARCH','DALLAS');
    20. INSERT INTO dept VALUES
    21.     (30,'SALES','CHICAGO');
    22. INSERT INTO dept VALUES
    23.     (40,'OPERATIONS','BOSTON');
    24. SELECT * FROM dept;
    25. INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
    26. INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
    27. INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
    28. INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
    29. INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
    30. INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
    31. INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
    32. INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,to_date('19-4-87','dd-mm-yyyy'),3000,NULL,20);
    33. INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
    34. INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
    35. INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,to_date('23-5-87','dd-mm-yyyy'),1100,NULL,20);
    36. INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
    37. INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
    38. INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);

    2.4.1. INSERT语句

    INSERT语句用来给数据表增加记录,每次增加一条记录。语法如下:

    1. INSERT INTO table_name[(column[, column…])]
    2. VALUES(value[, value…]);

    需要注意的一点,所有的DML操作,都需要再执行事务提交语句commit,才算真正确认了此操作。

    向employee表插入一条记录的例子如下:

    1. INSERT INTO employee(id, name, job, salary)
    2. VALUES(1001, 'rose', 'PROGRAMMER', 5500);

    Oracle中的日期数据比较特殊,如果插入的列有日期字段,需要考虑日期的格式。Oracle的默认的日期格式‘DD-MON-RR,你或者按照默认格式插入数据,或者自定义日期格式,用TO_DATE函数转换为日期类型的数据。

    1. --使用默认日期格式插入记录
    2. INSERT INTO employee(id, name, job,birth)
    3. VALUES(1002, 'martha', 'ANALYST', '01-9月-89');
    4. --使用自定义日期格式插入记录
    5. INSERT INTO employee(id, name, job, birth)
    6. VALUES(1003, 'donna', 'MANAGER',
    7. TO_DATE('1978-09-01', 'YYYY-MM-DD'));

    2.4.2. UPDATE语句

    UPDATE语句用来更新表中的记录,语法如下:

    1. UPDATE table_name
    2. SET column = value [, column = value]
    3. [WHERE condition];

    其中WHERE子句是可选的,但是如果没有WHERE子句,则全表的数据都会被更新,务必小心。

    下例更改职员ROSE的薪水为8500:

    1. UPDATE employee SET salary = 8500 WHERE name = 'ROSE';

    2.4.3. DELETE语句

    DELETE语句用来删除表中的记录,语法如下:

    1. DELETE [FROM] table_name [WHERE condition];

    和UPDATE语句一样,WHERE子句是可选的,但是如果没有WHERE子句,则全表的数据都会被删除,务必确认后再予以删除。

    下例将删除职位是空的员工记录:

    1. DELETE FROM employee WHERE job is null;
    • 插入代码
    • 严禁讨论涉及中国之军/政相关话题,违者会被禁言、封号!     

    Oracle数据库学习(三)--基础查询及关联查询

    1. SQL(基础查询) 1.1. 基本查询语句 1.1.1. FROM子句 SQL查询语句的语法如下: SELECT column [alias], …> FROM t...
    • qq_25409579
    • qq_25409579
    • 2016年03月22日 23:26
    • 4569

    Oracle数据库学习(一)

    • u011687186
    • u011687186
    • 2016年08月14日 21:53
    • 527
    --视图的学习 --视图是一种虚表,视图建立在已有表的基础上,视图依赖建立的这些表成为基表 --向视图提供数据内容的语句为SELECT语句,可以将视图理解为储存起来的SELECT语句, --视图向用户...

    佩服啊!PHP这么牛逼的原因是?

    为什么说2018年你必须要学php?这份学习指南给你..

    Oracle数据库学习小结(一)

    • u013058618
    • u013058618
    • 2016年05月09日 15:56
    • 1712
    今天要跟大家来聊一聊俺在使用Oracle数据库的这段时间里面学到的一些知识。   俺最近出来工作了,来到的公司是使用的Oracle数据库,之前一直使用的是SQL的数据库,在性质上二者前者是收费的,后...

    Oracle学习总结(一)——数据库安装

    • qq_16427409
    • qq_16427409
    • 2016年06月08日 11:11
    • 962
    Oracle数据库学习总结(一)——数据库安装

    oracle数据库学习

    • 2014年09月16日 14:59
    • 5KB
    • 下载

    Oracle数据库学习总结

    • ghostbear
    • ghostbear
    • 2011年04月08日 10:13
    • 4988
    Oracle数据库学习总结时间过的还真快,不知不觉中就在这里呆了半个月了。这段时间里都在学习oracle数据库的编程,毕竟这是家软件外包公司。像我们这样的新员工也就只能接触到些CURD的操作。废话不多...

    oracle数据库学习1

    • u014642153
    • u014642153
    • 2017年05月21日 12:29
    • 219
    1.orcale简介 orcale数据库默认的账户和密码:scott:tiger,hr:hr 连接orcale数据库:sqlplus scott/scott回车 修改锁定帐号:sqlplus /...

    Oracle学习——扫盲篇

    • zwk626542417
    • zwk626542417
    • 2014年09月17日 14:47
    • 7276
    关于Oracle数据库、oracle数据库实例、SID、表空间、用户、表,这些都是什么,他们之间有什么关系,它们又是如何创建的!最后关于Oracle的使用总结,首先安装oracle数据库软件、然后创建...

    Oracle数据库经典学习教程

    • 2016年04月27日 15:28
    • 2.67MB
    • 下载

    一篇不错的Oracle数据库学习笔记

    • luoyuchuan
    • luoyuchuan
    • 2012年12月09日 19:23
    • 2393
    Initialization Parameter Files           一个Oracle Instance在启动之前,他必须有一些必要的参数,这些参数称为初始化参数,这些参数...

    oracle理论学习详解及各种简单操作例子(菜鸟必备)

    1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库的工具) ...
    • zhiweianran
    • zhiweianran
    • 2012年07月27日 16:03
    • 4386

    oracle数据库基础知识学习笔记

    • u011955534
    • u011955534
    • 2013年11月04日 18:52
    • 6688
    一、SQL语言分类: 1.DDL(数据定义语言):  create(创建)    alter(修改)  drop(删除)------------主要是对表操作。   2.DML(数据操作...

    Oracle数据库学习<一>

    • u010905386
    • u010905386
    • 2015年12月08日 19:44
    • 238
    一、oracle数据库入门 1.1整数类型    number(10) Oracle 中没有专门的整数类型,因此需要使用 Number(10)来表示整形。   ...

    Oracle数据库学习小结(三)---大数据批量插入bulkcopy

    上篇文章中说到要跟大家聊聊bulkcopy这个的用法,今天我们就来了解一下这个用法。在之前我们写程序的时候如果遇到需要往数据库中插入数据你会怎么办?可能第一反应是加个循环一条一条插入呗,如果我们的数据...
    • u013058618
    • u013058618
    • 2016年05月26日 09:50
    • 4401

    Oracle数据库基础学习资料整合

    • 2009年12月24日 16:05
    • 104KB
    • 下载

    oracle数据库学习资料

    • 2012年06月19日 19:12
    • 39.58MB
    • 下载

    我的学习之路—Oracle数据库基础

    • sdqdzc
    • sdqdzc
    • 2014年05月02日 21:06
    • 2272
    1设置的密码 SCOTT 密码tiger SYSTEM 密码 manage SYS 密码 change_on_install 2 win7下64位 plsql安装 默认目录不要设成C:\Pr...

    Oracle:数据库原理

    • Jian_Sir
    • Jian_Sir
    • 2015年05月24日 00:24
    • 2404
    数据库原理 1.1. 数据库简介 1.1.1. 文件存储 对数据的存储需求一直存在。保存数据的方式,经历了手工管理、文件管理等阶段,直至数据库管理阶段。 文件存储方式保存数据的弊端: · 缺乏对数据的...

    Oracle数据库原理

    • wyzhangchengjin123
    • wyzhangchengjin123
    • 2012年09月27日 22:18
    • 2978

    oracle数据库分页查询原理与事例实现(五六种方法)

    –如何获取雇员表中薪水最高的前5人? SELECT * FROM( SELECT * FROM emp ORDER BY sal DESC) WHERE Rownum...
    • a254723077
    • a254723077
    • 2017年01月08日 22:47
    • 1639

    Oracle架构实现原理、含五大进程解析(图文详解)

    目录目录 前言 Oracle RDBMS架构图 内存结构 系统全局区SGA 高速缓存缓冲区数据库缓冲区 日志缓冲区 共享池 其他结构 进程结构 用户连接进程 用户进程User Process Serv...
    • Jmilk
    • Jmilk
    • 2016年06月04日 12:25
    • 19776

    献给初学者--学习ORACLE的第一篇故事

    学习ORACLE感触 刚接触ORACLE 数据库没多久,从网上看到一篇描写ORACLE体系知识的故事,叫《SID之家》(其实已经出来很多年了,但是忍不住还是想推广给想学ORACLE数据库的人,因为我就...
    • DreamLLOver
    • DreamLLOver
    • 2016年05月20日 14:30
    • 7742

    Oracle学习

    • wt346326775
    • wt346326775
    • 2016年07月11日 16:40
    • 245
    条件表达式 case表达式---sql99 case when 'MANAGER'  then sal+800   else sal+400 expr when comparison_exp...

    Oracle学习大全

    • zhaokejin521
    • zhaokejin521
    • 2016年05月10日 10:28
    • 1054
    --在system表空间创建用户 --其中,jinanuser是用户名 jinanuser是密码 CREATE USER jinanuser IDENTIFIED BY jinanuser; --将D...

    oracle数据库开发的一些经验积累(一)

    • yucj
    • yucj
    • 2005年03月25日 10:49
    • 1324
    1、不安装Oracle客户连接Oracle 8的方法 请将以下文件拷贝到运行文件所在目录 一、ODBC动态库 :ctl3d32.dll msvcrt40.dll odbc16gt.dll odbc32...

    从实践中学习Oracle SQL完整版

    • 2014年04月07日 21:23
    • 55.39MB
    • 下载

    orcale数据库学习2

    • u014642153
    • u014642153
    • 2017年05月21日 12:31
    • 290
    orcale数据库学习 1.orcale简介 orcale数据库默认的账户和密码:scott:tiger,hr:hr 连接orcale数据库:sqlplus scott/scott回车 修改锁...

    PL/SQL的妙用:desc命令的执行

    • funnyfu0101
    • funnyfu0101
    • 2016年08月10日 09:10
    • 5999
    PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/...

    Oracle数据库基本操作学习

    • huiguimoyu
    • huiguimoyu
    • 2015年04月07日 21:59
    • 972
    重来:

    oracle数据库 学习笔记

    • qq_39812859
    • qq_39812859
    • 2017年09月23日 13:43
    • 763
    oracle数据库 前言     oracle sql 第一章   Selecting Rows 第二章   Sorting & Limiting Selected Rows 第三章   Si...

    Oracle cursor pin S wait on X 等待事件 说明

    这个等待事件也算一个常见的等待事件。 在warehouse blog和  itpub 上有相关的2个帖子。 连接如下: cursor: pin S wait on X等待事件模拟http://ware...
    • tianlesoftware
    • tianlesoftware
    • 2011年06月16日 17:00
    • 12612

    Oracle OCP 11G 053(201-400)答案解析目录_20140304

    Oracle OCP 11G 053(201-400)答案解析目录   201 http://blog.csdn.net/rlhua/article/details/16846383...
    • rlhua
    • rlhua
    • 2013年12月23日 12:33
    • 39054

    oracle imp导入库到指定表空间

    • funnyfu0101
    • funnyfu0101
    • 2015年12月08日 15:59
    • 9900
    1.创建表空间 create tablespace example_tablespace datafile 'e:\****.dbf' size 100m reuse autoextend on...

    oracle入门很简单:一、oracle数据库的安装

    环境要求:windows xp 32位  +  oracle 10g for win32 首先下载oracle10软件,地址如下 http://download.oracle.com/otn/nt/o...
    • j958703732
    • j958703732
    • 2013年08月31日 12:45
    • 33473

    Oracle数据库监控、性能检查小工具

    • 2013年04月17日 09:51
    • 26KB
    • 下载

    Oracle11g Dataguard配置

    • gumengkai
    • gumengkai
    • 2016年11月27日 13:39
    • 2722
    ---------------------------------配置环境---------------------------------------------------------------...

    Oracle 11g RAC搭建(VMware环境)

    Oracle 11g RAC搭建(VMware环境)Oracle 11g RAC搭建VMware环境 安装环境与网络规划 安装环境 网络规划 环境配置 通过SecureCRT建立命令行连接 关闭防火墙...
    • u014595668
    • u014595668
    • 2016年04月15日 12:44
    • 23341

    Oracle OCP 11G 053(401-600)答案解析目录_20140304

    Oracle OCP 11G 053(401-600)答案解析目录   401   402   403 http://blog.csdn.net/rlhua/arti...
    • rlhua
    • rlhua
    • 2013年12月23日 12:34
    • 36133

    ORACLE EBS出现In order to access this application, you must install the J2SE Plugin version 1.6.0_07.

    在操作oracle ebs时点击供应商合并
    • lizhangyong1989
    • lizhangyong1989
    • 2014年07月02日 20:54
    • 16476

    oracle中重命名列名和表名

    • meboy88scofiled
    • meboy88scofiled
    • 2009年12月18日 20:48
    • 28574
    我们在创建表结构的过程中,可能会由于失误,造成表中列名错误,如何更改呢,你可能会回答,使用OEM或者PL/SQL,除了这两种方法,我们可以使用命令:     ALTER TABLE 表名 rename...

    oracle_plsql_编程详解

    • happy__xiaoyu
    • happy__xiaoyu
    • 2011年11月10日 11:20
    • 7458
    第一章            PL/SQL 程序设计简介   PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中...

    ORACLE常用SQL语句大全

    • ysy_java
    • ysy_java
    • 2016年12月14日 12:57
    • 5922
    一、基础1、说明:创建数据库 CREATE DATABASE database-name2、说明:删除数据库 drop database dbname3、说明:备份sql server — 创建...

    oracle 11g RAC crfclust.bdb过大的处理

    早晨收到报警邮件,磁盘空间
    • edwzhang
    • edwzhang
    • 2014年08月03日 10:28
    • 5695

    Oracle数据库学习(一)--数据库原理及SQL

    Top 数据库原理 SQL(DDL、DML) 1. 数据库原理 1.1. 数据库简介 1.1.1. 文件存储 对数据的存储需求一直存在。保存数据的方式,经历了手工管理、文件管理等阶段,直至数...
    • qq_25409579
    • qq_25409579
    • 2016年03月22日 22:59
    • 3089

    Oracle数据库经典学习教程

    • 2014年05月05日 17:25
    • 7.51MB
    • 下载

    Mysql数据库原理

    • iamxiaoguizi
    • iamxiaoguizi
    • 2016年07月24日 20:26
    • 1896
    Mysql是一个单进程的服务,对于每一个请求都是用线程来相应的。这就需要一个连接器来处理新用户的请求、相应,以及销毁。 mysql的执行流程:  1.客户端请求,服务端(连接器)开辟线程相...

    [数据库原理及应用].pdf 免费下载

    • jiongyi1
    • jiongyi1
    • 2018年02月11日 16:25
    • 384
    下载地址: [数据库原理及应用].pdf

    数据库原理----学习目标

    • cnlht
    • cnlht
    • 2015年10月20日 14:37
    • 2186
    一定要掌握:1、ER图的使用2、数据库管理系统(MySQL、MS SQL Server 、Oracle)的应用(建库、建表、查询、插入、更新、删除、建视图、触发器、存储过程、用户安全管理、完整性)3、...

    数据库原理复习笔记

    • songtitan
    • songtitan
    • 2004年11月23日 11:11
    • 1119
      Chapter 1:  Introduction        Filesystem           Database SystemData Redundancy and inconsiste...

    数据库原理SQL简述

    • the_victory
    • the_victory
    • 2015年12月20日 23:32
    • 543
    SQL语言特点1. SQL基本功能 数据定义功能:DDL(Data Definition Language)语言来实现,可用来支持定义或建立数据库对象(如表、索引、序列、视图等),定义关系数据库的模式...

    【自考总结】——数据库原理

    • u013034793
    • u013034793
    • 2015年02月07日 11:31
    • 1245
    回过头来再重新看《数据库原理》,当然会有不一样的认识,很熟悉,又不得不说对它是陌生的。对于这次失败,反思已经过去了,现在重要的是重新拾起来!...

    数据库原理期末考试题(经典题型)

    • qq_35207086
    • qq_35207086
    • 2017年06月28日 10:46
    • 333
    数据库原理期末考试题(经典题型)

    数据库原理分析(强烈推荐)

    • ptsx0607
    • ptsx0607
    • 2017年04月01日 10:29
    • 6520
    一提到关系型数据库,我禁不住想:有些东西被忽视了。关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata 。但很少有文章讲解数据库是如何工作的。你可以自己谷歌/百度...

    数据库原理学习笔记——引言

    • ymxdhh
    • ymxdhh
    • 2015年05月12日 19:58
    • 478
    最近开始学习数据库系统原理这门课程,既然是数据库系统原理,顾名思义,就是对数据进行管理操作的知识,那么什么是数据呢?          数据,我个人的直接理解就是 一系列有意义的符号,作用就是传递信...

    一周搞定期末考系列之《数据库原理及运用》

    一、单选(26分)二、填空(16分) 三、数据库表达式(34分)关系代数ALPHA语言SQL语言四、绘制E-R图,转关系模式(10分)1、设计系统的全局E-R图(含属性),注明联系类型 2、将E-...
    • weixin_31347831
    • weixin_31347831
    • 2017年05月31日 16:19
    • 246

    初学者Oracle数据库:sql语句的基本使用与示例

    一.DBMS 和 DB 1.DBMS 是什么 数据库管理系统 是管理数据库的软件 2.DB 是什么 真正存储数据的文件 3.RDBMS 和 RDB ...
    • gwjxl
    • gwjxl
    • 2014年04月29日 16:43
    • 5343

    《数据库原理与应用》复习试题归纳

    • u013050857
    • u013050857
    • 2014年12月11日 21:52
    • 1464
    《数据库原理与应用》复习试题归纳 一、单项选择题(每小题1分,共20分) 1、数据库的三个模式中,真正存储数据的是( )A.内模式 B.模式 C.外模式 D.三者皆存储数据 2、在数据库的...

    大师推荐的Oracle数据库相关的书籍,收集汇总。

    1.阿里童家旺推荐 FROM:http://www.dbthink.com/archives/724 Oracle数据库相关的书籍推荐 concepts guide(11g) By T...
    • royjj
    • royjj
    • 2013年05月01日 09:02
    • 2903

    数据库原理,有深度好文

    • sinat_33363493
    • sinat_33363493
    • 2016年07月10日 09:08
    • 1458
    转自:http://blog.jobbole.com/100349/ 一提到关系型数据库,我禁不住想:有些东西被忽视了。关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大...

    数据库原理与应用.(Oracle版)pdf

    • cf406061841
    • cf406061841
    • 2017年09月01日 18:25
    • 282
    下载地址:网盘下载    内容提要 本书系统地讲述了数据库系统的基本概念、基本原理和基本设计方法,并基于目前最流行的大型关系数据库之一——Oracle 11g,循序渐进地介绍了数据库的管理...

    学好数据库,看这9本书就够了

    • f2006116
    • f2006116
    • 2016年07月22日 19:23
    • 30122
    美团点评技术俱乐部 软件开发者编写代码,最终都是要处理数据,因此数据库是必备技能。 悲剧的是,学校里与此最相关的数据库原理课,对初学者的体验却非常不好。相信很多同学都有这样的痛苦经历:一上...

    主流数据库书籍电子版下载汇总贴(84本)

    主流数据库书籍电子版下载汇总贴(84本) 摘自: http://www.db2china.net/club/thread-40229-1-1.html  数据库, DB2, Oracle, 大...
    • notbaron
    • notbaron
    • 2015年03月14日 23:45
    • 32009

    Oracle 数据库基础知识点总结(一)

    • ytc15971476977
    • ytc15971476977
    • 2015年09月28日 19:04
    • 1226
    1.数据库的完整性  ①实体完整性:靠主键来维护,数据唯一且不能为空 ②参照完整性:靠外键来维护,主键表无记录外见表则无法操作数据 ③域完整性:check()约束 not null 约束 defau...

    SQL运行机制

    • winter13292
    • winter13292
    • 2014年01月11日 14:08
    • 2230
    SQL整体执行过程        第一步:程序把语句发给数据库服务器执行。当我们在数据层执行select语句时,程序会把SQL语句发送给服务器端,让服务器端进程来处理这语句。   第二步:语句解析。...

    数据库原理(一)

    • snicolashe
    • snicolashe
    • 2013年01月03日 17:39
    • 581
    数据库原理学习笔记 数据库系统的目标: 数据的冗余和不一致  data redundancy and inconsistency 数据库访问困难 difficulty inaccessing d...

    Oracle数据库面试题汇总

    • maguanghui_2012
    • maguanghui_2012
    • 2015年06月25日 20:43
    • 5878
    1.对字符串操作的函数? 答:ASCII() –函数返回字符表达式最左端字符的ASCII 码值 CHR() –函数用于将ASCII 码转换为字符 –如果没有输入0 ~ 255 之间的ASCII ...

    【Intermediate SQL-1 】五道较难的sql练习_大连理工软院数据库上机答案

    破题累死我了,网上另外一份答案写的也不错(链接:http://blog.csdn.net/cygeek_dut/article/details/13090743),但是有的地方显然写的麻烦了,而且对于...
    • u013303743
    • u013303743
    • 2015年10月19日 20:16
    • 2103

    SQL Server、Access、Oracle数据库之优缺点对比

    导读: 1、SQL Server是一个关系数据库管理系统。 2、ACCESS是由微软发布的关联式数据库管理系统。 3、Oracle是基于服务器的大型数据库。...
    • dtjiawenwang88
    • dtjiawenwang88
    • 2017年07月03日 22:31
    • 887

    Oracle数据库的基础使用

    • zhaodongwoshini
    • zhaodongwoshini
    • 2016年11月10日 16:37
    • 6031
    oracle数据库的基础使用

    《数据库原理(第5版)》(样章).pdf

    • cf406061841
    • cf406061841
    • 2017年05月14日 00:01
    • 964
    下载地址:网盘下载 内容简介 编辑 书中介绍了在成功管理数据库系统的基本概念,包括:关系模型的基本原理、结构化查询语言(SQL)、数据建模、数据库设计、数据库管理、Web...

    SQL Server 2008 R2学习(一)

    • wwkaven
    • wwkaven
    • 2014年09月17日 10:16
    • 1633
    1、首先,是 2、 3、 4、 5、 6、

    MySQL数据库的原理--简版

    • tanga842428
    • tanga842428
    • 2016年08月11日 19:22
    • 1855
    首先要了解原理。不得不说说。MySQL的执行流程。 MySQL是一个单进程的服务,对于每一个请求都是用线程来响应的。这就需要一个连接器来处理新用户的请求、响应以及销毁。         1.客户端...

    Oracle数据库面试题总结

    • shine_a
    • shine_a
    • 2017年04月27日 22:41
    • 2224
    1、SQL语句分类 DQL(数据查询语言)select DML(数据操作语言)insert、delete、update DDL(数据定义语言)create、drop、alter DCL(数据控...

    oracle数据库存储过程学习

    • wanghaihang2015
    • wanghaihang2015
    • 2015年03月13日 15:03
    • 912
    存储过程   1  CREATE OR REPLACE PROCEDURE 存储过程名   2  IS   3  BEGIN   4  NULL;   5  END; ...

    数据库原理之求关系的闭包

    • qq_23100787
    • qq_23100787
    • 2015年09月11日 00:39
    • 943
    因为大家有很多人被教科书很复杂的求解闭包的方法给弄晕了,都不知道该咋求闭包了,因为我补上这篇文章,用来告诉大家怎么用简单的方法求闭包 关于闭包易懂的理解方法 闭包就是由一个属性直接或间接推导出...

    Oracle数据库及SQL结构化查询语言

    • qiao0809
    • qiao0809
    • 2014年10月22日 11:09
    • 498
    Oracle数据库的主要特点      支持多用户、大事务量的事务处理      数据安全性和完整性控制      支持分布式数据处理      可移植性 数据库     物理...

    Oracle数据库-SQL及操作符

    • lingyiwin
    • lingyiwin
    • 2016年05月08日 22:12
    • 124
    一:SQL分类 1. DML(数据操作语言)查询、插入、删除和修改数据库中的数据, SELECT、INSERT、 UPDATE 、DELETE等 2. DCL(数据控制语言)用来控制存取...

    oracle入门学习笔记

    • conanswp
    • conanswp
    • 2014年07月15日 22:36
    • 9219
    oracle学习笔记

    数据库实验指导书+实验报告(2015)

    • snsdzjlz
    • snsdzjlz
    • 2015年07月11日 20:54
    • 3594
    预备实验(选做) 实验名称:SQL Server 2005的安装与系统设置   实验目的和要求:掌握SQL Server 2005的安装和配置方法,熟悉SQL Server的系统环境,主要是对“...

    数据库原理(四)--关系数据库标准语言SQL(一)

    关系数据库标准语言SQL(一)
    • wuxiaojun000000
    • wuxiaojun000000
    • 2016年06月12日 15:08
    • 185

    如果有人问你数据库的原理,叫他看这篇文章

    本文由 伯乐在线 - Panblack 翻译,黄利民 校稿。未经许可,禁止转载! 英文出处:Christophe Kalenzaga。欢迎加入翻译组。 一提到关系型数据库,我禁不住想:有些东西...
    • AlbertFly
    • AlbertFly
    • 2016年05月04日 23:03
    • 8734

    通过Oracle数据库,学SQL语句。

    • CSDN_SamLiu
    • CSDN_SamLiu
    • 2017年09月26日 10:48
    • 509
    Oracle数据库 一、数据库简介 1、数据库(Database,简称DB):是按照数据结构来组织、储存和管理数据的仓库。 数据库管理系统(简称DBMS):管理数据库的软件。 数据库对象:  表,视图...

    深入了解SQLServer系统数据库工作原理(转)

    展开全文
  • 这是我看到的最好的数据库原理的帖子,故转载过来,如有侵犯版权,将立即删除。 数据库概念 数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合。 数据库系统的特点 ...
    这是我看到的最好的数据库原理的帖子,故转载过来,如有侵犯版权,将立即删除。

    数据库概念

    数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据的集合。

    1. 数据库系统的特点
    • 数据结构化
    • 数据的共享性高,冗余度低,易扩充
    • 数据独立性高
    • 数据由DBMS统一管理和控制
    1. 两大类数据模型
    • 概念模型也称信息模型,它是按用户的观点来对数据和信息建模,用于数据库设计。
    • 逻辑模型和物理模型,逻辑模型主要包括网状模型、层次模型、关系模型、面向对象模型等,按计算机系统的观点对数据建模,用于DBMS实现。物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。
    1. 关系数据库
    • 关系数据库系统采用关系模型作为数据的组织方式,在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。关系的每一个分量必须是一个不可分的数据项, 不允许表中还有表。
    1. 数据库系统的三级模式结构
    • 模式(Schema)
    • 外模式(External Schema)
    • 内模式(Internal Schema)
    1. 关系模式
    • 关系模式可以形式化地表示为:

      R(U,D,DOM,F)

      R 关系名

      U 组成该关系的属性名集合

      D 属性组U中属性所来自的域

      DOM 属性向域的映象集合

      F 属性间的数据依赖关系集合

    1. 实体完整性规则(Entity Integrity)
    • 若属性A是基本关系R的主属性,则属性A不能取空值;关系模型中以主码作为唯一性标识。
    1. 参照完整性规则
    • 若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
      • 或者取空值(F的每个属性值均为空值)
      • 或者等于S中某个元组的主码值
    1. 关系代数运算符

    关系数据库标准语言SQL

    SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言。集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。可以独立完成数据库生命周期中的全部活动:

    • 定义关系模式,插入数据,建立数据库;
    • 对数据库中的数据进行查询和更新;
    • 数据库重构和维护
    • 数据库安全性、完整性控制等
    1. 能完成核心功能9个动词

    1. SQL的基本概念

    1. 数据定义

    • 定义模式
      • 定义模式实际上定义了一个命名空间
      • 在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
      • 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。

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

    • 删除模式

      DROP SCHEMA <模式名>

      • CASCADE(级联)

      删除模式的同时把该模式中所有的数据库对象全部删除

      • RESTRICT(限制)

      如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。当该模式中没有任何下属的对象时 才能执行。

    • 定义基本表

      CREATE TABLE <表名>

      (<列名> <数据类型>[ <列级完整性约束条件> ]

      [,<列名> <数据类型>[ <列级完整性约束条件>] ] …

      [,<表级完整性约束条件> ] );

      如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

    • 数据类型

    • 模式与表
      • 每一个基本表都属于某一个模式
      • 一个模式包含多个基本表
      • 定义基本表所属模式
      • 方法一:在表名中明显地给出模式名

        Create table "S-T".Student(......); /*模式名为 S-T*/

        Create table "S-T".Cource(......);

        Create table "S-T".SC(......);

      • 方法二:在创建模式语句中同时创建表
      • 方法三:设置所属的模式
    • 修改基本表

      ALTER TABLE <表名>

      [ ADD <新列名> <数据类型> [ 完整性约束 ] ]

      [ DROP <完整性约束名> ]

      [ ALTER COLUMN<列名> <数据类型> ];

    • 删除基本表

      DROP TABLE <表名>[RESTRICT| CASCADE];

      • RESTRICT:删除表是有限制的。
        • 欲删除的基本表不能被其他表的约束所引用
        • 如果存在依赖该表的对象,则此表不能被删除
      • CASCADE:删除该表没有限制。
        • 在删除基本表的同时,相关的依赖对象一起删除
    • 索 引
      • RDBMS中索引一般采用B+树、HASH索引来实现
        • B+树索引具有动态平衡的优点
        • HASH索引具有查找速度快的特点
      • 采用B+树,还是HASH索引 则由具体的RDBMS来决定
      • 索引是关系数据库的内部实现技术,属于内模式的范畴
      • CREATE INDEX语句定义索引时,可以定义索引是唯一索引、非唯一索引或聚簇索引
    • 建立索引
      • 语句格式

        CREATE [UNIQUE] [CLUSTER] INDEX <索引名>

        ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);

        • 在最经常查询的列上建立聚簇索引以提高查询效率
        • 一个基本表上最多只能建立一个聚簇索引
        • 经常更新的列不宜建立聚簇索引
    • 删除索引

      DROP INDEX <索引名>;

    1. 数据查询
    • 语句格式

      SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>] …

      FROM <表名或视图名>[, <表名或视图名> ] …

      [ WHERE <条件表达式> ]

      [ GROUP BY <列名1> [ HAVING <条件表达式> ] ]

      [ ORDER BY <列名2> [ ASC|DESC ] ];

    • 单表查询
      • 选择表中的若干列
      • 选择表中的若干元组
      • ORDER BY子句
        • 可以按一个或多个属性列排序
        • 升序:ASC;降序:DESC;缺省值为升序
        • 当排序列含空值时
        • ASC:排序列为空值的元组最后显示
        • DESC:排序列为空值的元组最先显示
      • 聚集函数
        • 计数
        • COUNT([DISTINCT|ALL] *)
        • COUNT([DISTINCT|ALL] <列名>)
        • 计算总和
        • SUM([DISTINCT|ALL] <列名>)    
        • 计算平均值
        • AVG([DISTINCT|ALL] <列名>)
        • 最大最小值
        • MAX([DISTINCT|ALL] <列名>)
        • MIN([DISTINCT|ALL] <列名>)
      • GROUP BY子句
    • 查询的一般规律:先依据条件查询得到结果集,再将分组后的结果集筛选并排序。
    • HAVING短语与WHERE子句的区别:
      • 作用对象不同
      • WHERE子句作用于基表或视图,从中选择满足条件的元组
      • HAVING短语作用于组,从中选择满足条件的组。
    • 常用的查询条件

    查 询 条 件

    谓 词

    比 较

    =,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符

    确定范围

    BETWEEN AND,NOT BETWEEN AND

    确定集合

    IN,NOT IN

    字符匹配

    LIKE,NOT LIKE

    空 值

    IS NULL,IS NOT NULL

    多重条件(逻辑运算)

    AND,OR,NOT

    • ESCAPE '\' 表示" \" 为换码字符
    • 连接查询
      • 等值与非等值连接查询
      • 自身连接
        • 一个表与其自己进行连接
          • 需要给表起别名以示区别
          • 由于所有属性名都是同名属性,因此必须使用别名前缀
      • 外连接
        • 外连接与普通连接的区别
          • 普通连接操作只输出满足连接条件的元组
          • 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
        • 左外连接
          • 列出左边关系(如本例Student)中所有的元组
        • 右外连接
          • 列出右边关系中所有的元组
      • 复合条件连接
    • 嵌套查询

      一个SELECT-FROM-WHERE语句称为一个查询块

      将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询

      • 子查询的限制
        • 不能使用ORDER BY子句
          • 层层嵌套方式反映了 SQL语言的结构化
          • 有些嵌套查询可以用连接运算替代
      • 嵌套查询求解方法
        • 子查询的查询条件不依赖于父查询
          • 由里向外 逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。
          • 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表
          • 然后再取外层表的下一个元组
          • 重复这一过程,直至外层表全部检查完为止
      • 带有比较运算符的子查询
        • 当能确切知道内层查询返回单值时,可用比较运算符(>,<,=,>=,<=,!=或< >)。
        • 与ANY或ALL谓词配合使用
      • 带有ANY(SOME)或ALL谓词的子查询
        • 需要配合使用比较运算符
          • > ANY    大于子查询结果中的某个值
          • > ALL    大于子查询结果中的所有值
          • < ANY    小于子查询结果中的某个值
          • < ALL    小于子查询结果中的所有值
          • >= ANY    大于等于子查询结果中的某个值
          • >= ALL    大于等于子查询结果中的所有值
          • <= ANY    小于等于子查询结果中的某个值
          • <= ALL    小于等于子查询结果中的所有值
          • = ANY    等于子查询结果中的某个值
          • =ALL    等于子查询结果中的所有值(通常没有实际意义)
          • !=(或<>)ANY    不等于子查询结果中的某个值
          • !=(或<>)ALL    不等于子查询结果中的任何一个值
      • 带有EXISTS谓词的子查询
        • 1. EXISTS谓词,存在量词$
        • 带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值"true"或逻辑假值"false"。
          • 若内层查询结果非空,则外层的WHERE子句返回真值
          • 若内层查询结果为空,则外层的WHERE子句返回假值
        • 由EXISTS引出的子查询,其目标列表达式通常都用* ,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义
        • 2. NOT EXISTS谓词
          • 若内层查询结果非空,则外层的WHERE子句返回假值
          • 若内层查询结果为空,则外层的WHERE子句返回真值
    • 集合查询
      • 集合操作的种类
        • 并操作UNION
        • 交操作INTERSECT
        • 差操作EXCEPT
      • 参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同
    • SELECT语句的一般格式

      SELECT [ALL|DISTINCT]

      <目标列表达式> [别名] [ ,<目标列表达式> [别名]] …

      FROM <表名或视图名> [别名]

      [ ,<表名或视图名> [别名]] …

      [WHERE <条件表达式>]

      [GROUP BY <列名1>

      [HAVING <条件表达式>]]

      [ORDER BY <列名2> [ASC|DESC]

    1. 数据更新
    • 插入数据
      • 插入元组
        • 语句格式

            INSERT

            INTO <表名> [(<属性列1>[,<属性列2 >…)]

            VALUES (<常量1> [,<常量2>] … )

      • 插入子查询结果
        • 语句格式

        INSERT

        INTO <表名> [(<属性列1> [,<属性列2>… )]

        子查询;

        • 子查询

        SELECT子句目标列必须与INTO子句匹配

        • 值的个数
        • 值的类型
    1. 修改数据
    • 语句格式

      UPDATE <表名>

      SET <列名>=<表达式>[,<列名>=<表达式>]…

      [WHERE <条件>];

    1. 删除数据
    • 语句格式

      DELETE

      FROM <表名>

      [WHERE <条件>];

    1. 视 图
    • 虚表,是从一个或几个基本表(或视图)导出的表
    • 只存放视图的定义,不存放视图对应的数据
    • 基表中的数据发生变化,从视图中查询出的数据也随之改变
    • 建立视图
      • 语句格式

      CREATE VIEW

      <视图名> [(<列名> [,<列名>]…)]

      AS <子查询>

      [WITH CHECK OPTION];

    • 删除视图

      DROP VIEW <视图名>;

    • 查询视图
      • 用户角度:查询视图与查询基本表相同
    • 视图的作用
    1. 视图能够简化用户的操作
    2. 视图使用户能以多种角度看待同一数据
    3. 视图对重构数据库提供了一定程度的逻辑独立性
    4. 视图能够对机密数据提供安全保护
    5. 适当的利用视图可以更清晰的表达查询

    数据库安全性

    1. 数据库安全性控制的常用方法
    • 用户标识和鉴定
    • 存取控制
    • 视图
    • 审计
    • 密码存储
    1. 关系数据库系统中存取控制对象

    2. 授权与回收
    • GRANT
      • GRANT语句的一般格式:

      GRANT <权限>[,<权限>]...

      [ON <对象类型> <对象名>]

      TO <用户>[,<用户>]...

      [WITH GRANT OPTION];

    • 语义:将对指定操作对象的指定操作权限授予指定的用户
    • WITH GRANT OPTION子句
      • WITH GRANT OPTION子句:
        • 指定:可以再授予
        • 没有指定:不能传播
      • 不允许循环授权
    • REVOKE
      • 授予的权限可以由DBA或其他授权者用REVOKE语句收回
      • REVOKE语句的一般格式为:

      REVOKE <权限>[,<权限>]...

      [ON <对象类型> <对象名>]

      FROM <用户>[,<用户>]...;

    • 创建数据库模式的权限
      • DBA在创建用户时实现
      • CREATE USER语句格式

      CREATE USER

      [WITH][DBA | RESOURCE | CONNECT]

    1. 数据库角色
    • 数据库角色:被命名的一组与数据库操作相关的权限
      • 角色是权限的集合
      • 可以为一组具有相同权限的用户创建一个角色
      • 简化授权的过程
    • 角色的创建

      CREATE ROLE <角色名>

    • 给角色授权

      GRANT <权限>[,<权限>]…

      ON <对象类型>对象名

      TO <角色>[,<角色>]…

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

      GRANT <角色1>[,<角色2>]…

      TO <角色3>[,<用户1>]…

      [WITH ADMIN OPTION]

    • 角色权限的收回

      REVOKE <权限>[,<权限>]…

      ON <对象类型> <对象名>

      FROM <角色>[,<角色>]…

    数据库完整性

    • 数据库的完整性
      • 数据的正确性和相容性
    • 数据的完整性和安全性是两个不同概念
      • 数据的完整性
        • 防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
        • 防范对象:不合语义的、不正确的数据
      • 数据的安全性
        • 保护数据库防止恶意的破坏和非法的存取
        • 防范对象:非法用户和非法操作
    • 实体完整性
      • 关系模型的实体完整性
        • CREATE TABLE中用PRIMARY KEY定义
      • 单属性构成的码有两种说明方法
        • 定义为列级约束条件
        • 定义为表级约束条件
      • 对多个属性构成的码只有一种说明方法
        • 定义为表级约束条件
      • 插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:
    1. 检查主码值是否唯一,如果不唯一则拒绝插入或修改
    2. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改
    • 检查记录中主码值是否唯一的一种方法是进行全表扫描
    • 参照完整性
      • 关系模型的参照完整性定义
        • 在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码
        • 用REFERENCES短语指明这些外码参照哪些表的主码

          例如,关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Course表的主码

          [例3] 定义SC中的参照完整性

          CREATE TABLE SC

          (Sno CHAR(9) NOT NULL,

          Cno CHAR(4) NOT NULL,

          Grade SMALLINT,

          PRIMARY KEY (Sno, Cno), /*在表级定义实体完整性*/

          FOREIGN KEY (Sno) REFERENCES Student(Sno),

          /*在表级定义参照完整性*/

          FOREIGN KEY (Cno) REFERENCES Course(Cno)

          /*在表级定义参照完整性*/

          );

    • 用户定义的完整性
      • 属性上的约束条件的定义
        • CREATE TABLE时定义
        • 列值非空(NOT NULL)
        • 列值唯一(UNIQUE)
        • 检查列值是否满足一个布尔表达式(CHECK)
      • 属性上的约束条件检查和违约处理
        • 插入元组或修改属性的值时,RDBMS检查属性上的约束条件是否被满足
        • 如果不满足则操作被拒绝执行
      • 元组上的约束条件的定义
        • 在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制
        • 同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件
      • 元组上的约束条件检查和违约处理
        • 插入元组或修改属性的值时,RDBMS检查元组上的约束条件是否被满足
        • 如果不满足则操作被拒绝执行
    • 完整性约束命名子句
      • CONSTRAINT 约束

        CONSTRAINT <完整性约束条件名>

        [PRIMARY KEY短语

        |FOREIGN KEY短语

        |CHECK短语]

      • 使用ALTER TABLE语句修改表中的完整性限制
      • SQL支持域的概念,并可以用CREATE DOMAIN语句建立一个域以及该域应该满足的完整性约束条件。
    • 触发器
      • 定义触发器
        • CREATE TRIGGER语法格式

          CREATE TRIGGER <触发器名>

          {BEFORE | AFTER} <触发事件> ON <表名>

          FOR EACH {ROW | STATEMENT}

          [WHEN <触发条件>]

          <触发动作体>

      • 定义触发器的语法说明:
        • 1. 创建者:表的拥有者
        • 2. 触发器名
        • 3. 表名:触发器的目标表
        • 4. 触发事件:INSERT、DELETE、UPDATE
        • 5. 触发器类型
          • 行级触发器(FOR EACH ROW)
          • 语句级触发器(FOR EACH STATEMENT)
        • 6. 触发条件
          • 触发条件为真
          • 省略WHEN触发条件
        • 7. 触发动作体
          • 触发动作体可以是一个匿名PL/SQL过程块
          • 也可以是对已创建存储过程的调用
      • 激活触发器
        • 触发器的执行,是由触发事件激活的,并由数据库服务器自动执行
        • 一个数据表上可能定义了多个触发器
          • 同一个表上的多个触发器激活时遵循如下的执行顺序:
          • (1) 执行该表上的BEFORE触发器;
          • (2) 激活触发器的SQL语句;
          • (3) 执行该表上的AFTER触发器。
      • 删除触发器
        • 删除触发器的SQL语法:

          DROP TRIGGER <触发器名> ON <表名>;

        • 触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。

    关系数据理论

    • 数据依赖
      • 数据依赖的类型
        • 函数依赖(Functional Dependency,简记为FD)
        • 多值依赖(Multivalued Dependency,简记为MVD)
        • 其他
      • 数据依赖对关系模式的影响
        • "好"的模式:
          • 不会发生插入异常、删除异常、更新异常,
          • 数据冗余应尽可能少
          • 原因:由存在于模式中的某些数据依赖引起的
          • 解决方法:通过分解关系模式来消除其中不合适的数据依赖
      • 函数依赖
        • 定义6.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 "X函数确定Y" 或 "Y函数依赖于X",记作X→Y。
        • 在关系模式R(U)中,对于U的子集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。
      • 完全函数依赖与部分函数依赖
        • 定义6.2 在R(U)中,如果X→Y,并且对于X的任何一个真子集X',都有X' Y, 则称Y对X完全函数依赖,记作X→F Y 。 若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X→P Y。
      • 传递函数依赖
        • 定义6.3 在R(U)中,如果X→Y,(Y ÍX) ,Y→X Y→Z, 则称Z对X传递函数依赖。记为:X →传递 Z
        • 注: 如果Y→X, 即X←→Y,则Z直接依赖于X。
        • 定义6.4 设K为R中的属性或属性组合。若K U, 则K称为R的侯选码(Candidate Key)。若候选码多于一个,则选定其中的一个做为主码(Primary Key)。
        • 主属性与非主属性
          • 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)
          • 不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
        • 全码
          • 整个属性组是码,称为全码(All-key)
      • 外部码
        • 定义6.5 关系模式 R 中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码
    • 范式
      • 范式是符合某一种级别的关系模式的集合
      • 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式
      • 范式的种类:    
        • 第一范式(1NF)
        • 第二范式(2NF)
        • 第三范式(3NF)
        • BC范式(BCNF)
        • 第四范式(4NF)
        • 第五范式(5NF)
      • 各种范式之间存在联系:
      • 某一关系模式R为第n范式,可简记为R∈nNF。
      • 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化
      • 1NF
        • 1NF的定义
          • 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
        • 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
        • 但是满足第一范式的关系模式并不一定是一个好的关系模式
      • 2NF
        • 2NF的定义
          •     定义6.6 若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。
      • 3NF
        • 3NF的定义
          • 定义6.7 关系模式R 中若不存在这样的码X、属性组Y及非主属性Z(Z Í Y), 使得X→Y,Y→Z成立, Y → X,则称R ∈ 3NF。
          • 若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码
      • BC范式(BCNF)
        • 定义6.8 关系模式R∈1NF,若X→Y且Y Í X时,X必含有码,则R ∈BCNF。
        • 等价于:每一个决定属性因素都包含码
        • 若R∈BCNF
          • 所有非主属性对每一个码都是完全函数依赖
          • 所有的主属性对每一个不包含它的码,也是完全函数依赖
          • 没有任何属性完全函数依赖于非码的任何一组属性
        • R ∈BCNF  R ∈3NF
    • 多值依赖
      • 定义6.9
        • 设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖 X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关
      • 多值依赖的另一个等价的形式化的定义:
        • 在R(U)的任一关系r中,如果存在元组t,s 使得t[X]=s[X],那么就必然存在元组 w,vΠr,(w,v可以与s,t相同),使得w[X]=v[X]=t[X],而w[Y]=t[Y],w[Z]=s[Z],v[Y]=s[Y],v[Z]=t[Z](即交换s,t元组的Y值所得的两个新元组必在r中),则Y多值依赖于X,记为X→→Y。 这里,X,Y是U的子集,Z=U-X-Y。
      • 平凡多值依赖和非平凡的多值依赖
        • 若X→→Y,而Z=φ,则称X→→Y为平凡的多值依赖
        • 否则称X→→Y为非平凡的多值依赖
      • 多值依赖的性质
        • (1)多值依赖具有对称性。若X→→Y,则X→→Z,其中Z=U-X-Y
        • (2)多值依赖具有传递性。若X→→Y,Y→→Z, 则X→→Z –Y
        • (3)函数依赖是多值依赖的特殊情况。若X→Y,则X→→Y。
        • (4)若X→→Y,X→→Z,则X→→YÈ Z。
        • (5)若X→→Y,X→→Z,则X→→Y∩Z。
        • (6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。
      • 多值依赖与函数依赖的区别
        • (1) 多值依赖的有效性与属性集的范围有关
        • (2)
          • 若函数依赖X→Y在R(U)上成立,则对于任何Y' Ì Y均有X→Y' 成立
          • 多值依赖X→→Y若在R(U)上成立,不能断言对于任何Y' Ì Y有X→→Y' 成立
      • 4NF
        • 定义6.10 关系模式R∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y Í X),X都含有码,则R∈4NF。
        • 如果R ∈ 4NF, 则R ∈ BCNF
          • 不允许有非平凡且非函数依赖的多值依赖
          • 允许的非平凡多值依赖是函数依赖
    • 数据依赖的公理系统
      • 逻辑蕴含
        • 定义6.11 对于满足一组函数依赖 F 的关系模式R ,其任何一个关系r,若函数依赖X→Y都成立, (即r中任意两元组t,s,若tX]=sX],则tY]=sY]),则称F逻辑蕴含X →Y
      • 关系模式R 来说有以下的推理规则:
        • A1.自反律(Reflexivity):若Y Í X Í U,则X →Y为F所蕴含。
        • A2.增广律(Augmentation):若X→Y为F所蕴含,且Z Í U,则XZ→YZ为F所蕴含。
        • A3.传递律(Transitivity):若X→Y及Y→Z为F所蕴含,则X→Z为F所蕴含。
          • 自反律: 若Y Í X Í U,则X →Y为F所蕴含

            证: 设Y Í X Í U

            对R 的任一关系r中的任意两个元组t,s:

            若t[X]=s[X],由于Y Í X,有t[y]=s[y],

            所以X→Y成立,自反律得证

          • 增广律: 若X→Y为F所蕴含,且Z Í U,则XZ→YZ 为F所蕴含。

            证:设X→Y为F所蕴含,且Z Í U。

            设R 的任一关系r中任意的两个元组t,s:

            若t[XZ]=s[XZ],则有t[X]=s[X]和t[Z]=s[Z];

            由X→Y,于是有t[Y]=s[Y],所以t[YZ]=s[YZ],所以

            XZ→YZ为F所蕴含,增广律得证。

          • 传递律:若X→Y及Y→Z为F所蕴含,则X→Z为 F所蕴含。

            证:设X→Y及Y→Z为F所蕴含。

            对R 的任一关系 r中的任意两个元组 t,s:

            若t[X]=s[X],由于X→Y,有 t[Y]=s[Y];

            再由Y→Z,有t[Z]=s[Z],所以X→Z为F所蕴含,传递律得证。

      • 导出规则
        • 1.根据A1,A2,A3这三条推理规则可以得到下面三条推理规则:
          • 合并规则:由X→Y,X→Z,有X→YZ。

            (A2, A3)

          • 伪传递规则:由X→Y,WY→Z,有XW→Z。

            (A2, A3)

          • 分解规则:由X→Y及 ZÍY,有X→Z。

            (A1, A3)

        • 2.根据合并规则和分解规则,可得引理6.1
          • 引理6.l X→A1 A2…Ak成立的充分必要条件是X→Ai成立(i=l,2,…,k)
      • 函数依赖闭包
        • 定义6.l2 在关系模式R中为F所逻辑蕴含的函数依赖的全体叫作 F的闭包,记为F+。
        • 定义6.13 设F为属性集U上的一组函数依赖,X ÍU, XF+ ={ A|X→A能由F 根据Armstrong公理导出},XF+称为属性集X关于函数依赖集F 的闭包
      • 函数依赖集等价
        • 定义6.14 如果G+=F+,就说函数依赖集F覆盖G(F是G的覆盖,或G是F的覆盖),或F与G等价。
        • 引理6.3 F+ = G+ 的充分必要条件是F Í G+ ,和G Í F+

          证: 必要性显然,只证充分性。

          (1)若FÍG+ ,则XF+ Í XG++ 。

          (2)任取X→YÎF+ 则有 Y Í XF+ Í XG++ 。

                   所以X→Y Î (G+)+= G+。即F+ Í G+。

          (3)同理可证G+ Í F+ ,所以F+ = G+。

      • 最小依赖集
        • 定义6.15 如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。亦称为最小依赖集或最小覆盖。
          • (1) F中任一函数依赖的右部仅含有一个属性。
          • (2) F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
          • (3) F中不存在这样的函数依赖X→A, X有真子集Z使得F-{X→A}∪{Z→A}与F等价。
      • 极小化过程
        • 定理6.3 每一个函数依赖集F均等价于一个极小函数依赖集Fm。此Fm称为F的最小依赖集。

          证明: 构造性证明,找出F的一个最小依赖集。

          (1)逐一检查F中各函数依赖FDi:X→Y,若Y=A1A2 …Ak,k > 2,

          则用 { X→Aj |j=1,2,…, k} 来取代X→Y。

          (2)逐一检查F中各函数依赖FDi:X→A,令G=F-{X→A},

          若AÎXG+, 则从F中去掉此函数依赖。

          (3)逐一取出F中各函数依赖FDi:X→A,设X=B1B2…Bm,

          逐一考查Bi (i=l,2,…,m),若A Î(X-Bi )F+ ,

          则以X-Bi 取代X。

      • 模式的分解
        • 三种模式分解等价的定义:
          • ⒈ 分解具有无损连接性
          • ⒉ 分解要保持函数依赖
          • ⒊ 分解既要保持函数依赖,又要具有无损连接性
        • 定义6.16 关系模式R的一个分解:ρ={ R1,R2,…,Rn},U= ∪Ui,且不存在 Ui Í Uj,Fi 为 F在 Ui 上的投影
        • 定义6.17 函数依赖集合{X→Y | X→Y Î F+∧XY ÍUi} 的一个覆盖 Fi 叫作 F 在属性 Ui 上的投影
      • 具有无损连接性的模式分解
        • 关系模式R的一个分解 ρ={ R1,R2, …,Rn},若R与R1、R2、…、Rn自然连接的结果相等,则称关系模式R的这个分解ρ具有无损连接性(Lossless join)
        • 具有无损连接性的分解保证不丢失信息
        • 无损连接性不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题
      • 保持函数依赖的模式分解
        • 设关系模式R被分解为若干个关系模式,R1,R2,…,Rn ,(其中U=U1∪U2∪…∪Un,且不存在Ui Í Uj,Fi为F在Ui上的投影),若F所逻辑蕴含的函数依赖一定也由分解得到的某个关系模式中的函数依赖Fi所逻辑蕴含,则称关系模式R的这个分解是保持函数依赖的(Preserve dependency)
      • 关系模式的规范化,其基本思想:

      • 小结
        • 若要求分解具有无损连接性,那么模式分解一定能够达到4NF
        • 若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF
        • 若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF

    数据库设计

    1. 数据库设计的特点

    2. 数据库设计方法
    • 基本思想:过程迭代和逐步求精
      • 新奥尔良(New Orleans)方法
        • 将数据库设计分为若干阶段和步骤
      • 基于E-R模型的数据库设计方法
        • 概念设计阶段广泛采用
      • 3NF(第三范式)的设计方法
        • 逻辑阶段可采用的有效方法
      • ODL(Object Definition Language)方法
        • 面向对象的数据库设计方法
      • 计算机辅助设计
        • ORACLE Designer 2000
        • SYBASE PowerDesigner
    • 数据库设计的基本步骤
      • 数据库设计分6个阶段
        • 需求分析
        • 概念结构设计
        • 逻辑结构设计
        • 物理结构设计
        • 数据库实施
        • 数据库运行和维护
      • 需求分析和概念设计独立于任何数据库管理系统
      • 逻辑设计和物理设计与选用的DBMS密切相关

    1. 数据库设计过程中的各级模式
    • 数据库设计不同阶段形成的数据库各级模式

    1. 结构化分析方法(Structured Analysis,简称SA方法)
    • 从最上层的系统组织机构入手
    • 自顶向下、逐层分解分析系统
      • 1.首先把任何一个系统都抽象为:

      • 2.分解处理功能和数据
        • (1)分解处理功能
          • 将处理功能的具体内容分解为若干子功能
        • (2)分解数据
          • 处理功能逐步分解同时,逐级分解所用数据,形成若干层次的数据流图
        • (3)表达方法
          • 处理逻辑:用判定表或判定树来描述
          • 数据:用数据字典来描述
      • 3.将分析结果再次提交给用户,征得用户的认可

    1. 数据字典
    • 数据字典的用途
      • 进行详细的数据收集和数据分析所获得的主要结果
    • 数据字典的内容
      • 数据项
      • 数据结构
      • 数据流
      • 数据存储
      • 处理过程
    • ⒈ 数据项
      • 数据项是不可再分的数据单位
      • 对数据项的描述

        数据项描述={数据项名,数据项含义说明,别名,

        数据类型,长度,取值范围,取值含义,

                    与其他数据项的逻辑关系,数据项之间的联系 }

    • ⒉ 数据结构
      • 数据结构反映了数据之间的组合关系。
      • 一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
      • 对数据结构的描述

        数据结构描述={数据结构名,含义说明,

        组成:{数据项或数据结构}}

    • ⒊ 数据流
      • 数据流是数据结构在系统内传输的路径。
      • 对数据流的描述

        数据流描述={ 数据流名,说明,数据流来源,

        数据流去向,组成:{数据结构},

        平均流量,高峰期流量}

    • ⒋ 数据存储
      • 数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。
      • 对数据存储的描述

        数据存储描述={数据存储名,说明,编号,

                     输入的数据流 ,输出的数据流 ,

                     组成:{数据结构},数据量,存取频度,存取方式}

    • ⒌ 处理过程
      • 具体处理逻辑一般用判定表或判定树来描述
      • 处理过程说明性信息的描述

        处理过程描述={处理过程名,说明,输入:{数据流},

        输出:{数据流},处理:{简要说明}}

    1. 概念结构设计
    • 设计概念结构的四类方法
      • 自顶向下
    1. 首先定义全局概念结构的框架,然后逐步细化
    • 自底向上
    1. 首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构
    • 逐步扩张
    1. 首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构
    • 混合策略
    1. 将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
    • 常用策略
      • 自顶向下地进行需求分析
      • 自底向上地设计概念结构

         

         

    • 自底向上设计概念结构的步骤
      •     第1步:抽象数据并设计局部视图
      •     第2步:集成局部视图,得到全局概念结构

         

         

    • 数据抽象与局部视图设计
      • 数据抽象
        • 三种常用抽象
          • 1. 分类(Classification)
            • 定义某一类概念作为现实世界中一组对象的类型
            • 抽象了对象值和型之间的"is member of"的语义

         

         

        • 2. 聚集(Aggregation)
          • 定义某一类型的组成成分
          • 抽象了对象内部类型和成分之间"is part of"的语义

         

         

        • 复杂的聚集,某一类型的成分仍是一个聚集

         

         

        • 3. 概括(Generalization)
          • 定义类型之间的一种子集联系
          • 抽象了类型之间的"is subset of"的语义
          • 继承性

         

         

      • 局部视图设计
        • 设计分E-R图的步骤:
          • ⒈选择局部应用
            • 在多层的数据流图中选择一个适当层次的数据流图,作为设计分E-R图的出发点
            • 通常以中层数据流图作为设计分E-R图的依据

         

         

        • ⒉逐一设计分E-R图
          • 任务
            • 将各局部应用涉及的数据分别从数据字典中抽取出来
            • 参照数据流图,标定各局部应用中的实体、实体的属性、标识实体的码
            • 确定实体之间的联系及其类型(1:1,1:n,m:n)
          • 两条准则:
            • (1)属性不能再具有需要描述的性质。即属性必须是不可分的数据项,不能再由另一些属性组成
            • (2)属性不能与其他实体具有联系。联系只发生在实体之间
          • 举例

         

         

     

     

    1. 逻辑结构设计
    • E-R图向关系模型的转换
    • 数据模型的优化
      • 优化数据模型的方法
        • 1确定数据依赖
          • 按需求分析阶段所得到的语义,分别写出每个关系模式内部各属性之间的数据依赖以及不同关系模式属性之间数据依赖
        • 2消除 冗余的联系
          • 对于各个关系模式之间的数据依赖进行极小化处理,消除 冗余的联系。
        • 3确定所属范式
          • 按照数据依赖的理论对关系模式逐一进行分析
          • 考查是否存在部分函数依赖、传递函数依赖、多值依赖等
          • 确定各关系模式分别属于第几范式
        • 4按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些模式是否合适,确定是否要对它们进行合并或分解。
        • 注意:并不是规范化程度越高的关系就越优,一般说来,第三范式就足够了
        • 5按照需求分析阶段得到的各种应用对数据处理的要求,对关系模式进行必要的分解,以提高数据操作的效率和存储空间的利用率
    • 设计用户子模式
      • 定义用户外模式时应该注重的问题
        • 包括三个方面:
          • (1) 使用更符合用户习惯的别名
          • (2) 针对不同级别的用户定义不同的View ,以满足系统对安全性的要求。
          • (3) 简化用户对系统的使用
    1. 数据库的物理设计
    • 数据库物理设计的内容和方法
    • 关系模式存取方法选择
      • DBMS常用存取方法
        • 索引方法
          • 目前主要是B+树索引方法
          • 经典存取方法,使用最普遍
        • 聚簇(Cluster)方法
          • HASH方法
      • 选择索引存取方法的一般规则
        • 如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(或这组)属性上建立索引(或组合索引)
        • 如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引
        • 如果一个(或一组)属性经常在连接操作的连接条件中出现,则考虑在这个(或这组)属性上建立索引
      • 聚簇
        • 为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块称为聚簇
      • 聚簇的用途
        • 1. 大大提高按聚簇码进行查询的效率
        • 2. 节省存储空间
          • 聚簇以后,聚簇码相同的元组集中在一起了,因而聚簇码值不必在每个元组中重复存储,只要在一组中存一次就行了
      • 聚簇的局限性
        • 1. 聚簇只能提高某些特定应用的性能
        • 2. 建立与维护聚簇的开销相当大
          • 对已有关系建立聚簇,将导致关系中元组移动其物理存储位置,并使此关系上原有的索引无效,必须重建
          • 当一个元组的聚簇码改变时,该元组的存储位置也要做相应移动
    • 确定数据的存放位置
      • 根据应用情况将
        • 易变部分与稳定部分分开存放
        • 存取频率较高部分与存取频率较低部分,分开存放
    • 评价物理结构
    1. 小结(续)
    • 在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式
    • 在物理设计阶段根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式

    数据库编程

    • 嵌入式SQL
    1. 嵌入式SQL的处理过程
    • 数据库工作单元与源程序工作单元之间的通信:
      • 1. SQL通信区
        • 向主语言传递SQL语句的执行状态信息
        • 使主语言能够据此控制程序流程
      • 2. 主变量
        • 主语言向SQL语句提供参数
        • 将SQL语句查询数据库的结果交主语言进一步处理
      • 3. 游标
        • 解决集合性操作语言与过程性操作语言的不匹配
    1. 嵌入式SQL与主语言的通信
    • 在SQL语句中使用主变量和指示变量的方法
      • 1) 说明主变量和指示变量

        BEGIN DECLARE SECTION

            .........

            ......... (说明主变量和指示变量)

            .........

        END DECLARE SECTION

      • 2) 使用主变量
        • 说明之后的主变量可以在SQL语句中任何一个能够使用表达式的地方出现
        • 为了与数据库对象名(表名、视图名、列名等)区别,SQL语句中的主变量名前要加冒号(:)作为标志
      • 3) 使用指示变量
        • 指示变量前也必须加冒号标志
        • 必须紧跟在所指主变量之后
    • 在SQL语句之外(主语言语句中)使用主变量和指示变量的方法
      • 可以直接引用,不必加冒号
    • 游标(cursor)
      • SQL语言与主语言具有不同数据处理方式
      • SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录
      • 主语言是面向记录的,一组主变量一次只能存放一条记录
      • 仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求
      • 嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式
      • 游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果
      • 每个游标区都有一个名字
      • 用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理
    • 建立和关闭数据库连接
      • 建立数据库连接

        EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];

        • target是要连接的数据库服务器:
          • 常见的服务器标识串,如@:
          • 包含服务器标识的SQL串常量
          • DEFAULT
        • connect-name是可选的连接名,连接必须是一个有效的标识符 在整个程序内只有一个连接时可以不指定连接名
      • 关闭数据库连接

        EXEC SQL DISCONNECT [connection];

      • 程序运行过程中可以修改当前连接 :

        EXEC SQL SET CONNECTION connection-name | DEFAULT;

    • 不用游标的SQL语句的种类
      • 说明性语句
      • 数据定义语句
      • 数据控制语句
      • 查询结果为单记录的SELECT语句
      • 非CURRENT形式的增删改语句
    • 使用游标的SQL语句
      • 查询结果为多条记录的SELECT语句
        • 使用游标的步骤
          • 1. 说明游标
            • 使用DECLARE语句
            • 语句格式

              EXEC SQL DECLARE <游标名> CURSOR

              FOR 

            • 功能

              是一条说明性语句,这时DBMS并不执行SELECT指定的查询操作。

          • 2. 打开游标
            • 使用OPEN语句
            • 语句格式

              EXEC SQL OPEN <游标名>;

            • 功能

              打开游标实际上是执行相应的SELECT语句,把所有满足查询条件的记录从指定表取到缓冲区中这时游标处于活动状态,指针指向查询结果集中第一条记录

          • 3.推进游标指针并取当前记录
            • 使用FETCH语句
            • 语句格式

              EXEC SQL FETCH [[NEXT|PRIOR|

              FIRST|LAST] FROM] <游标名>

              INTO <主变量>[<指示变量>][,<主变量>[<指示变量>]]...;

            • 功能

              指定方向推动游标指针,然后将缓冲区中的当前记录取出来送至主变量供主语言进一步处理

              NEXT|PRIOR|FIRST|LAST:指定推动游标指针的方式

              NEXT:向前推进一条记录

              PRIOR:向回退一条记录

              FIRST:推向第一条记录

              LAST:推向最后一条记录

              缺省值为NEXT

          • 4. 关闭游标
            • 使用CLOSE语句
            • 语句格式

              EXEC SQL CLOSE <游标名>;

            • 功能

              关闭游标,释放结果集占用的缓冲区及其他资源

            • 说明

              游标被关闭后,就不再和原来的查询结果集相联系

              被关闭的游标可以再次被打开,与新的查询结果相联系

      • CURRENT形式的UPDATE语句
        • CURRENT形式的UPDATE语句和DELETE语句的用途
          • 面向集合的操作
          • 一次修改或删除所有满足条件的记录
        • 如果只想修改或删除其中某个记录
          • 用带游标的SELECT语句查出所有满足条件的记录
          • 从中进一步找出要修改或删除的记录
          • 用CURRENT形式的UPDATE语句和DELETE语句修改或删除之
          • UPDATE语句和DELETE语句中的子句:

            WHERE CURRENT OF <游标名>

            表示修改或删除的是最近一次取出的记录,即游标指针指向的记录

        • 不能使用CURRENT形式的UPDATE语句和DELETE语句 :
          • 当游标定义中的SELECT语句带有UNION或ORDER BY子句
          • 该SELECT语句相当于定义了一个不可更新的视图
    1. 动态SQL
    • 静态嵌入式SQL
      • 静态嵌入式SQL语句能够满足一般要求
      • 无法满足要到执行时才能够确定要提交的SQL语句
    • 动态嵌入式SQL
      • 允许在程序运行过程中临时"组装"SQL语句
      • 支持动态组装SQL语句和动态参数两种形式
    • SQL语句主变量:
      • 程序主变量包含的内容是SQL语句的内容,而不是原来保存数据的输入或输出变量
      • SQL语句主变量在程序执行期间可以设定不同的SQL语句,然后立即执行
    • 动态参数
      • SQL语句中的可变元素
      • 使用参数符号(?)表示该位置的数据在运行时设定
    • 和主变量的区别
      • 动态参数的输入不是编译时完成绑定
      • 而是通过 (prepare)语句准备主变量和执行(execute)时绑定数据或主变量来完成
    • 使用动态参数的步骤:
      • 1.声明SQL语句主变量。
      • 2.准备SQL语句(PREPARE)。

        EXEC SQL PREPARE <语句名> FROM ;

      • 3.执行准备好的语句(EXECUTE)

        EXEC SQL EXECUTE <语句名> [INTO <主变量表>] [USING <    主变量或常量>];

    • 存储过程
    1. PL/SQL的块结构
    • PL/SOL块的基本结构:
      • 1.定义部分

        DECLARE     

        ------变量、常量、游标、异常等

        • 定义的变量、常量等只能在该基本块中使用
        • 当基本块执行结束时,定义就不再存在
      • 2.执行部分

        BEGIN

        ------SQL语句、PL/SQL的流程控制语句

        EXCEPTION

        ------异常处理部分         

        END;

    • 变量常量的定义
      • 1. PL/SQL中定义变量的语法形式是:
        • 变量名 数据类型 [ [NOT NULL]:=初值表达式]或
        • 变量名 数据类型 [ [NOT NULL]初值表达式]
      • 2. 常量的定义类似于变量的定义:
        • 常量名 数据类型 CONSTANT :=常量表达式
        • 常量必须要给一个值,并且该值在存在期间或常量的作用域内不能改变。如果试图修改它,PL/SQL将返回一个异常。
      • 3. 赋值语句
        • 变量名称:=表达式
      • 控制结构
    • 一、条件控制语句
      • IF-THEN, IF-THEN-ELSE和嵌套的IF语句

            1. IF condition THEN

             Sequence_of_statements;

             END IF

            2. IF condition THEN

             Sequence_of_statements1;

             ELSE

             Sequence_of_statements2;

             END IF;

            3. 在THEN和ELSE子句中还可以再包括IF语句,即IF语句可以嵌套

    • 二、循环控制语句
      • LOOP, WHILE-LOOP和FOR-LOOP

        1.最简单的循环语句LOOP

             LOOP

             Sequence_of_statements;

             END LOOP;

            多数数据库服务器的PL/SQL都提供EXIT、BREAK或LEAVE等循环结束语句,保证LOOP语句块能够结束。

        2. WHILE-LOOP

        WHILE condition LOOP

             Sequence_of_statements;

            END LOOP;

        每次执行循环体语句之前,首先对条件进行求值

        如果条件为真,则执行循环体内的语句序列。

        如果条件为假,则跳过循环并把控制传递给下一个语句

        3. FOR-LOOP

            FOR count IN [REVERSE]bound1 … bound2 LOOP

             Sequence_of_statements;

            END LOOP;

    1. 存储过程的用户接口
    • 1. 创建存储过程:

          CREATE Procedure 过程名([参数1,参数2,...]) AS

          ;

      • 过程名:数据库服务器合法的对象标识
      • 参数列表:用名字来标识调用时给出的参数值,必须指定值的数据类型。参数也可以定义输入参数、输出参数或输入/输出参数。默认为输入参数。
      • 过程体:是一个。包括声明部分和可执行语句部分
      • 重命名存储过程

        ALTER Procedure 过程名1 RENAME TO 过程名2;

    • 2. 执行存储过程:

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

      • 使用CALL或者PERFORM等方式激活存储过程的执行。
      • 在PL/SQL中,数据库服务器支持在过程体中调用其他存储过程
    • 3. 删除存储过程

      DROP PROCEDURE 过程名();

    1. ODBC编程

    对象关系数据库系统

    • 对象关系数据库系统(Object Relational Database System,ORDBS)是面向对象数据模型(Object Oriented Data Model,简称OO模型)和关系数据模型相结合的产物
    • 面向对象数据模型
    1. OO模型的核心概念
    • 1.对象
      • 定义:对象是由一组数据结构和在这组数据结构上的操作的程序代码封装起来的基本单位。
      • 组成部分
        • 属性(Attribute)集合
          • 属性描述对象的状态、组成和特性
        • 方法(Method)集合
          • 描述了对象的行为特性
    • 2. 对象标识OID(Object IDentifier)
      • 概念:面向对象数据库中的每个对象都有一个唯一的不变的标识称为对象标识(OID)
      • 特点:
        • 永久持久性
        • 独立于值的、系统全局唯一的
    • 3. 封装(Encapsulation)
      • 每一个对象是其状态与行为的封装
      • 封装是对象的外部界面与内部实现之间实行清晰隔离的一种抽象,外部与对象的通信只能通过消息
      • 对象封装之后查询属性值必须通过调用方法
    • 4. 类(Class)
      • 对象类(简称类):共享同样属性和方法集的所有对象构成了一个对象类
      • 实例:一个对象是某一类的一个实例(instance)
      • 在OODB中,类是"型",对象是某一类的一个"值"
    1. 类层次(结构)
    2. 继承
    3. 对象的嵌套
    4. 关系数据模型与OO模型的比较

       

       

    • 对象-关系数据库
    1. 对象关系数据库系统中扩展的关系数据类型
    • 1.大对象LOB(Large OBject )类型
      • LOB可存储多达十亿字节的串。
      • LOB分类
        • 二进制大对象BLOB(Binary Large OBject)
        • BLOB用于存储音频、图像数据
        • 字符串大对象CLOB(Character Large OBject)。
        • CLOB用于存储长字符串数据
    • 2.BOOLEAN类型
      • 布尔类型,支持3个真值:true、false和unknown
      • 操作符:NOT、AND、OR、EVERY、ANY
        • 例如 WHERE EVERY(QTY>200)
        •      或WHERE ANY(QTY>200)
        • QTY列为空值:返回unknown;
        • QTY列为非空:
        • 当该列的每一个值都使(QTY>200)为true时,EVERY返回true,否则为false;
        • 当该列的每一个值都使(QTY>200)为false时,ANY返回false,否则为true。
    • 3.集合类型(Collection Type)ARRAY
      • 相同类型元素的有序集合称为数组ARRAY
        • SQL3新增的集合类型
        • 允许在数据库的一列中存储数组
      • SQL3的数组只能是一维的
        • 数组中的元素不能再是数组
        • [例2]

          CREATE TABLE SALES

          (

          ITEM_NO CHAR(20), /*商品号*/

          QTY INTEGER ARRAY12], /*整数数组,存放销售额*/

          PRIMARY KEY(ITEM_NO)

          )

        • 向SALES表插入一个元组:

        INSERT INTO SALES(ITEM_NO,QTY)VALUES

        ('T-shirt2000',ARRAY2001502001005070

        802001020100200)

        • 查找三月份销售额大于100的商品号:

          SELECT ITEM_NO

          FROM SALES

          WHERE QTY[3>100

    • 4. DISTINCT类型
      • SQL3新加了一种DISTINCT类型
      • 定义DISTINCT数据类型语法

        CREAT TYPE <type name>

        AS <built in scalar type name> FINAL

        [ <cast option>]

        [ <method specification commalist>];

      • 没有使用DISTINCT类型
        • 例如,职工的智商字段(IQ)和鞋号字段(SHOE_SIZE)定义成INTEGER类型
        • WHERE SHOE_SIZE > IQ
      • 使用DISTINCT类型
        • 重新定义这两字段类型

          CREAT TYPE SHOE_SIZE_TYPE AS INTEGER FINAL;

          CREAT TYPE IQ_TYPE AS INTEGER FINAL;

        • SHOE_SIZE_TYPE和IQ _TYPE成为两种不同的数据类型
        • 表达式:WHERE SHOE_SIZE > IQ 是非法的
        • 如果在定义类型时设置了选项,下面用法也是合法的:WHERE MY_SHOE_SIZE > CAST (MY_IQ AS SHOE_SIZE)
    1. 对象关系数据库系统中扩展的对象类型及其定义
    • 在ORDBMS中,类型(TYPE)具有类(CLASS)的特征,可以看成类
      • 1.行对象与行类型
        • 定义行类型(ROW TYPE) :

          CREATE ROW TYPE <row_type_name>

          (<component declarations>)

        • 创建行类型
          • [例3]

            CREATE ROW TYPE Person_type

            (pno NUMBER

            name VARCHAR2(100)

            address VARCHAR2(100) );

        • 创建基于行类型的表

          CREATE TABLE <table_name> OF <row_type_name>;

          • [例4]

            CREATE TABLE person_extent OF Person_type

            (pno PRIMARY KEY );

      • 2.列对象与对象类型
        • 可以创建一个对象类型,表的属性可以是该对象类型。
        • 创建列对象语句如下:

          CREATE TYPE <type_name> AS OBJECT

          (<component declarations>);

        • [例5]

          CREATE TYPE address_objtyp AS OBJECT

          (street VARCHAR2(50)

          city VARCHAR2(50) );

          CREATE TYPE name_objtyp AS OBJECT

          (first_name VARCHAR2(30)

          last_name VARCHAR2(30) ) ;

        • 创建表,定义其中的属性是对象类型
        • [例6]

          CREATE TABLE people_reltab (

          Id NUMBER(10)

          name_obj name_objtyp,

          address_obj address_objtyp);

      • 3. 抽象数据类型(Abastract Data Type,ADT)
        • 概念:SQL3允许用户创建指定的带有自身行为说明和内部结构的用户定义类型称为抽象数据类型
        • 定义ADT的一般形式为

          CREATE TYPE <type_name> (

          所有属性名及其类型说明,

          [定义该类型的等于=和小于<函数,]

          定义该类型其他函数(方法));

    1. 参照类型(Reference Type)
    • REF类型(参照类型、引用类型)
      • 引入的原因:
        • 类型之间可能具有相互参照的联系
      • 形式
        • REF <类型名>
      • 特点:
        • REF类型总是和某个特定的类型相联系。
        • 它的值是OID
      • 创建两个表:Employee和Company,两表之间存在相互参照关系,即某个职工在某个公司工作
        • (1)创建行类型
        • [例7]

          CREATE ROW TYPE employee_type(

          name VARCHAR(35)

          age INTEGER );

          CREATE ROW TYPE Comp_type(

          compname VARCHAR(20)

          location VARCHAR(20) );

        • (2)创建基于行类型的表:

          CREATE TABLE Employee OF employee_type;

          CREATE TABLE Company OF Comp_type

        • (3)描述参照关系

          CREATE ROW TYPE Employment_type (

          employee REF (employee_type)

          company REF (Comp_type) );

          CREATE TABLE Employment OF Employment _type

        • 表Employment中某一个元组的employee属性值是某个职工的OID
        • company属性值是该职工所在公司的OID
        • [例8]

          CREATE ROW TYPE employee_type(

          name VARCHAR(35)

          age INTEGER

          emp_id REF(employee_type) );

        • [例9]

          CREATE TABLE Employee OF employee_type

          VALUES FOR emp_id ARE SYSTEM GENERATED;

      • 建立参照属性:

        <参照属性名>[REF(<类型名>)]SCOPE IS <关系名>

        • [例10]

        CREATE TABLE address_objtab OF address_objtyp ;

        • [例11]

          CREATE TABLE people_reltab2 (

          id NUMBER(4) PRIMARY KEY

          name_obj name_objtyp,

          addresss_ref REF(address_objtyp) SCOPE IS address_objtab )

        • [例12]

        CREATE INDEX address_ref_idx ON people_reltab2(address_ref) ;

        • [例13]

          SELECT id

          FROM people_reltab2 p

          WHERE p.address_ref.city='北京' and

          p.address_ref.street='牛街';

    1. 继承性
    • ORDBMS应该支持继承性
      • 一般是单继承性
        • [例14]

          CREATE TYPE emp_type

          UNDER person_type AS(

          emp_id INTEGER

          salary REAL )

          NOT FINAL;

        • NOT FINAL:表示不是类层次结构中最后的"叶结点"
        • FINAL:该类型是类层次结构的叶结点
    1. 子表和超表
    • [例15] 对于下面的类型层次,先定义这些类型TYPE,然后创建基于这些类型的表

      CREATE TYPE person /*创建person 类型,根类型*/

      (id INTEGER

      name VARCHAR(20)

      birthyear INTEGER

      address VARCHAR(40))

      NOT FINAL; /*NOT FINAL表示可以有子类型*/

       

      CREATE TYPE employee /*创建person的子类型employee*/

      UNDER person /*类型employee继承person的属性*/

      (salary INTEGER) /* employee定义自己的属性*/

      NOT FINAL;

       

      CREATE TYPE executive /*创建employee的子类型executive*/

      UNDER employee

      (bonus INTEGER)

      FINAL;

       

      CREATE TYPE student /*创建person的子类型student */

      UNDER person

      (major VARCHAR(10),wage DECIMAL)

      FINAL

    • 例16]Department类型和employee具有相互参照的联系,使用REF来表示这种联系

      CREATE TYPE department

      (ID INTEGER

      manager REF(employee)

      Budget INTEGER);

      ALTER TYPE employee

      ADD ATTRIBUTE dept REF(department);

    • 定义基于这些类型的基本表和表层次:

      CREATE TABLE person_table OF person

      (name WITH OPTIONS NOT NULL);

      CREATE TABLE employee_table OF employee

      UNDER person_table;

      CREATE TABLE exec_table of executive

      UNDER employee_table

      CREATE TABLE student_table OF student

      UNDER person_table;

      CREATE TABLE dept_table OF department

      (manager SCOPE IS employee_table);

      ALTER TABLE employee_table

      ALTER COLUMN dept ADD SCOPE IS dept_table;

    • 查询[例16]所创建的表
      • [例17]

        SELECT name,address

        FROM person_table

        WHERE birthyear <=1970;

    • 关闭子表的检索
      • [例18]

        SELECT name,address

        FROM ONLY person_table

        WHERE birthyear <=1970;

      • INSERT、DELETE、UPDATE对子表和超表的操作规则
        • INSERT:向子表插入一行时一般会在该子表的超表上也插入一行。
        • DELETE:从表删除一行时一般会在该表的超表和子表上也删除相应的一行

     

    展开全文
  • 1.存储过程 是什么?...我们常用的关系型数据库是MySQL,操作数据库的语言一般为SQL语句,SQL在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成某种特定功能...

    很详细的文章,来自https://blog.csdn.net/xiaomingdetianxia/article/details/72475924

    1.存储过程

    是什么?

    我们常用的关系型数据库是MySQL,操作数据库的语言一般为SQL语句,SQL在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成某种特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

    一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对面向对象方法的模拟,它允许控制数据的访问方式。

    优点

    (1)存储过程增强了SQL语言的功能和灵活性:存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
    (2)存储过程允许标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且可以随时对存储过程进行修改,对应用程序源代码毫无影响。
    (3)存储过程能实现较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
    (4)存储过程能减少网络流量:针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织成存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
    (5)存储过程可被作为一种安全机制来充分利用:系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

    2.索引

    是什么?

    索引(Index)是帮助MySQL高效获取数据的数据结构;在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,可以在这些数据结构上实现高级查找算法,提高查询速度,这种数据结构,就是索引。

    索引存储分类

    索引是在MySQL的存储引擎层中实现的,而不是在服务层实现的。所以各种存储引擎支持的索引并不相同,MySQL目前提供了以下4种索引。

    B-Tree 索引:最常见的索引类型,大部分引擎都支持B树索引。
    HASH 索引:只有Memory引擎支持,使用场景简单。
    R-Tree 索引(空间索引):空间索引是MyISAM的一种特殊索引类型,主要用于地理空间数据类型。
    Full-text (全文索引):全文索引也是MyISAM的一种特殊索引类型,主要用于全文索引,InnoDB从MySQL5.6版本提供对全文索引的支持。

    B-TREE索引类型

    普通索引
    这是最基本的索引类型,而且它没有唯一性之类的限制,可以通过以下几种方式创建:
    (1)创建索引: CREATE INDEX 索引名 ON 表名(列名1,列名2,…);
    (2)修改表: ALTER TABLE 表名 ADD INDEX 索引名 (列名1,列名2,…);
    (3)创建表时指定索引:CREATE TABLE 表名 ( […], INDEX 索引名 (列名1,列名 2,…) );
    UNIQUE索引
    表示唯一的,不允许重复的索引,若某一字段的信息不能重复(例如身份证号),可以将该字段的索引设置为unique:
    (1)创建索引:CREATE UNIQUE INDEX 索引名 ON 表名(列名1,列名2,…);
    (2)修改表:ALTER TABLE 表名ADD UNIQUE 索引名 (列名1,列名2,…);
    (3)创建表时指定索引:CREATE TABLE 表名( […], UNIQUE 索引名 (列名1,列名2,…));
    主键:PRIMARY KEY索引
    主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。可以将其理解为 索引名固定为 PRIMARY KEY 的 UNIQUE索引。
    (1)主键一般在创建表的时候指定:“CREATE TABLE 表名( […], PRIMARY KEY (列的列表) ); ”。
    (2)但是,我们也可以通过修改表的方式加入主键:“ALTER TABLE 表名 ADD PRIMARY KEY (列的列表); ”。
    每个表只能有一个主键。 (主键相当于聚合索引,是查找最快的索引)
    注:不能用CREATE INDEX语句创建PRIMARY KEY索引

    常用语法

    设置索引
    在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为数据表增加索引。

    1.ALTER TABLE - ALTER TABLE可以用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

    ALTER TABLE table_name ADD INDEX index_name (column_list)
    
    ALTER TABLE table_name ADD UNIQUE index_name (column_list)
    
    ALTER TABLE table_name ADD PRIMARY KEY (column_list)
    • 1
    • 2
    • 3
    • 4
    • 5

    2.CREATE INDEX - CREATE INDEX可对表增加普通索引或UNIQUE索引。

    CREATE INDEX index_name ON table_name (column_list)
    
    CREATE UNIQUE INDEX index_name ON table_name (column_list)
    • 1
    • 2
    • 3

    删除索引
    可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。

    DROP INDEX index_name ON talbe_name
    
    ALTER TABLE table_name DROP INDEX index_name
    
    ALTER TABLE table_name DROP PRIMARY KEY
    • 1
    • 2
    • 3
    • 4
    • 5

    其中,前两条语句是等价的,删除掉table_name中名为index_name的索引。
    第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。

    如果从表中删除了某列,则索引会受到影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

    查看索引

    mysql> show index from tblname;
    • 1

    设置索引的原则

    1. 较频繁的作为查询条件的字段应该创建索引
    2. 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
    3. 更新非常频繁的字段不适合创建索引
    4. 不会出现在 WHERE 子句中的字段不该创建索引
    5. 索引的选择性较低不宜建索引
      注:所谓索引的选择性(Selectivity),是指不重复的索引值(也叫基数,Cardinality)与表记录数的比值,显然选择性的取值范围为(0, 1]:
    SELECT count(DISTINCT(column_name))/count(*) AS Selectivity FROM table_name;
    • 1

    索引的弊端

    索引是有代价的:索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。

    参考1

    3.B+ 树

    这里写图片描述
    如上图,是一颗b+树,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99。非叶子节点不存储真实的数据,只存储指引搜索方向的数据项,如17、35并不真实存在于数据表中。

    b+树的查找过程

    如图所示,如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO。真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。

    b+树性质

    1.通过上面的分析,我们知道IO次数取决于b+树的高度h,假设当前数据表的数据量为N,每个磁盘块的数据项的数量是m,则有h=㏒(m+1)N,当数据量N一定的情况下,m越大,h越小;而m = 磁盘块的大小 / 数据项的大小,磁盘块的大小也就是一个数据页的大小,是固定的,如果数据项占的空间越小,数据项的数量越多,树的高度越低。这就是为什么每个数据项,即索引字段要尽量的小,比如int占4字节,要比bigint8字节少一半。这也是为什么b+树要求把真实的数据放到叶子节点而不是内层节点,一旦放到内层节点,磁盘块的数据项会大幅度下降,导致树增高。当数据项等于1时将会退化成线性表。
    2.当b+树的数据项是复合的数据结构的时候,比如(name,age,sex),b+树是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询。比如当(张三,F)这样的数据来检索时,b+树可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性质,即索引的最左匹配特性。

    参考2

    4.事务

    是什么?

    事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,由一条或者多条sql语句组成,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

    ACID特性

    事务应该具有4个属性:原子性、一致性、隔离性、持久性。

    原子性(Atomicity):指整个数据库事务是不可分割的工作单位。只有事务中所有的数据库操作都执行成功,整个事务的执行才算成功。事务中任何一个sql语句执行失败,那么已经执行成功的sql语句也必须撤销,数据库状态应该退回到执行事务前的状态。
    一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束,也就是说在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏
    隔离性(Isolation):隔离性也叫做并发控制、可串行化或者锁。事务的隔离性要求每个读写事务的对象与其它事务的操作对象能相互分离,即该事务提交前对其它事务都不可见,这通常使用锁来实现多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
    持久性(Durability):表示事务一旦提交了,其结果就是永久性的,也就是数据就已经写入到数据库了,如果发生了宕机等事故,数据库也能将数据恢复。

    事务的分类

    事务分为一下5类:

    1. 扁平事务;
    2. 带有保存点的扁平事务;
    3. 链事务;
    4. 嵌套事务;
    5. 分布式事务。

    扁平事务
    扁平事务是最简单的一种,也是实际开发中使用的最多的一种事务。在这种事务中,所有操作都处于同一层次,最常见的方式如下:

     BEGIN WORK
         Operation 1
         Operation 2
         Operation 3
         ...
         Operation N
     COMMIT WORK
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    或者:

    BEGIN WORK
         Operation 1
         Operation 2
         Operation 3
         ...
         Operation N
         (Error Occured)
     ROLLBACK WORK
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    扁平事务很简单,但有一个主要缺点是不能提交或回滚事务的某一部分,或者分几个独立的步骤去提交。
    比如有这样的一个例子,我从呼和浩特去深圳,为了便宜,我可能这么干:

     BEGIN WORK
         Operation1:呼和浩特---火车--->北京
         Operation2:北京---飞机--->深圳
     ROLLBACK WORK
    • 1
    • 2
    • 3
    • 4

    但是,如果在Operation1中,从呼和浩特到北京的火车晚点了,错过了航班,怎么办?
    因为扁平事务的特性,那我就需要回滚,我需要再回到呼和浩特,这样做的成本太高,所以就有了下面的第二种事务——带有保存点的扁平事务。

    带有保存点的扁平事务
    这种事务除了支持扁平事务支持的操作外,允许在事务执行过程中回滚到同一事务中较早的一个状态,这是因为可能某些事务在执行过程中出现的错误并不会对所有的操作都无效,放弃整个事务不合乎要求,开销也太大。保存点用来通知系统应该记住事务当前的状态,以便以后发生错误时,事务能回到该状态。

    链事务
    链事务,就是指回滚时,只能恢复到最近一个保存点;而带有保存点的扁平事务则可以回滚到任意正确的保存点。

    嵌套事务

    通过下面实例来说明什么叫嵌套事务

    BEGIN WORK
         SubTransaction1:
                 BEGIN WORK
                     SubOperationX
                 COMMIT WORK
         SubTransaction2:
                 BEGIN WORK
                     SubOperationY
                 COMMIT WORK
         ...
         SubTransactionN:
                 BEGIN WORK
                     SubOperationN
                 COMMIT WORK
     COMMIT WORK
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    这就是嵌套事务,在事务中再嵌套事务,位于根节点的事务称为顶层事务。事务的前驱称为父事务,事务的下一层称为子事务。

    子事务既可以提交也可以回滚,但是它的提交操作并不马上生效,除非由其父事务提交。因此就可以确定,任何子事务都在顶层事务提交后才真正的被提交了。同理,任意一个事务的回滚都会引起它的所有子事务一同回滚。

    分布式事务
    分布式事务通常是指在一个分布式环境下运行的扁平事务,因此需要根据数据所在位置访问网络中的不同节点,比如:通过建设银行向招商银行转账,建设银行和招商银行肯定用的不是同一个数据库,同时二者的数据库也不在一个网络节点上,那么当用户跨行转账,就是通过分布式事务来保证数据的ACID的。

    在MySQL中使用事务

    在MySQL命令行的默认设置下,事务都是自动提交的,即执行SQL语句后就会马上执行COMMIT操作。因此要显示地开启一个事务须使用命令BEGIN或START TRANSACTION,或者执行命令SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

    来看看我们可以使用哪些事务控制语句。

    • BEGIN或START TRANSACTION;显示地开启一个事务;
    • COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;
    • ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
    • SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;
    • RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
    • ROLLBACK TO identifier;把事务回滚到标记点;
    • SET TRANSACTION;用来设置事务的隔离级别。

    事务的隔离级别

    在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。
    InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。这些隔离级别之间的区别如下:
    这里写图片描述

    脏读:一个事务读取到了另外一个事务没有提交的数据;
    比如:事务T1更新了一行记录的内容,但是并没有提交所做的修改。事务T2读取到了T1更新后的行,然后T1执行回滚操作,取消了刚才所做的修改。现在T2所读取的行就无效了;
    不可重复读:在同一事务中,两次读取同一数据,得到内容不同;
    比如:事务T1读取一行记录,紧接着事务T2修改了T1刚才读取的那一行记录。然后T1又再次读取这行记录,发现与刚才读取的结果不同。这就称为“不可重复”读,因为T1原来读取的那行记录已经发生了变化;
    幻读:同一事务中,用同样的操作读取两次,得到的记录数不相同;
    比如:事务T1读取一条指定的WHERE子句所返回的结果集。然后事务T2新插入 一行记录,这行记录恰好可以满足T1所使用的查询条件中的WHERE子句的条件。然后T1又使用相同的查询再次对表进行检索,但是此时却看到了事务T2刚才插入的新行。这个新行就称为“幻像”,因为对T1来说这一行就像突然出现的一样。
    隔离级别越低,事务请求的锁越少或保持锁的时间就越短。InnoDB存储引擎默认的支持隔离级别是REPEATABLE READ;在这种默认的事务隔离级别下已经能完全保证事务的隔离性要求,即达到SQL标准的SERIALIZABLE级别隔离。

    我们可以可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别。它的语法如下:

    5.视图

    视图是一种虚拟的表,具有和物理表相同的功能,可以对视图进行增,改,查操作,视图通常是有一个表或者多个表的行或列的子集,对视图的修改不影响基本表,它使得我们获取数据更容易,相比多表查询。

    6.超键 候选键 主键 外键

    超键:在关系中能唯一标识元组(数据库中的一条记录)的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。
    候选键:是最小超键,即没有冗余元素的超键。
    主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合,用户选作元组标识的一个侯选键称为主键。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
    外键:在一个表中存在的另一个表的主键称此表的外键,外键主要是用来描述两个表的关系。

    7.三个范式

    第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

    第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。
    第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如 果存在”A → B → C”的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段 → 非关键字段 x → 非关键字段y。

    8.E-R图

    是什么?

    E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

    E-R方法是“实体-联系方法”(Entity-Relationship Approach)的简称。它是描述现实世界概念结构模型的有效方法,是表示概念模型的一种方式,用矩形表示实体型,矩形框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。

    构成

    在ER图中有如下四个成分:
    矩形框:表示实体,在框中记入实体名。
    菱形框:表示联系,在框中记入联系名。
    椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
    连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)

    实体型(Entity):具有相同属性的实体具有相同的特征和性质,用实体名及其属性名集合来抽象和刻画同类实体;在E-R图中用矩形表示,矩形框内写明实体名;比如学生张三丰、学生李寻欢都是实体。如果是弱实体的话,在矩形外面再套实线矩形。
    属性(Attribute):实体所具有的某一特性,一个实体可由若干个属性来刻画。在E-R图中用椭圆形表示,并用无向边将其与相应的实体连接起来;比如学生的姓名、学号、性别、都是属性。如果是多值属性的话,在椭圆形外面再套实线椭圆,如果是派生属性则用虚线椭圆表示。
    联系(Relationship):联系也称关系,信息世界中反映实体内部或实体之间的联系。实体内部的联系通常是指组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系。在E-R图中用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n),比如老师给学生授课存在授课关系,学生选课存在选课关系。如果是弱实体的联系则在菱形外面再套菱形。

    联系可分为以下 3 种类型:
    (1) 一对一联系(1 ∶1)
    例如,一个班级有一个班长,而每个班长只在一个班级任职,则班级与班长的联系是一对一的。
    (2) 一对多联系(1 ∶N)
    例如,某校教师与课程之间存在一对多的联系“教”,即每位教师可以教多门课程,但是每门课程只能由一位教师来教。
    (3) 多对多联系(M ∶N)
    例如,学生与课程间的联系(“学 ”)是多对多的,即一个学生可以学多门课程,而每门课程可以有多个学生来学。联系也可能有属性。例如,学生“ 学” 某门课程所取得的成绩,既不是学生的属性也不是课程的属性。由于“ 成绩” 既依赖于某名特定的学生又依赖于某门特定的课程,所以它是学生与课程之间的联系“ 学”的属性。

    作图步骤

    ⑴确定所有的实体集合
    ⑵选择实体集应包含的属性
    ⑶确定实体集之间的联系
    ⑷确定实体集的关键字,用下划线在属性上表明关键字的属性组合
    ⑸确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁注明联系的类型。

    实例:
    ER图实例

    参考3

    参考4

    9.处理重复记录的常用操作

    (1)查找表中多余的重复记录,重复记录是根据单个字段(column_name)来判断。

    select * from table_name where column_name in (select column_name from table_name group by column_name having count(column_name) > 1)
    • 1

    (2)删除表中多余的重复记录,重复记录是根据单个字段(column_name)来判断,只留有id最小的记录。

    delete from table_name where column_name in (select b.column_name from (select column_name from table_name group by column_name having count(column_name)>1)b);
    • 1

    (3)查找表中多余的重复记录(多个字段)。

    select * from table_name a where (a.column_name1,a.column_name2) in (select column_name1,column_name2 from vitae group by column_name1,column_name2 having count(*) > 1)
    • 1

    (4)删除表中多余的重复记录(多个字段),只留有rowid最小的记录 。

    delete from table_name a where (a.column_name1,a.column_name2) in (select column_name1,column_name2 from table_name group by column_name1,column_name2 having count(*) > 1) and rowid not in (select min(rowid) from table_name group by column_name1,column_name2 having count(rowid)>1)
    • 1

    10.批处理

    MySQL 支持以批处理的方式执行一批SQL语句,例如:

    create table test(id int,name varchar(20));
    insert into test values(1,'watson');
    • 1
    • 2

    batchfile.txt里包含下面的一些SQL 语句,此文件在linux系统中的路径/home/wming/batchfile.txt:

    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    insert into test select * from test;
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    执行上面的文件,test 表在 MyZone 数据库中:

    mysql -uroot -p -D MyZone < /home/wming/batchfile.txt
    • 1

    上面的例子通过批处理执行插入语句,下面的例子是通过批处理执行查询语句:

    此时的batchfile2.txt里含有query的信息:

    select * from test limit 200;
    insert into test select * from test;
    insert into test select * from test;
    • 1
    • 2
    • 3

    下面的mysql0716.out就记录了 select * from test limit 200 查询语句的结果集。

    mysql -uroot -p -D MyZone < /home/wming/batchfile2.txt >/home/wming/mysql0716.out
    • 1

    11.MyISAM与InnoDB的区别是什么?

    1、存储结构

    MyISAM:每个MyISAM表在磁盘上存储成三个文件,文件的名字以表的名字开始,扩展名指出文件类型:.frm文件存储表定义;数据文件的扩展名为.MYD (MYData);索引文件的扩展名是.MYI (MYIndex)。
    InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。

    2、存储空间

    MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
    InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

    3、可移植性、备份及恢复

    MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
    InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。

    4、事务支持

    MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
    InnoDB:支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

    这一点是非常重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。

    5、AUTO_INCREMENT

    MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
    InnoDB: InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。

    6、表锁差异

    MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
    InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的性能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。

    7、 全文索引

    MyISAM:支持 FULLTEXT类型的全文索引。
    InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。

    8、表主键

    MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
    InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。

    9、 表的具体行数

    MyISAM:保存有表的总行数,如果select count() from table;会直接取出出该值。
    InnoDB:没有保存表的总行数,如果使用select count() from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。

    10、CURD操作

    MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
    InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。

    11、 外键

    MyISAM:不支持
    InnoDB:支持
    通过上述的分析,基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体视情况而定。
    参考

    12. 乐观锁 与 悲观锁

    数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和一致性以及数据库的统一性。

    乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制采用的主要技术手段。

    无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像memcache、hibernate、tair等都有类似的概念。

    针对不同的业务场景,应该选用不同的并发控制方式。所以,不要把乐观并发控制和悲观并发控制狭义的理解为仅在DBMS中存在的概念,更不要把他们和数据库中提供的锁机制(行锁、表锁、排他锁、共享锁)混为一谈。其实,在DBMS中,悲观锁正是利用数据库本身提供的锁机制来实现的。

    悲观锁

    在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行的操作在某行数据上应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。

    悲观并发控制主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。

    悲观锁:正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度(悲观),因此,在整个数据处理过程中,将数据处于锁定状态。 悲观锁的实现,往往依靠数据库提供的锁机制 (也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。

    悲观锁的流程:
    1.在对某一记录进行修改前,先尝试为该记录加上排他锁(exclusive locking)。
    2.如果加锁失败,说明该记录正在被修改,那么当前操作可能要等待或者抛出异常, 具体响应方式由开发者根据实际情况决定。
    3.如果成功加锁,那么就可以对记录做修改,事务完成后就会解锁了。
    4.其间如果有其他事务要对该记录做修改或加排他锁,都会等待该事务将该记录解锁或直接抛出异常。

    MySQL InnoDB中使用悲观锁

    注意:要使用悲观锁,必须先关闭mysql数据库的自动提交功能,因为MySQL默认使用autocommit模式,也就是说,当你执行一个更新操作后,MySQL会立刻将结果进行提交。

    set autocommit=0;
    • 1
    //0.开始事务
    begin;/begin work;/start transaction; (三者选一就可以)
    //1.查询出商品信息
    select status from t_goods where id=1 for update;
    //2.根据商品信息生成订单
    insert into t_orders (id,goods_id) values (null,1);
    //3.修改商品status为2
    update t_goods set status=2;
    //4.提交事务
    commit;/commit work;
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    上面的查询语句中,我们使用了select…for update的方式,这样就通过开启排他锁的方式实现了悲观锁。此时在t_goods表中,id为1的 那条数据就被我们锁定了,其它事务必须等本次事务提交之后才能对该记录进行操作。这样我们可以保证当前的数据不会被其它事务修改。

    注意:上面提到,使用select…for update会把数据给锁住,不过我们需要注意一下锁的级别,MySQL InnoDB默认为行级锁。行级锁都是基于索引的,如果一条SQL语句没有用到索引是不会使用行级锁的,会使用表级锁把整张表锁住,这点需要注意。

    优点与不足:
    优点:悲观并发控制实际上是采用“先取锁再访问”的保守策略,为数据处理的安全性提供了保证;
    缺点:在效率方面,处理加锁的机制会让数据库产生额外的开销,同时会增加产生死锁的机率;另外,在只读型事务中由于不会产生冲突,也没必要使用锁,这样做只会增加系统负载;还会降低并行性,一个事务如果锁定了某行数据,其他事务就必须等待该事务处理完才可以处理那行数

    乐观锁

    在关系数据库管理系统里,乐观并发控制(又名“乐观锁”,Optimistic Concurrency Control,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理数据时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务对该数据做过修改。如果其他事务更新过该数据的话,正在提交的事务会进行回滚。乐观事务控制最早是由孔祥重(H.T.Kung)教授提出。

    乐观锁( Optimistic Locking )是相对悲观锁而言,乐观锁假设数据一般情况下不会造成冲突,所以在事务对数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回错误信息,让用户决定如何去做。

    相对于悲观锁,在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制,一般用记录数据版本的方式实现乐观锁。

    数据版本:为数据增加的一个版本标识。当读取数据时,将版本标识的值一同读出,数据每更新一次,便对版本标识进行一次更新。当事务提交更新的时候,需要判断数据库表对应记录的当前版本信息与第一次取出来的版本标识是否一致,如果数据库表当前版本号与第一次取出来的版本标识值相等,则予以更新,否则认为是过期数据。

    实现数据版本有两种方式,第一种是使用版本号,第二种是使用时间戳。

    使用版本号实现乐观锁

    使用版本号时,可以在数据初始化时指定一个版本号,每次对数据的更新操作都对版本号执行+1操作。并判断当前版本号是不是该数据的最新的版本号。

    1.查询出商品信息
    select (status,status,version) from t_goods where id=#{id}
    2.根据商品信息生成订单
    3.修改商品status为2
    update t_goods 
    set status=2,version=version+1
    where id=#{id} and version=#{version};
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    乐观并发控制假设事务之间的数据竞争(data race)概率比较小,因此尽可能直接做下去,直到提交的时候才去锁定,所以不会产生任何锁和死锁。但如果直接简单这么做,还是有可能会遇到不可预期的结果,例如两个事务都读取了数据库的某一行,经过修改以后写回数据库,这时就遇到了问题。

    13.左 右 连接 全连接 内连接

    可参考

    本文参考自网络,知识在于分享!

    展开全文
  • 数据模型(SQLServer数据库原理) 目录 一、信息的三种世界 二、概念模型 三、常见的三种数据模型 一、信息的三种世界 1、信息处理的过程: 将客观世界进行抽象为信息,再对信息进行整理规范后再以数据的形式存放到...

    数据模型(SQLServer数据库原理)

    目录

    一、信息的三种世界
    二、概念模型
    三、常见的三种数据模型

    一、信息的三种世界

    1、信息处理的过程: 将客观世界进行抽象为信息,再对信息进行整理规范后再以数据的形式存放到数据库中
    2、信息的三种世界:

    1. 现实世界: 客观存在的世界,真实存在
    2. 信息世界(概念世界): 对现实世界的抽象,客观存在的事物在信息世界中称为实体,放映事物间联系的是实体模型或者概念模型,现实世界在人脑中的抽象
    3. 数据世界(机器世界): 信息世界中信息数据化后对应的相应产物

    二、概念模型

    1、概念模型的作用: 描述实体和实体间的联系
    2、基本概念:

    1. 实体: 客观存在并可以相互区分的事物,可以是单独的事物也可以是事物间的联系。例如:学生,课程,选修关系等
    2. 属性: 实体具有的某些特性,对实体进行描述。例如学生的学好和姓名
    3. 码: 能够唯一标识实体的属性或者属性集
    4. 实体型: 具有相同属性的实体具有共同的特征和性质,用实体名及属性名集合来抽象和刻画同类实体,称为实体型。例如:学生(学好,姓名,性别等)
    5. 实体集: 同型实体的集合。例如:全体学生能够
    6. 联系:
      (1)一对一联系:对于实体集A中的每一个实体,实体集B中最多有一个实体与之对应,反过来不成立(1:1)
      (2)一对多联系:对于实体集A中的每一个实体,实体集B中有多个实体与之对应,反过来,实体集B中的实体,在A中只有一个与之对应(1:M)
      (3)多对多联系:A中的每一个实体,B中有多个与之对应,反过来B中的每一个实体,A中有多个与之对应(N:M)

    3、E-R模型

    1. 矩形表示实体
    2. 菱形标识联系
    3. 椭圆或者园表示属性
      在这里插入图片描述

    三、常见的三种数据模型

    1、数据模型: 对客观世界事物和联系的数据描述,是概念模型的数据化。提供标识和组织数据的方法
    2、数据模型的组成:

    1. 数据结构:对数据库静态特征的描述,数据组织方式和联系进行框架型描述。有层次结构,网状结构,关系结构等
    2. 数据操作:对数据库动态特征的描述
    3. 数据完整性约束:保证数据的正确性、完整性、一致性和有效性

    3、层次模型
    在这里插入图片描述
    特点:

    1. 根节点,只有一个节点没有双亲节点
    2. 根节点之外的其他节点有且只有一个双亲节点

    4、网状模型
    特点: 允许多个节点没有双亲节点,也允许一个节点有多个双亲节点
    5、关系模型
    在这里插入图片描述
    特点: 用二维表格结构表示实体及实体间联系的数据模型
    关系模型的一些概念:

    • 关系: 一张二维表就是一个关系,有关系名
    • 元组: 二维表中的行,也称为记录
    • 属性: 二维表中的列,也称为字段
    • 域: 属性的取值范围
    • 关系模式: 二维表的静态框架的信息描述。结构为:表名(属性1,属性2、、、、、)
    • 关键字或码: 能唯一标识元组的属性或属性组
    • 候选关键字或候选码: 存在多个能唯一标识元组的属性或属性组,都称为候选码
    • 主键或主码: 若干候选码中选一个作为主键,一张表中只能有一个主键
    • 主属性和非主属性: 包含在任何候选关键字中的属性为主属性;不包含在任何候选关键字中的属性称为非主属性
    • 外键或外码: 一个关系的属性或属性组不是该关系的主键或只是主键的一部分,确实另一个关系的主键,则称这样的属性或属性组为外码。外码将表联系在一起
    展开全文
  • ——数据库原理(2013版) 2015年4月9日录入 目 录   第1章 数据库原理概述 - 7 - 1.1 数据库技术基本概念 - 7 - 1.1.1 信息、数据与数据处理 - 7 - 1.1.2 数据库、数据字典、数据库管理系统、数据库系统 -...
  • 数据库管理系统的角度看,数据库系统的结构通常分为三级模式的总体结构,在这种模式下,形成了二级映像,实现了数据的独立性。其中三级模式结构指的是外模式、模式和内模式,二级映像指的是外模式/模式映像、模式/...
  • 数据库基本知识点整理,面试、考研、刷题必备~
  • 1) 需求分析2) 概念结构设计3) 逻辑结构设计4) 数据库物理设计5) 数据库实施6) 数据库运行和维护这是一个完整的实际数据库及其应用系统的设计过程。不仅包括设计数据库本身,还包括数据库的实施、数据库运行和维护。...
  • 数据库原理常见问答

    2019-07-30 18:16:01
    版权声明:欢迎转载 https://blog.csdn.net/liaoqianwen123/article/details/25322151 常见问答 1...
  • 实验一题目内容 实验一 关系数据库管理系统的使用 数据库管理系统是数据库系统...SQL Server 2008是一个功能强大、操作方便的数据库管理系统,其日益受到广大数据库用户的青睐,因此为了更好地掌握数据库原理课程中的概
  • 关系数据库系统(数据库原理) 目录 一、关系数据结构 二、关系的完整性 三、关系运算 四、关系的规范化 一、关系数据结构 1、关系的定义和性质 (1)、 关系的数学定义: 域:一组有相同数据类型的值得...
  • 数据库的有哪些数据模型? 数据结构:对象与对象之间的联系,对系统静态特性的描述; 数据操作:对数据库中各种对象的实例允许执行的操作集合; 完整约束性:用以限定数据模型的数据库状态以及状态的变化。两种...
  • 数据库原理知识梳理 一、DBS系统构成 1、DB的概念与特点: 数据库(DB)是存储在计算机系统内的有结构的数据集合,是相关数据的集合,数据由数据库管理系统统一管理和维护。 数据(Data)指的是可观察的客观事实,...
  • 第二步:对中间结果进行分组,得到每个组的性质,或者是一些值 第三步:分组后进行排序 选择表中的若干列 查询经过计算的值 注:用单引号括起来的表示一个常量,看作虚列,最后lower(Sdept)是按照...
  • 参考书籍:《数据库系统原理与应用》——人民邮电出版社 数据库管理系统(DataBase Management System,DBMS),是位于操作系统与用户之间的一层数据管理软件,是一个帮助用户建立、使用和管理数据库的软件系统,是...
  • 数据库原理及应用实验指导书 ****大学计算机与信息技术学院 2011年6月 目 录 内容简介 1 实验一熟悉SQL SERVER 2005的环境及数据库的管理 11 实验二数据表的创建与管理 19 实验三数据表的操作 24 实验...
  • 如果某个数据库模式都是第一范式的,则称该数据库模式是属于第一范式的数据库模式。 比如有一个关系 study={学号,课程},若有这样几行记录: [img]...
  • 数据库系统的基本原理 数据库系统概述 数据处理和数据管理 人工管理阶段 文件管理系统 数据库系统 数据库管理系统 数据定义功能 数据操纵功能 数据库的运行管理 数据库的建立和维护 数据库系统:是指在计算机...
1 2 3 4 5 ... 20
收藏数 4,603
精华内容 1,841