计算机二级Python公共基础部分

计算机二级Python公共基础部分


  1. 公共基础知识不单独考试,与其余二级科目组合在一块儿,做为二级科目考核内容的一部分。
  2. 考试方式为上机考试,10 道选择题,占 10 分。

1. 基本数据结构与算法

1.1 算法的基本概念

算法是一种设计好的计算序列,用来解决一类问题。
算法复杂的包括:时间复杂度和空间复杂度。时间复杂度指计算工做量,空间复杂度指内存空间的要求。python

综合起来:若是一个算法的执行次数是 T(n),那么只保留最高次项,同时忽略最高项的系数后获得函数 f(n),此时算法的时间复杂度就是 O(f(n))。为了方便描述,下文称此为 大O推导法。程序员

  • 对于一个循环,假设循环体的时间复杂度为 O(n),循环次数为 m,则这个
    循环的时间复杂度为 O(n×m)。
void aFunc(int n) {
    for(int i = 0; i < n; i++) {         // 循环次数为 n
        printf("Hello, World!\n");      // 循环体时间复杂度为 O(1)
    }
}

此时时间复杂度为 O(n × 1),即 O(n)。web

  • 对于多个循环,假设循环体的时间复杂度为 O(n),各个循环的循环次数分别是a, b, c…,则这个循环的时间复杂度为 O(n×a×b×c…)。分析的时候应该由里向外分析这些循环。
void aFunc(int n) {
    for(int i = 0; i < n; i++) {         // 循环次数为 n
        for(int j = 0; j < n; j++) {       // 循环次数为 n
            printf("Hello, World!\n");      // 循环体时间复杂度为 O(1)
        }
    }
}

此时时间复杂度为 O(n × n × 1),即 O(n^2)。算法

  • 对于顺序执行的语句或者算法,总的时间复杂度等于其中最大的时间复杂度。
void aFunc(int n) {
    // 第一部分时间复杂度为 O(n^2)
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            printf("Hello, World!\n");
        }
    }
    // 第二部分时间复杂度为 O(n)
    for(int j = 0; j < n; j++) {
        printf("Hello, World!\n");
    }
}

此时时间复杂度为 max(O(n^2), O(n)),即 O(n^2)。数据库

  • 对于条件判断语句,总的时间复杂度等于其中 时间复杂度最大的路径 的时间复杂度。
void aFunc(int n) {
    if (n >= 0) {
        // 第一条路径时间复杂度为 O(n^2)
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                printf("输入数据大于等于零\n");
            }
        }
    } else {
        // 第二条路径时间复杂度为 O(n)
        for(int j = 0; j < n; j++) {
            printf("输入数据小于零\n");
        }
    }
}

此时时间复杂度为 max(O(n^2), O(n)),即 O(n^2)。数组

空间复杂度(Space Complexity)数据结构

S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函数。渐近空间复杂度也经常简称为空间复杂度。
空间复杂度(Space Complexity)是对一个算法在运行过程当中临时占用存储空间大小的量度。一个算法在计算机存储器上所占用的存储空间,包括:框架

  • 存储算法自己所占用的存储空间
  • 算法的输入输出数据所占用的存储空间
  • 算法在运行过程当中临时占用的存储空间

算法的输入输出数据所占用的存储空间是由要解决的问题决定的,是经过参数表由调用函数传递而来的,它不随本算法的不一样而改变。存储算法自己所占用的存储空间与算法书写的长短成正比,要压缩这方面的存储空间,就必须编写出较短的算法。算法在运行过程当中临时占用的存储空间随算法的不一样而异,有的算法只须要占用少许的临时工做单元,并且不随问题规模的大小而改变,咱们称这种算法是“就地"进行的,是节省存储的算法,如这一节介绍过的几个算法都是如此;有的算法须要占用的临时工做单元数与解决问题的规模n有关,它随着n的增大而增大,当n较大时,将占用较多的存储单元,例如将在第九章介绍的快速排序和归并排序算法就属于这种状况。数据库设计

1.2 数据结构

数据结构的定义ide

程序=数据结构+算法

在计算机科学中,数据结构(datastructure)是计算机中存储、组织数据的方式。指相互之间存在一种或多种特定关系的数据元素的集合。一般状况下,精心选择的数据结构能够带来更高的运行或者存储效率。

  1. 数据的逻辑结构
    反映数据元素之间的关系的数据元素集合的表示。数据的逻辑结构包括集合、线形结构、树形结构和图形结构四种
  2. 数据的存储结构
    数据的逻辑结构在计算机存储空间种的存放形式称为数据的存储结构。经常使用的存储结构有顺序、连接、索引等存储结构。

常见的数据结构:

数组(Array)
堆栈(Stack)
队列(Queue)
链表(Linked List)
树(Tree)
图(Graph)
堆(Heap)
散列表(Hash)
线性结构和非线性结构

根据数据结构中各数据元素之间先后件关系的复杂程度,通常将数据结构分为两大类型:线性结构和非线性结构。

1.3 线性表

线性表的定义
线性表(Linear List)是由n(n≥0)个数据元素(结点)a[0],a[1],a[2]…,a[n-1]组成的有限序列。

  • 数据元素的个数n定义为表的长度 = “list”.length() (“list”.length() = 0(表里没有一个元素)时称为空表)
  • 将非空的线性表(n>=0)记做:(a[0],a[1],a[2],…,a[n-1])
  • 数据元素a[i](0≤i≤n-1)只是个抽象符号,其具体含义在不一样状况下能够不一样

常见的线性表有顺序表链表
顺序表是线性表的顺序存储结构,指的是用一组地址连续的存储单元依次存储线性表的数据元素。
顺序表常见操做*(括号中为算法平均时间复杂度,没有写明的具体复杂度依赖不一样算法和运算规则)*:

插入(O(n))、删除(O(n))、查找、排序、分解、合并、复制(O(n))、逆转(O(n))

1.4 栈和队列

栈实际上也是一个线性表,只不过是一种特殊的线性表。栈是只能在表的一端进行插入和删除运算的线性表,一般称插入、删除这一端为栈顶(TOP),另外一端为栈底(BOTTOM)。当表中没有元素时称为栈空。 栈顶元素老是后被插入(入栈)的元素,从而也是最早被移除(出栈)的元素;栈底元素老是最早被插入的元素,从而也是最后才能被移除的元素。因此栈是个**后进先出(LIFO)**的数据结构

栈的基本运算有三种:入栈、出栈与读栈顶,时间复杂度都是O(1)

队列

队列是只容许在一端删除,在另外一端插入的顺序表,容许删除的一端叫作队头,用对头指针 front 指向对头元素的下一个元素,容许插入的一端叫作队尾,用队尾指针 rear 指向队列中的队尾元素,所以,从排头指针 front 指向的下一个位置直到队尾指针 rear 指向的位置之间全部的元素均为队列中的元素。队列的修改是 先进先出(FIFO) 。往队尾插入一个元素称为入队运算。从对头删除一个元素称为退队运算。

队列主要有两种基本运算:入队运算和退队运算,复杂度都是O(1)

1.5 链表

链表指线性表的链式存储结构。

  • 单链表
    一组任意的存储单元存储线性表的数据元素,所以,为了表示每一个数据元素 ai 与其直接后继数据元素 ai+1 之间的逻辑关系,对数据元素 ai 来讲,除了存储其自己的信息(数据域)以外,还需存储一个变量指示其直接后继的信息(指针域)。这两部分信息组成数据元素 ai 的存储映象,称为结点。N 个结点链结成一个链表。该链表就是传统的单向链表。

有时,咱们在单链表的第一个结点以前附设一个结点,称之为头结点,它指向表中第一个结点。头结点的数据域可 以不存储任何信息,也可存储如线性表的长度等类的附加信息,头结点的指针域存储指向第一个结点的指针。在单链表中,取得第 I 个数据元素必须从头指针出发寻找,所以,链表是非随机存取的存储结构。

  • 循环链表
    以上提到的链表指针域只包括一个指针,指向下一个数据的地址,若是咱们将链表最后一个结点指针域的指针指向链表的头结点地址,就构成了一个环状的存储结构,咱们称做循环链表。

  • 双向链表
    固然咱们能够给每一个结点的指针域再添加一个指针,使其指向前一个数据结点的地址,这样就构成了双向链表,而将头结点的前一个结点指向尾结点,同时将尾结点的下一个结点指向头结点就构成了双向循环链表。

若是链表的尾结点的指针域指向了该链表以前的任意一个结点,咱们称该链表为有环链表。环形链表就是其中一个特例
常见操做:

插入(O(n))、删除(O(n))、查找、排序、分解、合并、复制(O(n))、逆转

1.6 树和二叉树


  • 树是一种简单的非线性结构。在树这种数据结构中,全部数据元素之间的关系具备明显的层次特性。 在树结构中,每个结点只有一个前件,称为父结点。没有前件的结点只有一个,称为树的根结点,简称树的根。每个结点能够有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。 在树结构中,一个结点所拥有的后件的个数称为该结点的,全部结点中最大的度称为树的度。树的最大层次称为树的深度。

  • 二叉树
    每个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
    二叉树性质

  1. ···
  2. ···
  3. 彻底二叉树和满二叉树
  • 二叉树的储存结构
    与线性链表相似,用于存储二叉树中各元素的存储结点也由两部分组成:数据域和指针域。但在二叉树中,因为每个元素能够有两个后件(即两个子结点),所以,用于存储二叉树的存储结点的指针域有两个:一个用于指向该结点的左子结点的存储地址,称为左指针域;另外一个用于指向该结点的右子结点的存储地址,称为右指针域

  • 二叉树的遍历
    二叉树的遍历是指不重复地访问二叉树中的全部结点。二叉树的遍历能够分为如下三种:

  1. 前序遍历(DLR):
    若二叉树为空,则结束返回。不然:首先访问根结点,而后遍历左子树,最后遍历右子树;而且,在遍历左右子树时,仍然先访问根结点,而后遍历左子树,最后遍历右子树。
  2. 中序遍历(LDR):
    若二叉树为空,则结束返回。不然:首先遍历左子树,而后访问根结点,最后遍历右子树;而且,在遍历左、右子树时,仍然先遍历左子树,而后访问根结点,最后遍历右子树。
  3. 后序遍历(LRD):
    若二叉树为空,则结束返回。不然:首先遍历左子树,而后遍历右子树,最后访问根结点,而且,在遍历左、右子树时,仍然先遍历左子树,而后遍历右子树,最后访问根结点。

1.7 查找

  1. 顺序查找与二分查找
  • 顺序查找
    从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到二者相符,查到所要找的元素为止。不然就是表中没有要找的元素,查找不成功。
  • 二分查找
    先肯定待查找记录所在的范围,而后逐步缩小范围,直到找到或确认找不到该记录为止。注意二分法应用的前提是有顺序储存结构的有序表
  1. 基本排序算法
  • 交换类排序
  • 选择类排序
  • 插入类排序

二 程序设计基础

2.1 程序设计方法与风格

程序的设计风格强调清晰第一,效率第二

w=input('please input your weight/Kg: ')#输入用户体重和身高
h=input('please input your height/m: ')
weight=float(w)#input函数默认为输入字符串,所以须要转化为浮点数
height=float(h)
bmi=round((weight/height**2),2)#计算公式,同时用round函数控制小数位
#bmi_str=str(bmi)
#print('your BMI value is :'+bmi_str)#两种不一样的输出字符串和数字组合的方法
print ("your BMI value is : ",bmi)
if bmi<18.5:#循环过程当中依然强调冒号和缩进
    print('you are too light!')#注意python语言不能层层缩进
elif bmi<25:
    print ('you are very healthy!')
elif bmi<28:
    print('you are over weight.')
elif bmi<32:
    print('you are obesity.')
else :
    print('Severe obesity!!!')

须要考虑到的因素:

  1. 源程序的文档化
  • 符号化的命名
  • 程序的注释:包括序言性注释和功能性注释
  • 视觉组织:利用空格、空行、缩进使得代码层次更为清晰
  1. 数听说明
  • 数听说明的次序规范化;
  • 说明语句中变量安排有序化;
  • 使用注释来讲明复杂数据的结构。
  1. 语句的结构
  • 在一行内只写一条语句;
  • 程序编写应优先考虑清晰性
  • 避免过多的临时变量,提升可读性;
  • 尽可能使用库函数;
  • 尽可能实现模块化,且保持模块功能单一;
  1. 输入和输出

2.2 结构化程序设计

  1. 自顶向下:程序设计时,应先考虑整体,后考虑细节;先考虑全局目标,
    后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设
    计,逐步使问题具体化。
  2. 逐步求精:对复杂问题,应设计一些子目标做过渡,逐步细化。
  3. 模块化:一个复杂问题,确定是由若干稍简单的问题构成。模块化是把程
    序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每一个小目标
    称为一个模块。
  4. 限制使用 goto 语句:以避免形成程序流程的混乱,使理解和调试程序都产生困难

基本结构

  • 顺序结构:一种简单的程序设计,即按照程序语句行的天然顺序,一条语句
    一条语句地执行程序,它是最基本、最经常使用的结构。
  • 选择结构:又称分支结构,包括简单选择和多分支选择结构,可根据条件,
    判断应该选择哪一条分支来执行相应的语句序列。
  • 重复结构:又称循环结构,可根据给定的条件,判断是否须要重复执行某一
    相同的或相似的程序段。

2.3 面向对象的程序设计方法,对象,方法,属性及继承与多态性

客观世界中任何一个事物均可以被当作是一个对象,面向对象方法的本质就是主
张从客观世界固有的事物出发来构造系统,提倡人们在现实生活中经常使用的思惟来
认识、理解和描述客观事物,强调最终创建的系统可以映射问题域。也就是说,
系统中的对象及对象之间的关系可以如实地反映问题域中固有的事物及其关系。
面向对象方法的主要优势:

  • 与人类习惯的思惟方法一致;
  • 稳定性好;
  • 可重用性好;
  • 易于开发大型软件产品;
  • 可维护性好

面向对象的程序设计主要考虑的是提升软件的可重用性。

对象

一个对象由对象名、属性和操做三部分组一个对象由对象名、属性和操做三部分组成
1) 对象是面向对象方法中最基本的概念,能够用来表示客观世界中的任何实体,对象是实体的抽象。面向对象的程序设计方法中的对象是系统是构成系统的一个基本单位,由一组表示其静态特征的属性和它可执行的一组操做组成。对象是属性和方法的封装体
2) 属性即对象所包含的信息,它在设计对象时肯定,通常只能经过执行对象的操做来改变。
3) 操做描述了对象执行的功能,操做也称为方法或服务。操做是对象的动态属性。

对象的特色

1)标识唯一性。指对象是可区分的,而且由对象的内在本质来区分,而不是
经过描述来区分;
2)分类性。指能够将具备相同属性的操做的对象抽象成类;
3)多态性。指同一个操做能够是不一样对象的行为;
4)封装性。从外面看只能看到对象的外部特性,即只需知道数据的取值范围
和能够对该数据施加的操做,根本无需知道数据的具体结构以及实现操做的算
法。对象的内部,即处理能力的实行和内部状态,对外是不可见的。从外面不能
直接使用对象的处理能力,也不能直接修改其内部状态,对象的内部状态只能由
其自身改变。经过对象的封装性能够实现信息隐蔽
5)模块独立性好。对象是面向对象的软件的基本模块,它是由数据及能够对
这些数据施加的操做所组成的统一体,并且对象是以数据为中心的,操做围绕对
其数据所需作的处理来设置,没有无关的操做。从模块的独立性考虑,对象内部
各类元素彼此结合得很紧密,内聚性强。

其余

1)类是指具备共同属性、共同方法的对象的集合。因此类是对象的抽象,对象是对应类的一个实例。
2)消息是一个实例与另外一个实例之间传递的信息。消息的组成包括:
接收消息的对象的名称;
消息标识符,也称消息名;
零个或多个参数
*
P.S. 在面向对象方法中,一个对象请求另外一个对象为其服务的方式是经过发送消息。
3)继承是指可以直接得到已有的性质和特征,而没必要重复定义他们。继承分单继承和多重继承。单继承指一个类只容许有一个父类,多重继承指一个类容许有多个父类。

三 软件工程基础

3.1 软件工程基本概念,软件生命周期概念,软件工具与软件开发环境

软件

计算机软件是包括程序、数据及相关文档的完整集合
1)软件是一种逻辑实体,而不是物理实体,具备抽象性;
2)软件的生产与硬件不一样,它没有明显的制做过程;
3)软件在运行、使用期间不存在磨损、老化问题;
4)软件的开发、运行对计算机系统具备依赖性,受计算机系统的限制,这致使了软件移植的问题;
5)软件复杂性高,成本昂贵;

软件工程

软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。
软件工程的主要思想是将工程化原则运用到软件开发过程,它包括 3 个要素:方法、工具和过程。方法是完成软件工程 项目的技术手段;工具是支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。

软件生命周期

*软件产品从提出、实现、使用维护到中止使用退役的过程。*软件生命周期分为软件定义、软件开发及软件运行维护三个阶段:
1)软件定义阶段:包括制定计划和需求分析。
制定计划:肯定总目标;可行性研究;探讨解决方案;制定开发计划。
需求分析:对待开发软件提出的需求进行分析并给出详细的定义。
2)软开发阶段:
软件设计:分为概要设计和详细设计两个部分。
软件实现:把软件设计转换成计算机能够接受的程序代码。
软件测试:在设计测试用例的基础上检验软件的各个组成部分。
3)软件运行维护阶段:软件投入运行,并在使用中不断地维护,进行必要的扩
充和删改。

软件开发工具

软件开发工具的完善和发展将促使软件开发方法的进步和完善,促进软件开发的高速度和高质量。软件开发工具的发展是从单项工具的开发逐步向集成工具发展的,软件开发工具为软件工程方法提供了自动的或半自动的软件支撑环境。同时,软件开发方法的有效应用也必须获得相应工具的支持,不然方法将难以有效的实施。

软件开发环境

软件开发环境(或称软件工程环境)是全面支持软件开发全过程的软件工具集合。计算机辅助软件工程(CASE,Computer Aided Software Engineering)将各类软件工具、开发机器和一个存放开发过程信息的中心数据库组合起来,造成软件工程环境它将极大下降软件开发的技术难度并保证软件开发的质量。

3.2 结构化分析方法,数据流图,数据字典,软件需求规格说明书

结构化方法的核心和基础是结构化程序设计理论包括1)结构化需求分析方法;2)面向对象的分析方法。
结构化分析方法的实质:着眼于数据流,自顶向下,逐层分解,创建系统的处理流程,以数据流图数据字典断定树为主要工具,创建系统的逻辑模型。

数据流图

以图形的方式描绘数据在系统中流动和处理的过程,它反映了系统必须完成的逻辑功能,是结构化分析方法中用于表示系统逻辑模型的一种工具。
数据流图示例
加工(转换):输入数据经加工变换产生输出。(圆形)
数据流:沿箭头方向传送数据的通道,通常在旁边标注数据流名。(箭头)
存储文件(数据源):表示处理过程当中存放各类数据的文件。(双下划线)
源,潭:表示系统和环境的接口,属系统以外的实体。(方框)

数据字典

对全部与系统相关的数据元素的一个有组织的列表,以及精确的、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。

  • 数据字典的做用是对数据流图中出现的被命名的图形元素的确切解释。
  • 数据字典是结构化分析方法的核心。

3.3 结构化设计方法,整体设计与详细设计

软件设计基础

结构设计:定义软件系统各主要部件之间的关系。
数据设计:将分析时建立的模型转化为数据结构的定义。
接口设计:描述软件内部、软件和协做系统之间以及软件与人之间如何通讯。
过程设计:把系统结构部件转换成软件的过程性描述。从工程角度来看,软件设计分两步完成,即概要设计和详细设计。
概要设计:又称结构设计,将软件需求转化为软件体系结构,肯定系统级接口、全局数据结构或数据库模式。
详细设计:肯定每一个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节

基本原理

软件设计的基本原理包括:抽象、模块化、信息隐蔽和模块独立性。
1)抽象:一种思惟工具,就是把事物本质的共同特性提取出来而不考虑其余细节。
2)模块化:解决一个复杂问题时自顶向下逐步把软件系统划分红一个个较小的、相对独立但又不相互关联的模块的过程。
3)信息隐蔽:每一个模块的实施细节对于其余模块来讲是隐蔽的。
4)模块独立性:软件系统中每一个模块只涉及软件要求的具体的子功能,而和软件系统中其余的模块的接口是简单的。
模块的耦合性内聚性是衡量软件的模块独立性的两个定性指标。

整体设计

软件概要设计的基本任务是:1)设计软件系统结构;2)数据结构及数据库设计;
3)编写概要设计文档;4)概要设计文档评审。

详细设计

详细设计是为软件结构图中的每个模块肯定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。

3.4 软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试

使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否知足规定的需求或是弄清预期结果与实际结果之间的差异。

软件测试方法

  • 静态测试:包括代码检查、静态结构分析、代码质量度量。不实际运行软件,主要经过人工进行。
  • 动态测试:是基于计算机的测试,主要包括白盒测试方法和黑盒测试方法。

白盒测试

白盒测试方法也称为结构测试或逻辑驱动测试。它是根据软件产品的内部工做过程,检查内部成分,以确认每种内部操做符合设计规格要求。
白盒测试的基本原则:保证所测模块中每一独立路径至少执行一次;保证所测模块全部判断的每一分支至少执行一次;保证所测模块每一循环都在边界条件和通常条件下至少各执行一次;验证全部内部数据结构的有效性。

黑盒测试

黑盒测试方法也称为功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否知足需求进行测试和验证。黑盒测试主要诊断功能不对或遗漏、接口错误、数据结构或外部数据库访问错误、性能错误、初始化和终止条件错误。黑盒测试不关心程序内部的逻辑,只是根据程序的功能说明来设计测试用例

测试用例

测试用例是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。一个好的测试用例能找到迄今为止还没有发现的错误。

3.5 程序的调试,静态调试与动态调试

程序调试的任务是诊断和改正程序中的错误,主要在开发阶段进行,调试程序应该由编制源程序的程序员来完成。程序调试的基本步骤:
(1)错误定位;(2)纠正错误;(3)回归测试(防止引入新的错误)
静态调试:程序在运行到某一个状态的时候,让它暂停,用工具查看程序此时的运行信息,好比某个变量的数值;查看完成后,让程序继续运行,恢复到正常的工做。
动态调试:在程序中,添加日志信息(log),在程序运行的时候,将log指定的信息输出到调试的电脑上。整个过程不会打断程序的运行。

4、 数据库设计基础

4.1 数据库的基本概念:数据库,数据库管理系统,数据库系统

数据库(database)

数据的集合,具备统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享。数据库存放数据是按数据所提供的数据模式存放的,具备集成与共享的特色,亦便是数据库集中了各类应用的数据,进行统一的构造和存储,而使它们可被不一样应用程序所使用。

数据库管理系统(DBMS)

一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,是数据库的核心。

数据库系统(DBS)

由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平台(软件)五个部分构成的运行实体。

4.2 数据模型,实体联系模型及 E-R 图,从 E-R 图导出关系数据模型

数据模型的概念:是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操做提供一个抽象的框架。主要内容包括:
1)数据结构:数据结构是所研究的对象类型的集合,包括与数据类型、内容、性质有关的对象,以及与数据之间联系有关的对象。它用于描述系统的静态特性。
2)数据操做:数据操做是对数据库中各类对象(型)的实例(值)容许执行的操做的集合,包括操做的含义、符号、操做规则及实现操做的语句等。它用于描述系统的动态特性。
3)数据的约束条件:数据的约束条件是一组完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具备的制约和依存规则,用以限定符号数据模型的数据库状态及状态的变化,以保证数据的正确、有效和相容。

实体联系模型及 E-R 图

1)实体:现实世界中的事物。(矩形)
2)属性:事物的特性。(椭圆形)
3)联系:现实世界中事-间的关系。(菱形)
示例
数据库管理系统常见的数据模型有层次模型、网状模型和关系模型三种。

4.3 关系代数运算,包括集合运算及选择、投影、链接运算,数据库规范化理论

关系代数

一、关系的数据结构
关系是由若干个不一样的元组所组成,所以关系可视为元组的集合。n 元关系是一个 n 元有序组的集合。
关系模型的基本运算:1)插入;2)删除;3)修改;4)查询(包括投影、选择、笛卡尔积运算)。
二、关系操纵
关系模型的数据操纵便是创建在关系上的数据操纵,通常有查询、增长、删除和
修改四种操做。

集合运算及选择、投影、链接运算

(1)并(∪):关系 R 和 S 具备相同的关系模式,R 和 S 的并是由属于 R 或属于 S 的元组构成的集合。
(2)差(-):关系 R 和 S 具备相同的关系模式,R 和 S 的差是由属于 R 但不属于 S 的元组构成的集合。
(3)交(∩):关系 R 和 S 具备相同的关系模式,R 和 S 的交是由属于 R 且属于 S 的元组构成的集合。
(4)广义笛卡尔积(×):设关系 R 和 S 的属性个数分别为 n、m,则 R 和 S 的广义笛卡尔积是一个有(n+m)列的元组的集合。每一个元组的前 n 列来自 R 的一个元组,后m 列来自 S的一个元组,记为 R×S。

4. 数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略

数据库设计阶段包括:需求分析、概念分析、逻辑设计、物理设计。 数据库设计的每一个阶段都有各自的任务: 1)需求分析阶段:这是数据库设计的第一个阶段,任务主要是收集和分析数据,这一阶段收集到的基础数据和数据流图是下一步设计概念结构的基础。 2)概念设计阶段:分析数据间内在语义关联,在此基础上创建一个数据的抽象模型,即造成 E-R 图。(数据库概念设计的过程包括选择局部应用、视图设计和视图集成) 3)逻辑设计阶段:将 E-R 图转换成指定 RDBMS 中的关系模式。 4)物理设计阶段:对数据库内部物理结构做调整并选择合理的存取路径,以提升数据库访问速度及有效利用存储空间。