数据库原理(含思维导图)
数据库原理笔记,html与md笔记已上传
1.绪论
发展历程
- 记住数据怎么保存,谁保存数据,共享性如何,独立性如何
人工管理阶段
- 数据不保存
- 应用程序管理数据
- 数据不共享
- 数据不具有独立性
文件系统阶段
- 数据可以长期保存
- 文件系统管理数据
- 数据共享性差,冗余度大
- 数据独立性差
数据库系统阶段
- 数据结构化
- DBMS统一管理系统
- 数据共享性高,冗余度低,易扩充
- 数据独立性高
数据模型
- 数据模型的 三要素:数据结构(静态特性),数据操作(动态特性),数据的完整性约束
- 数据模型是对现实世界 数据特征的抽象,
概念模型(E-R图)
- 按照 用户的观点来对数据和信息建模,不依赖于具体的计算机系统,不是某一个DBMS支持的数据模型,主要用于 数据库设计
逻辑模型
- 按照 计算机系统的观点对数据建模,主要用于 数据库管理系统的实现。
- 层次模型
- 网状模型
- 关系模型
- 面向对象模型
- 对象关系模型
数据库系统概念
1.数据
- 描述事物的 符号记录,如数字,图像,文本等,经过数字化处理后存入计算机。
2.数据库
- 长期存储在计算机内,有组织,可共享的大量数据的集合。数据库中的数据按照一定的 数据模型 组织,描述,存储,具有较小的 冗余度,较高的 数据独立性,易扩展性。
3.数据库管理系统
- 位于 用户 和 操作系统 之间的一层 数据管理软件。用于科学地组织和存储数据,高效地获取和维护数据。DBMS的主要功能包括: 1. 数据定义2. 数据操纵3. 数据库的运行管理功能4. 数据库建立与维护功能。
4.数据库系统
- DBS是指在计算机系统中 引入数据库后的系统构成。数据库系统由 数据库,数据库管理系统,应用系统,数据库管理员构成。
三级模式
外模式
- 外模式也称为用户模式。外模式是数据库 用户 能够看见和使用的 局部数据的逻辑结构和 特征的描述,是 数据库用户 的 数据视图,是与某一应用有关的数据的逻辑表示。
模式
- 模式也称为逻辑模式,是数据库中 全体数据的逻辑结构和特性的描述,是 全体用户的公共数据视图。(外模式是模式的 子集)
内模式
- 内模式也称为存储模式,是数据在数据库系统内部的表示,对数据的 物理结构 和 存储方式 的描述
优点
- 数据有较高的逻辑独立性和物理独立性
- 简化了用户窗口
- 有利于数据共享
- 数据的安全保密
- 数据存储由DBMS管理(用户无需考虑存储细节)
数据与程序的独立性
- 主要包括两个方面—— 逻辑独立性 ,物理独立性
逻辑独立性
- 当 模式 改变时(增加新的属性列),由数据库管理员对 各个 外模式/模式映像作相应的改变,可以使得 外模式不变,从而应用程序不必修改,保证了 数据与程序的逻辑独立性 。
物理独立性
- 当数据的 存储结构发生改变时,由 数据库管理员对 模式/内模式映像作出相应改变,可以使 模式保持不变,从而应用程序不必改变,从而保证了 数据与程序的物理独立性。
并发控制
并发方式
交叉并发方式
在 单处理机系统中,并行事务的并行操作 轮流执行。
同时并发方式
在 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务 并发执行。
实现并发的重要方式
- 封锁
数据不一致性
丢失修改(T1事务修改了数据,T2也修改了,T2结果让T1修改丢失了)
不可重复读(T1读,T2改,T1再读,两次读的结果不一致/T1读,T2删,T1再读,发现读不到数据/T1读,T2增加,T1再读,发现读多了结果)
读脏数据(T1修改,并且写入磁盘。T2读取数据,而T1撤销,T2读到的数据和数据库中的不一致)
锁
排他锁(写锁)
事务T对 对象施加 X锁,只允许T修改和修改,其他任何事务 都不能施加其他锁
共享锁(读锁)
事务T对数据对象施加 S锁,T可以读但不能写,其他事务只能对A施加 S锁,不能修改X锁
活锁与死锁
活锁
一个事务T可能永远等待其他锁,一直得不到锁
解决方法: 采用先来先服务策略
死锁
两个或多个以上的事务循环等待对方的锁的释放,事务永远不能结束。
死锁的预防
一次封锁法:每个事务必须一次将所有使用的数据 全部加锁,否则不能执行
顺序封锁法:预先对数据对象 规定一个 封锁顺序,所有事务都按照这个顺序实行封锁。
死锁的诊断和解除
超时法:如果一个事务的 等待时间超出了规定的时限,就认为发生了死锁
等待图法:事务等待图动态地反映了 所有事务的等待情况。如果发现图中存在 回路,则表示系统中出现了 死锁
并发调度的可串行性
可串行化调度
多个事务的并发执行是 正确的,当且仅当结果和串行执行时相同,称这种调度策略是 可串行化的调度。
可串行性是并发事务正确调度的准则。
两段锁协议
两段锁协议是指所有事务必须分 两个阶段对数据项加锁和解锁。
对任何数据进行读写前,首先要申请并获得数据的 封锁
在释放一个封锁之后,事务不再申请和获得任何其他封锁。
事务遵守的两段锁协议是 可串行化调度的充分条件,不是必要条件。(两段锁必然是可串行化协议,反过来不能说是)
封锁的粒度
多粒度封锁
在一个系统中同时支持多种封锁粒度供不同的事务选择
多粒度树
根节点是 数据库,然后是 关系(表),元组。
对一个节点 加锁,意味着对改节点的所有 后裔节点也施加同样的锁。
显示封锁:应事务的要求 直接加到数据对象上的锁
隐式封锁:该数据对象没有 独立加锁,而是由于上级节点要求 加锁而被加锁
意向锁
如果对一个结点加 意向锁,说明该节点的下层节点正在被加锁
对任意节点加锁前,必须对上层节点添加意向锁
申请封锁: 自上而下,
1.意向共享锁(IS锁,Intent Shared Lock)
如果对一个对象添加 IS锁,说明它的 后裔节点正在添加S锁。
2.意向排他锁(IX锁,Intent Exclusive Lock)
如果对一个对象节点添加 IX锁,说明它的 后裔节点正在添加X锁。
3.共享意向排他锁(SIX锁,Share Intent Exclusive Lock)
SIX锁:先加 S锁,再加 IX锁,标识该事务要 读整个表,而且会 更新元组
锁的粒度
- S锁可共享的:(S,IS)
- X锁可共享:(无)
- IS锁可共享:(S,IS,IX,SIX)
- IX锁可共享:(IS,IX)
- SIX锁可共享:(IS)
数据库恢复技术
事务
原子性
事务是数据库的 逻辑工作单位,事务的操作要么都做,要么都不做
一致性
事务的执行结果必须是使数据库从一个一致性状态转变到另一个一致性状态
隔离性
一个事务的执行不能被其他事务干扰
持续性
一个事务一旦提交,它对数据库中的数据改变就是 永久性的。
故障种类
事务内部的故障
事务内部的故障(预期的/非预期的)
系统故障
系统停止运行的事件让系统需要重新启动
介质故障
系统故障称为 软故障,介质故障称之为 硬故障。举例:磁盘损坏,磁头碰撞,磁场干扰
计算机病毒
恢复的技术
恢复的基本原理是: 冗余
数据转储
DBA定期将 整个数据库复制到磁带/另一个磁盘上,备用的数据称为 后备副本。
数据库被破坏后,可以装入后备副本,但是只能恢复到转储前,要想完全恢复,还要重新运行之后所有的更新事务。
静态转储
在系统中没有运行事务才能进行。转储过程中不允许执行事务,新的事务必须等待转储结束才能进行
动态转储
转储期间允许对数据库进行存取或修改,即 转储与用户事务可以并发执行。
为了保证一致性,需要把转储期间的各个事务记录下来,建立 日志文件
海量转储
- 每次转储 全部数据库
增量转储
- 每次只转储 上一次转储后更新的数据。
登记日志文件
- 主要分为以记录为单位的日志文件,以数据块为单位的日志文件。
- 登记的 次序严格按照 并发事务的执行顺序
- 先写日志文件,后写数据库
以记录为单位
- 各个事务的 开始,结束标记,事务的 更新操作。这三种都是日志文件中的一个 日志记录
以数据块为单位
- 事务标识
- 被更新的数据块
日志文件的使用
- 事务故障恢复和系统故障恢复 必须使用日志文件
- 在 动态转储中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库
- 在 静态转储中也可以建立日志文件。
恢复策略
- 系统运行过程中根据 故障的种类,恢复使用的 策略会不同
查询优化
查询过程
- 查询分析:判断是否符合sql语法
- 查询检查:根据 数据字典查询数据库对象是否存在,是否有权限访问。使用 查询树/语法分析树把 SQL语句转换成等价的 关系代数表达式。
- 查询优化:按照 代数优化和物理优化来进行优化。
- 查询执行:根据优化器得到的执行策略生成查询计划, 由 代码生成器执行查询计划
启发式规则
- 选择运算尽可能先做
- 投影和选择同时运行
- 投影和双目操作要结合
- 用 连接代替笛卡尔积
- 公共子表达式
画树的技巧
- 先画最初的语法树(select,project,join)
- 转换成语法树(join = x + σ \sigma σ select = σ \sigma σ ,project = π \pi π )
- 优化语法树(根据启发式规则,选择提早做,笛卡尔积换连接)
数据库设计
规范设计方法
- 基本思想: 过程迭代和 逐步求精
- 新奥尔良方法:把数据库设计分为若干阶段和步骤,逐步实施
- 基于 E-R模型的数据库设计方法
- 3NF设计方法
- ODL(面向对象)设计方法
- 统一建模语言(UML)方法
数据库设计阶段
- 需求分析阶段:了解并且分析 客户需求,是最困难,最耗费时间的一步
- 数据字典的内容:数据项,数据结构,数据流,数据存储,处理过程五个部分)
- 分析方法: 结构化分析方法(SA):从 最上层出发,采用自顶向下,逐层分解的方法分析系统。调查组织机构情况-熟悉业务活动-明确用户需求-确定系统边界
- 概念结构设计阶段:对用户需求进行 综合,归纳,抽象,形成一个独立于具体DBMS的 概念模型 (根据数据字典设计成E-R图)
- 概念模型的特点 :1.真实反应现实世界2.易于理解3.易于更改4.向关系,网状,层次等数据模型结构转化
- E-R图: 实体型 使用 矩形 ,用 椭圆 表示 属性,用 菱形表示 联系
- 设计概念的 方法:1.自顶向下2.自底向上3.逐步扩张4.混合策略
- 抽象的三种方法:1.分类2.聚集3.概括
- 逻辑结构设计阶段:把 概念结构转换为某个DBMS所支持的数据模型,并且对它进行优化(根据ER图设计成数据库表)
- 物理设计阶段 :为 逻辑数据模型选择一个适合应用环境的物理结构(存储安排,存取方法选择,存取路径建立)
- 数据库实施阶段:设计人员运用DBMS提供的语言和宿主语言,根据逻辑设计与物理设计建立数据库,调试并且运行(创建数据库模式,装入数据,数据库试运行)
- 数据库运行和维护阶段:(性能检测,转储/修复,数据库重组和重构)
- 参与数据库设计的人员
- 系统分析人员和数据库设计人员
- 数据库管理员和用户代表
- 应用开发人员
E-R图的集成
- 合并:解决各分E-R图的冲突
- 属性冲突:属性值的类型,取值范围,取值集合,属性取值单位不同
- 命名冲突:同名异义,异名同义。
- 结构冲突:同一对象在不同应用中 具有 不同抽象(解决方法:把属性变为实体)或者实体在不同子系统的 属性个数和排列次序不同(解决方法:属性值取 并集,并且适当调整属性的次序)
- 修改和重构:消除不必要的冗余(冗余数据和冗余联系),生成 基本E-R图
- 冗余数据:可以由基本数据导出的数据
- 冗余联系:可以由其他联系导出的联系
- 求函数依赖集 F L F_L FL 的最小覆盖 G L G_L GL ,令差集 D = F L − G L D=F_L - G_L D=FL−GL 。冗余的联系 一定 在差集D中,但D中的联系 不一定是冗余的。
关系数据库理论
函数依赖
定义: 对于关系R中 任意的关系r,r中不可能存在任意的两个元组在 X上相等,而在 Y上的属性值不等,则称函数 X确定Y,或Y依赖于X,记作 X → Y X\to Y X→Y
范式
满足最低要求的是第一范式,要求越高,范式级数越高 5 N F ⊂ 4 N F ⊂ B C N F ⊂ 3 N F ⊂ 2 N F ⊂ 1 N F 5NF \subset 4NF \subset BCNF \subset 3NF \subset 2NF \subset 1NF 5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF
把一个 低一级范式的关系模式,通过 模式分解转化未一个更高级的范式,该过程称为规范化。
2NF
定义:若关系模式R ⊂ \subset ⊂ 1NF,并且每一个非主属性都 完全函数依赖于任何一个候选码,则 R ∈ 2 N F R\in 2NF R∈2NF
举例:SLC表(Sno,Sdept,Sloc,Cno,Grade) Sloc是学生住所,规定所有系的学生住在同一个地方
3NF
定义:若关系模式R ∈ \in ∈ 1NF,若R中 不存在这样的码X,属性组Y,非主属性Z,使得 X → Y , Y → Z , Y ↛ X X\to Y,Y\to Z,Y \not\to X X→Y,Y→Z,Y→X ,则称R是3NF的。
性质:每一个 非主属性既不部分依赖,也不传递依赖子码
举例: S n o → S d e p t , S n o → S l o c , 而 S d e p t → S l o c Sno\to Sdept,Sno\to Sloc,而Sdept\to Sloc Sno→Sdept,Sno→Sloc,而Sdept→Sloc ,此处X就是Sno,Y是Sdept,如果是3NF范式,Sdept不允许推出Sloc.
BCNF
定义:第三范式的修正, R ∈ 1 N F , 若 X → Y , 且 Y ⊄ X 时, X 必含有码 , 则 R ⊂ B C N F R\in 1NF,若X \to Y,且Y\not\subset X时,X必含有码,则R\subset BCNF R∈1NF,若X→Y,且Y⊂X时,X必含有码,则R⊂BCNF,(所有的依赖左边必含有码)
所有 主属性 都完全函数依赖于每个不含它的码
没有任何属性完全函数依赖于非码的任何一组属性
如果一个数据库是BCNF范式,实现了模式的 行为分解,消除了 插入,删除异常
4NF:
若 R ∈ 1 N F R\in 1NF R∈1NF,对于R的 每个非平凡多值依赖 X → → Y X\to\to Y X→→Y , X都含有码,则 R ∈ 4 N F R\in 4NF R∈4NF
多值依赖
定义: X , Y , Z 是 U 的子集,并且 Z = U − X − Y X,Y,Z是U的子集,并且Z=U-X-Y X,Y,Z是U的子集,并且Z=U−X−Y ,当且仅当一组值(x,z),有一组Y的值,这组值仅仅决定于x值而与z值无关。(类似于一对多)
平凡的多值依赖,就是指Z中的值为空。
性质
多值依赖与函数依赖的区别
1. 多值依赖的有效性与 属性集的范围 有关
2. 若 函数依赖在 X → Y X\to Y X→Y在R(U)上成立,则对于任何 Y ′ ⊂ Y 均有 X → Y ′ Y^{'}\subset Y均有 X\to Y^{'} Y′⊂Y均有X→Y′ ,而多值依赖不行
公理系统
逻辑蕴含
1. 定义:对于任意一个关系模式R<U,F>,其任何一个关系r,若[[#函数依赖]] X → Y X \to Y X→Y 都成立,则称 F逻辑蕴含 X → Y X \to Y X→Y
ArmStrong公理系统
目的:求给定关系模式的 码,从一组函数依赖球的蕴含的函数依赖
阐述: 设U是属性集总体,F是U上的一组 [[#函数依赖]] ,有以下规则
推广规则:
求解(闭包) X F + X_F^+ XF+ 的步骤如下:
1. 初始化 X ( 0 ) X^{(0)} X(0)
2. 寻找 X i X_{i} Xi 能推出的新元素(根据函数依赖),并且并到新的集合 X i + 1 X_{i+1} Xi+1 中
3. 若 X i = = X i + 1 / U X_i == X_{i+1}/U Xi==Xi+1/U ,说明没有新的元素了,此时 X i X_i Xi 就是闭包
闭包的 覆盖 : 如果 G + = F + 如果G^+ = F^+ 如果G+=F+ ,就说F是G的覆盖,或者G是F的覆盖,或F与G是等价的
最小依赖集/最小覆盖/极小函数依赖集求法:
口号: ①右切②除本求包,右部在包要除③左部最小化,分别考察了左部右部传递的冗余性
1. 检查 X → A ,若 X → A 1 A 2 A 3 . . , 依次拆分成 X → A 1 , X → A 2 , X → A 3 X\to A,若X\to A_1A_2A_3..,依次拆分成X\to A_1,X\to A_2,X \to A_3 X→A,若X→A1A2A3..,依次拆分成X→A1,X→A2,X→A3
2. 检查依赖 X → A X\to A X→A,若 G = F − { X → A } G = F-\{X\to A \} G=F−{X→A} , A ∈ X G + A\in X_G^+ A∈XG+ ,那么从集合中去掉该依赖 X → A X\to A X→A
3. 检查依赖 X → A X\to A X→A ,设 X = B 1 B 2 . . . B m X=B_1 B_2 ...B_m X=B1B2...Bm ,需要逐个 考察左部X单个元素 B i B_i Bi ,若 A ∈ ( X − B i ) F + A \in (X - B_i)_F^+ A∈(X−Bi)F+ ,就用 X − B i X-B_i X−Bi取代 X
候选键求法
- 分类:把属性分为L(仅在左部),R(仅在右部),LR(左右都有),N(两边都没有)
- 令 X = L ∪ N X = L \cup N X=L∪N ,若X的 闭包=U ,则X一定是R的唯一候选键
- 从 LR 中选择 一个属性Y,若( Y ‘ = ( Y ∪ X ) = U Y^`=(Y \cup X )=U Y‘=(Y∪X)=U )则( Y ‘ Y^` Y‘是候选键)
- 从 L , R L,R L,R中选择 2 , 3 , . . . 个属性 2,3,...个属性 2,3,...个属性,执行第三步步骤。 请注意:候选键对于 相同长度的要全部求闭包
3NF求法
- 求最小依赖集
- 合并左部相同,构成模式
- 模式中若 都不包含R的候选键, 要单独加入R的候选键(多个候选键只放一个)
数据库完整性
维护完整性,DBMS提供的功能
1.提供定义完整性约束条件的机制
2.提供完整性检查的方法
3.违约处理
实体完整性
# 把Student表中的Sno定义为码
Create table student (
Sno char(9) primary key,
Sname char(20) ,...
)
# 把(Sno,Cno)定义为码
Sno char(9) not null,
Cno char(4) not null,
Primary Key (Sno,Cno)
参照完整性
- 在定义表的时候加 Foreign key (属性列) references Student(别的表的主码)
Sno char(9) not null,
Cno char(4) not null,
Foreign key (Sno) references Student(Sno)
Foregin key (Cno) references Course(Cno)
用户定义的完整性
数据库安全性
数据保护的功能
- 数据的 安全性保护
- 数据的 完整性保护
- 并发控制
- 数据的恢复
实现数据库安全性的方法(五种)
用户标识与鉴别
存取控制
自主存取控制方法(DAC)
- 定义 存取权限称为授权。
- 使用grant进行授权
grant <权限>(update,insert,delete)
on 对象类型
to 用户
- 使用revoke
视图
审计
数据加密
数据库的安全性
- 数据库的安全性是指 保护数据库以防止 不合法的使用 以造成的 数据泄露,更改或破坏。
关系数据库标准语言SQL
数据定义(DDL)
Create
CREATE TABLE <表名>
(
列名1,属性值,约束
);
Alter(修改)
Alter table <表名>
[add 列名, 数据类型]
Drop(删除)
修改功能
update 表名
set 列名 = 列的值
where 条件
# 把计算机学生的成绩全部置零
update sc
set Grade = 0
where Sdept = 'CS'
删除功能
# 删除学号为213的学生记录
delete from Student where Sno = 213
SQL查询的转化
全程量词转化
由于SQL中没有全称量词,所以对于 全部字样的查询,要进行否定的转化
例题:查询选修了全部课程的学生姓名。之前的逻辑是,查询学生p,对于所有的课x它都选修了。
现在是,查询学生p,没有一门课是该学生 不选修的
select sname from Student Where not exists (
select * from Course where not exists (
select * from sc where Cno = Course.Cno and student.Cno = cno
)
)
SQL的特点
1. 综合统一:SQL集数据定义语言 DDL,数据操纵语言DML,数据控制语言DCL,数据查询语言DQL功能于一体
2. 高度非过程化:用SQL进行数据操纵,只用提出 做什么,无需指出 怎么做,因此无需了解存取路径,存取路径的选择和SQL语句的执行过程由系统完成。
3. 面向集合的操作方式:SQL采用 集合操作方式,操作对象,查找结果可以是元组的集合。
4. 以同一种语法结构提供两种使用方式:SQL既是 自含式语言,又是 嵌入式语言
5. 语言简洁,易学易用
视图
视图是一张 虚表,只存放 定义,不会存放数据,数据仍然存放在原本的表中
视图一经定义,就可以被删除查询,但视图的更新(增,删,改)有一定限制
建立视图
CREATE VIEW <视图名>
AS <子查询>
[WITH CHECK OPTION]
其中,若有 WITH CHECK OPTION表示进行update,insert,delete操作时要保证操作的行 满足视图定义
视图不仅可以建立在一个或多个 基本表中,也可以建立在一个或多个 视图上
删除视图
DROP VIEW <视图名> CASCADE
# CASCADE指明级联删除视图
查询视图
1. 首先进行 有效性检查,检查查询中的表,视图是否存在
2. 从数据字典中取出视图的定义,把定义的 子查询和 用户的查询结合,转换成等价的 基本表查询。这一转换过程称为: 视图消解
更新视图
由于视图是不实际存储数据的 虚表,因此对视图的更新,最终要转换为对基本表的更新,对视图的更新操作也是通过对视图的消解,转换为对基本表的更新操作。
视图的作用
1. 视图能简化用户的操作:通过定义视图,让数据库看起来更加清晰,简化用户的查询工作
2. 视图使用户能以多种角度看待同一数据
3. 视图对重构数据库提供了一定程度的逻辑独立性
4. 视图能够对机密数据提供安全保护:通过限制每个用户看到的视图,可以限制用户仅修改子集定义的视图
5. 适当利用视图可以进行更加清晰的表达
关系数据库
关系的属性
- 候选码:若关系中的某一个 属性组能唯一地标识某一个元组,则称该属性组为 候选码
- 主码:一个关系中可以从 候选码中选择一个成为主码
- 主属性:候选码的诸属性称为 主属性,不包含在任何候选码的属性称为 非主属性
- 全码:关系模式所有的属性是这个关系模式的码
关系系统
- 支持 选择,投影,连接
分类
- 表示系统
- 最小关系系统
- 关系上完备的系统
- 全关系系统
关系的完整性
实体完整性
- 若属性是 主属性,则不能为空
参照完整性
- 若属性 F 是基本关系R的 外码,与关系 S的主码对应,则R中每个元组在F上必须为:1.空值(F的每个属性都是空值) 2. 或者等于S中某个元组的主码
用户参照完整性
- 某一具体应用所涉及的数据必须满足语义需求
关系运算
选择( σ 选择条件 ( 表的名字 ) \sigma_{选择条件}(表的名字) σ选择条件(表的名字))
- 实际上是查询满足条件的行(元组)
- 查询信息系全体学生: σ S d e p t = ′ I S ′ ( S t u d e n t ) \sigma_{Sdept = 'IS'}(Student) σSdept=′IS′(Student)
- 查询年龄小于20岁的学生: σ S a g e < 20 ( S t u d e n t ) \sigma_{Sage<20}(Student) σSage<20(Student)
投影( π 属性列 ( 表的名字 ) \pi_{属性列}(表的名字) π属性列(表的名字))
- 实际上是查询新的 关系的子集
- 查询学生关系中都有哪些系: π S d e p t ( S t u d e n t ) \pi_{Sdept}(Student) πSdept(Student)
连接
- 自然连接(要求连接的两个属性组有相同的分量)
除法
- 关系X,Y,X÷Y=(X中拥有Y列的属性列)
相关文章:
数据库原理(含思维导图)
数据库原理笔记,html与md笔记已上传 1.绪论 发展历程 记住数据怎么保存,谁保存数据,共享性如何,独立性如何 人工管理阶段 数据不保存应用程序管理数据数据不共享数据不具有独立性 文件系统阶段 数据可以长期保存文件系统管…...
数据结构(六)——图
六、图 6.1 图的基本概念 图的定义 图:图G由顶点集V和边集E组成,记为G (V, E),其中V(G)表示图G中顶点的有限非空集;E(G) 表示图G中顶点之间的关系(边)集合。若V {v1, v2, … , vn},则用|V|…...
Android-AR眼镜屏幕显示
Android-AR眼镜 前提:Android手持设备 需要具备DP高清口 1、创建Presentation(双屏异显) public class MyPresentation extends Presentation {private PreviewSingleBinding binding;private ScanActivity activity;public MyPresentatio…...
蓝桥集训之货币系统
蓝桥集训之货币系统 核心思想:背包 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 30,M 10010;typedef long long LL;LL f[M];int w[N];int n,m;int main(){cin>>n>>m;for(int i1;i&…...
基于微信小程序的校园服务平台设计与实现(程序+论文)
本文以校园服务平台为研究对象,首先分析了当前校园服务平台的研究现状,阐述了本系统设计的意义和背景,运用微信小程序开发工具和云开发技术,研究和设计了一个校园服务平台,以满足学生在校园生活中的多样化需求。通过引…...
QT+Opencv+yolov5实现监测
功能说明:使用QTOpencvyolov5实现监测 仓库链接:https://gitee.com/wangyoujie11/qt_yolov5.git git本仓库到本地 一、环境配置 1.opencv配置 将OpenCV-MinGW-Build-OpenCV-4.5.2-x64文件夹放在自己的一个目录下,如我的路径: …...
【Python-Docx库】Word与Python的完美结合
【Python-Docx库】Word与Python的完美结合 今天给大家分享Python处理Word的第三方库:Python-Docx。 什么是Python-Docx? Python-Docx是用于创建和更新Microsoft Word(.docx)文件的Python库。 日常需要经常处理Word文档…...
吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.6-3.8
目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.6 激活函数(Activation functions)3.7 为什么需要非线性激活函数?(why need a non…...
盘点最适合做剧场版的国漫,最后一部有望成为巅峰
最近《完美世界》动画官宣首部剧场版,主要讲述石昊和火灵儿的故事。这个消息一出,引发了很多漫迷的讨论,其实现在已经有好几部国漫做过剧场版,还有是观众一致希望未来会出剧场版的。那么究竟是哪些国漫呢,下面就一起来…...
Altium Designer许可需求分析
在电子设计的世界中,Altium Designer已成为设计师们的得力助手。然而,如何进行有效的许可需求分析,以确保软件的高效使用和企业的可持续发展?本文将带您了解如何进行Altium Designer的许可需求分析,让您在设计的道路上…...
[c++]类和对象常见题目详解
本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…...
【c++】类和对象(五)赋值运算符重载
🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章带大家认识赋值运算符重载,const成员,取地址及const取地址操作符重载等内容 目录 1.赋值运算符重载1.1运算符重载1.1.1特性&#…...
密码学基础-对称密码/公钥密码/混合密码系统 详解
密码学基础-对称密码/公钥密码 加解密说明1.加密解密必要因素加密安全性说明 什么是对称密码图示说明对称密码详解什么是DES?举例说明 什么是3DES什么是AES? 公钥密码什么是RSA? 对称密钥和公钥密码优缺点对比对称密码对称密码算法总结对称密码存在的问题? 公钥密码公钥密码…...
《装饰器模式(极简c++)》
本文章属于专栏- 概述 - 《设计模式(极简c版)》-CSDN博客 模式说明: 方案: 装饰类和派生类同根,然后装饰类中放一个派生类,以在接口不动的情况下增加功能优点: 可以灵活地扩展对象功能…...
Spring Boot 整合分布式搜索引擎 Elastic Search 实现 自动补全功能
文章目录 ⛄引言一、分词器⛅拼音分词器⚡自定义分词器 二、自动补全查询三、自动补全⌚业务需求⏰实现酒店搜索自动补全 四、效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,…...
实现一个Google身份验证代替短信验证
最近才知道公司还在做国外的业务,要实现一个登陆辅助验证系统。咱们国内是用手机短信做验证,当然 这个google身份验证只是一个辅助验证登陆方式。看一下演示 看到了嘛。 手机下载一个谷歌身份验证器就可以 。 谷歌身份验证器,我本身是一个基…...
Spring框架与Spring Boot的区别和联系
引言 Spring框架和Spring Boot都是Java生态中最受欢迎的开源框架,它们各自扮演着不同的角色,帮助开发者构建高效的企业级应用。本教程将从零基础的角度出发,让你轻松理解这两者的区别和联系。 Spring框架简介 Spring框架,简称Spri…...
[OpenCV学习笔记]Qt+OpenCV实现图像灰度反转、对数变换和伽马变换
目录 1、介绍1.1 灰度反转1.2 图像对数变换1.3 图像伽马变换 2、效果图3、代码实现4、源码展示 1、介绍 1.1 灰度反转 灰度反转是一种线性变换,是将某个范围的灰度值映射到另一个范围内,一般是通过灰度的对调,突出想要查看的灰度区间。 S …...
【大数据】Flink学习笔记
文章目录 认识FlinkDocker安装Flink基本概念Flink的特点Flink 和 Spark Streaming 对比 基本使用WordCount实现依赖 批模式代码流模式代码网络流模式代码在web UI上提交代码创建项目[^1]编写代码配置打包在Web UI上提交 Flink 架构系统架构核心概念并行度算子链(Opeartor Chain…...
社交网络的未来:Facebook如何塑造数字社交的下一章
引言 社交网络已成为我们生活中不可或缺的一部分,而Facebook作为其领军者,一直在塑造着数字社交的未来。本文将深入探讨Facebook在未来如何塑造数字社交的下一章,并对社交网络的发展趋势进行展望和分析。 1. 引领虚拟社交的潮流 Facebook将…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
