软考中级-软件设计师(九)数据库技术基础 考点最精简

一、基本概念
1.1数据库与数据库系统

数据:是数据库中存储的基本对象,是描述事物的符号记录

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

数据库系统(DataBase System,DBS):包含数据库的一个系统(DB,硬件,软件,人员)

1.2数据库管理系统的功能

数据库管理系统(DataBase Management System,DBSM):属于DBS中的一个软件

主要实现对共享数据有效的组织、管理和存储,故DBSM具有以下六方面功能:数据定义,数据库操作,数据库运行管理,数据的组织、存储和管理,数据库的建立和维护,其他功能

1.3数据库管理系统的特征及分类

·DBSM的特征:数据结构化且统一管理,有较高的数据独立性,数据的控制功能(数据库的安全性、完整性、并发控制、故障恢复)

·DBSM分类:通常可分为三类:关系数据库系统、面向对象的数据库系统、对象关系数据库系统

1.4数据库系统的体系结构

·集中式数据库系统:不仅数据是集中的,数据的管理也是集中的

·客户端/服务器结构:一个处理机的请求被传送到另一个处理机上执行

·并行数据库系统:多个物理上连在一起的CPU,分为共享式和无共享式

·分布式数据库系统:包括物理上分布、逻辑上集中的分布式数据库结构和物理上分布、逻辑上分布的数据库结构两种

1.5数据库的三级模式

数据库采用“三级模式-两级映像”

这种设计模式能保证数据发生变化时,程序不需修改

模式/内模式映像:保证了数据库的数据有较高的物理独立性

外模式/模式映像:保证了数据库的数据有较高的逻辑独立性

1.6数据库设计

需求分析:产出数据流图、数据字典、需求说明书

概念结构设计:设计E-R图

逻辑结构设计:将E-R图转换成关系模式

物理设计:生成物理数据库

二、数据模型
2.1基本概念

模型就是对现实世界特征的模拟和抽象,数据模型是对现实世界数据特征的抽象。

常用的数据模型分为概念数据模型和基本数据类型

数据模型的三要素是:数据结构、数据操作和数据的约束条件

2.2E-R模型

实体-联系模型(E-R模型):只能说明实体间的语义联系,还不能进一步详细说明数据结构。在解决实际问题时,通常先设计一个E-R模型,再将其转换成计算机能接受的数据

弱实体:对另一些实体有很强的依赖关系,即此类实体必须以另一类实体存在为前提

2.3数据模型

层次模型:采用树形结构表示数据与数据间的联系

网状模型:是层次模型的特例,比层次模型更具有普遍性

关系模型:采用关系模型作为数据库的组织方式

面向对象模型:采用面向对象的方法来设计数据库

软考中级主要考察关系模型,在此重点讲解

2.4关系模型

关系模型中用表格结构表达实体集以及其实体集之间的关系

三、关系代数
3.1关系数据库的基本概念

1)属性和域:属性是描述一个事物常取的若干特征,每个属性的取值范围对应一个值的集合;每个属性的取值范围对应一个值的集合,称为该属性的域

2)笛卡尔积与关系:笛卡尔积是两个或多个集合中所有可能的有序对集合;关系是笛卡尔积中选取出来的一部分有序对

3)关系数据库模式:关系数据库的值是这些关系在某一时刻对应的关系的集合

4)完整性约束:提供了一种手段来保证当授权用户对数据库做修改时不会破坏数据的一致性。关系完整性分为三类:实体完整性(主属性不能取空值)、参照完整性(一个关系中的外键值必须是在他参照的另一个关系中的主键能找到的值)、用户定义完整性(必须符合实际应用意义,如年龄大于18等)

5)关系运算

3.2五种基本的关系代数运算

3.3扩展关系的代数运算


典型例题:假设我们有两个关系:
Student(SNO, SNAME, AGE, SDEPT)
SNO:学号
SNAME:学生姓名
AGE:学生年龄
SDEPT:学生所在系别
Course(CNO, CNAME, CPNO, CREDIT)
CNO:课程号
CNAME:课程名称
CPNO:先修课程号(如果该课程没有先修课程,则为空)
CREDIT:学分
现在,我们要查询所有“计算机科学”系的学生选修的“数据结构”课程的先修课程号。
关系代数运算如下:
选择计算机科学系的学生:
σ_SDEPT='计算机科学'(Student)
选择“数据结构”课程:
σ_CNAME='数据结构'(Course)
找出选修了“数据结构”课程的学生:
这里我们需要将Student关系和选课关系(假设为SC,包含SNO和CNO两个字段)进行连接,并且与“数据结构”课程进行连接。
Student ⨝_SNO=SNO SC ⨝_CNO=CNO σ_CNAME='数据结构'(Course)
找出这些学生的先修课程号:
由于选课关系SC中不包含先修课程号,我们需要再次与Course关系进行连接,通过CNO和CPNO字段。
(Student ⨝_SNO=SNO SC ⨝_CNO=CNO σ_CNAME='数据结构'(Course)) ⨝_CNO=CPNO Course
投影出先修课程号:
π_CPNO((Student ⨝_SNO=SNO SC ⨝_CNO=CNO σ_CNAME='数据结构'(Course)) ⨝_CNO=CPNO Course)

四、关系数据库SQL语言简介
4.1SQL语言

语法关键字不区分大小写

DB查询:select...from(where);

分组查询:group by,select sno.avg(score)from student group by sno having(avg(score)>60)

更名:select sno as "学号" from t1;

插入:insert into...values();

删除:delete from...where

修改:update from...where

排序:order by

DISTINCT:过滤重复选项,只保留最后一条

UNION:取或运算

INTERSECT:与

MAX、MIN、AVG...

4.2SQL访问控制

五、关系数据库的规范化
5.1函数依赖

函数依赖描述了一个属性或属性集合的值对另一个属性或属性集合的值的依赖性。简单来说,如果某个属性集(或称为决定因素)的值能够唯一确定另一个属性集(或称为依赖因素)的值,那么我们就说后者依赖于前者。

具体来说,函数依赖可以分为以下几种类型:
·平凡函数依赖:当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。
·非平凡函数依赖:当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。
·完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
·部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
·传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

5.2规范化

1)第一范式:关系中每一个分量必须是一个不可分割的数据项,即表中不允许有小表的存在

2)第二范式:关系R属于1NF,且每一个非主属性完全依赖于任何一个候选码,则R属于2NF,即在1NF的基础上,每一个非主属性不会依赖复合主键中的某一个列

3)第三范式:在满足1NF的基础上,表中不存在非主属性对码的传递依赖

4)BC范式:在3NF的基础上进一步消除主属性对码的部分函数依赖和传递依赖,即每一种情况下,每一个依赖左边决定因素都必然包含候选键

候选键和候选关键字判断:1.从未在右边出现过的属性必然是;2.以该属性扩展,看能否遍历所有属性,无法遍历的是

判断范式:每个属性都不可再分——1NF;满足1NF基础上,非主属性完全依赖主键而不是主键的某个子集——2NF;满足1NF的基础上,没有传递依赖——3NF。

5.3模式分解及分解具有的特性

1)保持函数依赖分解:保持原来的依赖集不变,且消除冗余(如递归)

    eg.F(A->B,B->C,A->C) =>R1(A,B) R2(B,C)

2)无损连接:分解后的关系模式能还原出原关系模式即无损

    

保持函数依赖分解的例子:
假设我们有一个关系模式R,其属性集U={A, B, C, D, E},函数依赖集F={A→B, A→C, B→D, C→E}。我们可以按照以下步骤将其分解为保持函数依赖的子关系模式:
识别候选键:在这个例子中,A是唯一的候选键,因为它能唯一确定其他所有属性。
应用保持函数依赖的分解规则:将每个函数依赖的左边(即决定因素)作为新关系模式的键,右边(即被决定因素)作为新关系模式的属性。于是我们得到以下子关系模式:
R1(A, B, C):基于A→B和A→C
R2(B, D):基于B→D
R3(C, E):基于C→E
验证保持函数依赖:我们可以看到,在分解后的每个子关系模式中,函数依赖都得到了保持。例如,在R1中,A→B和A→C都成立;在R2中,B→D成立;在R3中,C→E成立。
无损连接的例子:
假设我们有一个关系模式R(U, F),其中U={A, B, C, D},F={A→B, B→C, C→D}。我们将其分解为两个子关系模式R1(A, B)和R2(B, C, D)。现在我们要验证这个分解是否是无损的。
计算R1和R2的交集和差集:R1∩R2 = {B},R1 - R2 = {A},R2 - R1 = {C, D}。
检查是否存在函数依赖使得交集决定差集:在这个例子中,B→C和B→D都存在于F中,因此B(即R1∩R2)可以决定R2 - R1(即{C, D})。这满足了无损连接的条件。

六、数据库的控制功能
6.1事务管理

事务是一个操作序列,这些操作“要么都做,要么都不做”,是数据库环境中不可分割的逻辑工作单位。在SQL语言中,事务定义的语句有以下三条:事务开始、事务提交、事务回滚

事务具有(操作)原子性、(数据)一致性、(执行)隔离性、(改变)持久性

6.2数据库的备份与恢复

故障类型:事务内部故障、系统故障、介质故障、计算机病毒

备份方法:静态转储和动态转储、海量转储和增量转储、日志文件

恢复:反向扫描文件日志,对事务的更新操作执行逆操作,继续反向扫描,直到事务的开始标志

6.3并发操作

并发操作带来的问题:丢失修改、不可重复读、读脏数据

并发控制技术:1)封锁:排他锁(写锁)、共享锁(读锁)

2)三级封锁协议:一级(解决丢失更新的问题)、二级(解决丢失更新、读脏数据的问题)、三级(解决全部问题)

6.4分布式数据库系统

·分片透明:用户或应用程序不需要知道逻辑上访问的表具体怎么分块存储

·逻辑透明:用户或应用程序无需知道局部使用的哪种数据,局部数据透明

·复制透明:不关心数据库在网络中各个节点复制情况

·位置透明:不需要知道存放数据的物理位置 

七、典型例题



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/9760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】模拟实现string

文章目录 前言成员变量成员函数构造函数拷贝构造函数浅拷贝深拷贝拷贝构造函数实现 析构函数赋值重载 空间管理函数元素访问元素修改字符串运算流提取 & 流插入流提取流插入 迭代器begin & endrbegin & rend 总结 前言 模拟实现不是为了写得和库里面一样好。而是为…

OmniReader Pro mac激活版:智慧阅读新选择,开启高效学习之旅

在追求知识的道路上,一款优秀的阅读工具是不可或缺的。OmniReader Pro作为智慧阅读的新选择,以其独特的功能和卓越的性能,为您开启高效学习之旅。 OmniReader Pro具备高效的文本识别和处理技术,能够快速准确地提取文档中的关键信息…

《QT实用小工具·五十四》果冻弹出效果的动画按钮

1、概述 源码放在文章末尾 该项目实现动画按钮,鼠标放在按钮上可以弹性拉出的三个按钮,使用贝塞尔曲线实现,项目demo显示如下所示: 项目部分代码如下所示: #ifndef WATERCIRCLEBUTTON_H #define WATERCIRCLEBUTTON…

Day 43 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

最后一块石头重量Ⅱ 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么两…

Transformers中加载预训练模型的过程剖析

使用HuggingFace的Transformers库加载预训练模型来处理下游深度学习任务很是方便,然而加载预训练模型的方法多种多样且过程比较隐蔽,这在一定程度上会给人带来困惑。因此,本篇文章主要讲一下使用不同方法加载本地预训练模型的区别、加载预训练模型及其配置的过程,藉此做个记…

【go项目01_学习记录10】

操作数据库 1 插入数据2 显示文章2.1 修改 articlesShowHandler() 函数2.2 代码解析 3 编辑文章3.1 添加路由3.2 编辑articlesEditHandler()3.3 新建 edit 模板3.4 代码重构3.5 完善articlesUpdateHandler()3.6 测试更新3.7 封装表单验证 1 插入数据 . . . func articlesStore…

厚德提问大佬答4:AI绘画生成的心得

遇到难题不要怕&#xff01;厚德提问大佬答&#xff01; 厚德提问大佬答 你是否对AI绘画感兴趣却无从下手&#xff1f;是否有很多疑问却苦于没有大佬解答带你飞&#xff1f;从此刻开始这些问题都将迎刃而解&#xff01;你感兴趣的话题&#xff0c;厚德云替你问&#xff0c;你解…

车载电子电器架构 —— 应用软件开发(中)

车载电子电器架构 —— 应用软件开发(中) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

算法设计课第五周(贪心法实现活动选择问题)

目录 一、【实验目的】 二、【实验内容】 三、实验源代码 一、【实验目的】 &#xff08;1&#xff09;熟悉贪心法的设计思想 &#xff08;2&#xff09;理解贪心法的最优解与正确性证明之间的关系 &#xff08;3&#xff09;比较活动选择的各种“贪心”策略&#xff0c;…

动态IP避坑指南:如何挑选合适的动态代理IP?

在如今的网络环境中&#xff0c;使用动态IP代理成为实现隐私保护、访问受限内容和提高网络效率的一种常见方式&#xff0c;选择合适的国外动态IP代理可以让我们的业务处理事半功倍。面对市面上琳琅满目的选择&#xff0c;如何挑选购买适合自己的动态IP代理服务呢&#xff1f;在…

【数据结构】手把手带你玩转线性表

前言&#xff1a; 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累。我…

弱监督语义分割-对CAM的生成过程进行改进1

一、仿射变换图像结合正则项优化CAM生成 论文&#xff1a;Self-supervised Equivariant Attention Mechanism for Weakly Supervised Semantic Segmentation &#xff08;CVPR,2020&#xff09; 1.SEAM方法 孪生网络架构&#xff08;Siamese Network Architecture&#xff09…

2024.5.10

TCP服务器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置窗口大小和窗口大小固定this->resize(727,879);this->setFixedSize(727,879);//创建…

STC8增强型单片机开发【定时器Timer⭐】

目录 一、引言 二、定时器基础知识 三、STC8定时器配置 四、代码示例 五、总结 一、引言 在单片机开发中&#xff0c;定时器&#xff08;Timer&#xff09;是一个极其重要的组件&#xff0c;它允许开发者基于时间触发各种事件或任务。STC8增强型单片机作为一款功能丰富的…

使用2G内存求20亿个数字中出现次数最多的N个

又是一个TOP -N的题目 我看了一下CSDN上大多数人的回答和GPT说的差不多&#xff0c;都是说使用哈希之类的&#xff1b; 我今天说一下我的解法&#xff0c;首先说一下不太快的基础解法 20亿数字使用uint32需要80GB&#xff0c; &#xff08;1&#xff09;分为40块读取&#…

c++opencv Project3 - License Plate Detector

俄罗斯车牌识别案例&#xff1a;实时识别车牌&#xff0c;并且读取到指定文件夹中。 惯例先展示结果图&#xff1a; 对于摄像头读取图片进行车牌匹配&#xff0c;原理和人脸识别其实是一致的。 利用训练好的模型进行匹配即可。可参考&#xff1a; 对视频实现人脸识别-CSDN博…

电能表远程抄表系统是什么?

电能表远程抄表系统是一种优秀的电力管理方法&#xff0c;它通过自动化的形式搜集、解决与分析电能表的信息&#xff0c;进而取代了传统人工抄水表方法。其主要原理是运用物联网技术、通讯技术和大数据处理技术&#xff0c;完成对电度表数据信息实时、远程控制获取和管理方法。…

探索无界知识:用 ChatGPT 的原理学习任何事物!

为避免文章重复&#xff0c;您的文本已通过更改句式、用词以及句子结构进行了修改。现在的文本应该能更好地满足去重的需求&#xff1a; 从ChatGPT原理出发&#xff0c;我们探讨GPT如何启发人类学习和构建个人知识体系。 1. 明确学习目标 机器学习必须依靠目标函数。同样&…

【Qt 开发基础体系】QMap 类和 QHash 类以及 QVector 类

文章目录 1.QMap 详解1.1 QMap 的介绍1.2 QMap 的具体用法如下1.3 QmultiMap类 2.QHash 详解3. QMap 和 QHash 的对比4. QVector 详解 1.QMap 详解 1.1 QMap 的介绍 &#x1f427;① QMap<key,T>提供一个从类型为Key的键到类型为T的值的映射。通常&#xff0c;QMap存储的…

STC8增强型单片机开发【串口调试UART⭐⭐】

目录 一、引言 二、UART基础知识 三、STC8 UART配置 四、代码示例 上列代码中所需的库函数文件&#xff1a; 引入库函数的流程&#xff1a; 五、总结 一、引言 在单片机开发中&#xff0c;串口调试&#xff08;UART&#xff09;是一种常用的通信方式&#xff0c;用于实现…