《数据库系统概论》学习笔记——第六章 关系数据理论
教材为数据库系统概论第五版(王珊)
这一章重点在于各种范式的概念和将低级范式转为高级范式。一定要看多值依赖和4NF(因为这个概念很绕又烦,但是期中期末都考了)。最后计算题就是一定要会:算闭包,求候选码,求最小函数依赖集,看本文的几题例题基本就会了。
6.1 问题的提出
关系数据库逻辑设计
- 针对具体问题,如何构造一个适合于它的数据模式
- 数据库逻辑设计的工具──关系数据库的规范化理论
一、概念回顾
- 关系
- 关系模式
- 关系数据库
- 关系数据库的模式
二、关系模式的形式化定义
关系模式由五部分组成,即它是一个五元组:
R(U, D, DOM, F)
- R: 关系名
- U: 组成该关系的属性名集合
- D: 属性组U中属性所来自的域
- DOM: 属性向域的映象集合
- F: 属性间数据的依赖关系集合
三、什么是数据依赖
1. 完整性约束的表现形式
- 限定属性取值范围:例如学生成绩必须在0-100之间
- 定义属性值间的相互关连(主要体现于值的相等与否),这就是数据依赖,它是数据库模式设计的关键
2. 数据依赖
- 一个关系内部属性与属性之间的约束关系
- 现实世界属性间相互联系的抽象
- 数据内在的性质
- 语义的体现
3. 数据依赖的类型
- 函数依赖(Functional Dependency,简记为FD)
- 多值依赖(Multivalued Dependency,简记为MVD)
- 其他
四、关系模式的简化表示
关系模式R(U, D, DOM, F)简化为一个三元组:
- R(U, F)
当且仅当U上的一个关系r满足F时,r称为关系模式 R(U, F)的一个关系
五、数据依赖对关系模式的影响
例:建立一个描述学校教务的数据库:学生的学号(Sno)、所在系(Sdept),系主任姓名(Mname)、课程名(Cname),成绩(Grade)
单一的关系模式 :Student <U、F>
U ={ Sno, Sdept, Mname, Cname, Grade }
属性组U上的一组函数依赖F:
F ={ Sno → Sdept, Sdept → Mname, (Sno, Cname) → Grade }
关系模式Student<U, F>中存在的问题
数据冗余太大
- 系主任姓名重复出现,浪费存储空间
更新异常(Update Anomalies)
- 更换系主任?更改系名?
插入异常(Insertion Anomalies)
- 一个系刚成立,尚无学生?
删除异常(Deletion Anomalies)
- 一个系的学生全部毕业了?
结论:
Student关系模式不是一个好的模式。
“好”的模式:不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少
原因:由存在于模式中的某些数据依赖引起的
解决方法:通过分解关系模式来消除其中不合适的数据依赖
6.2 规范化
规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
6.2.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是平凡的函数依赖
例:
在关系SC(Sno, Cno, Grade)中,
非平凡函数依赖: (Sno, Cno) → Grade
平凡函数依赖: (Sno, Cno) → Sno ,(Sno, Cno) → Cno
- 若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素(Determinant)。
- 若X→Y,Y→X,则记作X←→Y。
- 若Y不函数依赖于X,则记作X↛\nrightarrow↛Y。
三、完全函数依赖与部分函数依赖
在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’$\nrightarrow Y,则称Y对X∗∗完全函数依赖∗∗,记作Y, 则称Y对X**完全函数依赖**,记作Y,则称Y对X∗∗完全函数依赖∗∗,记作X\overset{F}{\rightarrow}Y$
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X→PYX\overset{P}{\rightarrow}YX→PY。
(Sno,Cno)→Grade是完全函数依赖,
(Sno,Cno)→Sdept是部分函数依赖,因为Sno →Sdept成立,且Sno是(Sno,Cno)的真子集
四、传递函数依赖
在R(U)中,如果X→Y,(Y∉X) ,Y$\nrightarrow XY→Z,则称Z对X∗∗传递函数依赖∗∗。记为:X Y→Z, 则称Z对X**传递函数依赖**。 记为:XY→Z,则称Z对X∗∗传递函数依赖∗∗。记为:X\overset{传递}{\rightarrow}Z$
注意:如果Y→X, 即X←→Y,则Z直接依赖于X。
在关系Std(Sno, Sdept, Mname)中,有:
Sno → Sdept,Sdept → Mname
则Mname传递函数依赖于Sno
6.2.2 码
候选码:
设K为R<U,F>中的属性或属性组合。若K→FUK\overset{F}{\rightarrow}UK→FU, 则K称为R的侯选码(Candidate Key)。
若候选码多于一个,则选定其中的一个做为主码(Primary Key)。
- 主属性与非主属性
- 包含在任何一个候选码中的属性称为主属性
- 不包含在任何码中的属性称为非主属性或非码属性
整个属性组是码,称为全码(All-key)
外码:
关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码(Foreign key)也称外码
- 主码与外部码一起提供了表示关系间联系的手段
6.2.3 范式
-
范式是符合某一种级别的关系模式的集合
-
关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式
范式的种类:
-
第一范式(1NF)
-
第二范式(2NF)
-
第三范式(3NF)
-
BC范式(BCNF)
-
第四范式(4NF)
-
第五范式(5NF)
各种范式之间存在联系:
-
某一关系模式R为第n范式,可简记为R∈nNF
规范化:
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化
6.2.4 2NF
1NF:
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
- 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
- 但是满足第一范式的关系模式并不一定是一个好的关系模式
例:关系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade)
Sloc为学生住处,假设每个系的学生住在同一个地方
函数依赖包括:
(Sno, Cno) →F\overset{F}{\rightarrow}→F Grade
Sno → Sdept
(Sno, Cno)→P\overset{P}{\rightarrow}→PSdept
Sno → Sloc
(Sno, Cno)→P\overset{P}{\rightarrow}→PSloc
Sdept → Sloc
- S-L-C的码为(Sno, Cno)
- S-L-C满足第一范式
- 非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)
但S-L-C不是一个好的关系模式
- 插入异常。插入一个学生信息,但学生还没有选课?
- 删除异常。学生取消选课,如果所有选课都取消了?
- 修改复杂。学生转系?住处也要修改
- 数据冗余度大
原因:Sdept、Sloc部分函数依赖于码。
解决方法:S-L-C分解为两个关系模式,以消除这些部分函数依赖
- SC(Sno, Cno, Grade)
- S-L(Sno, Sdept, Sloc)
不存在非主属性对码的部分依赖
2NF:
若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。
采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。但并不能完全消除。
判断一个关系是否属于第二范式:
找出数据表中的所有码;
找出所有主属性和非主属性;
判断所有的非主属性对码的部分函数依赖。
6.2.5 3NF
3NF:
关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Y不包含Z), 使得X→Y,Y→Z成立,Y$ \nrightarrow $X,则称R<U,F> ∈ 3NF。
若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。
若R∈3NF,当且仅当任何时候,每个元组都含有一个主码来识别实体,同时有一组0个或多个相互独立的属性从不同方面描述这个实体。
6.2.6 BCNF
BCNF:
关系模式R<U,F>∈1NF,若X→Y且X不包含Y时X必含有码,则R<U,F> ∈BCNF。
等价于:每一个决定属性因素都包含码
若R∈BCNF
- 所有非主属性对每一个码都是完全函数依赖
- 所有的主属性对每一个不包含它的码,也是完全函数依赖
- 没有任何属性完全函数依赖于非码的任何一组属性
6.2.7 多值依赖
例:学校中某一门课程由多个教师讲授,他们使用相同的一套参考书。每个教员可以讲授多门课程,每种参考书可以供多门课程使用。
非规范化关系:
用二维表表示Teaching:
- Teaching∈BCNF
- Teaching具有唯一候选码(C,T,B), 即全码
Teaching模式中存在的问题:
- 数据冗余度大
- 插入操作复杂。某门课程增加一个教员?需要插入多个元组
- 删除操作复杂。某门课程去掉一本参考书?需要删除多个元组
- 修改操作复杂
多值依赖:(真的难记)
设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’ 成立
6.2.8 4NF
4NF:
关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(X不包含Y),X都含有码,则R∈4NF。
如果R ∈ 4NF, 则R ∈ BCNF
- 不允许有非平凡且非函数依赖的多值依赖
- 允许的非平凡多值依赖是函数依赖
6.2.9 规范化小结
- 关系数据库的规范化理论是数据库逻辑设计的工具
- 目的:尽量消除插入、删除异常,修改复杂,数据冗余
- 基本思想:逐步消除数据依赖中不合适的部分
- 实质:概念的单一化
关系模式规范化的基本步骤
6.3 数据依赖的公理系统
逻辑蕴含:
对于满足一组函数依赖F的关系模式R <U,F>,其任何一个关系r,若函数依赖X→Y都成立,(即r中任意两元组t,s,若t[X]=s[X],则t[Y]=s[Y]),则称F逻辑蕴含X →Y
Armstrong公理系统
关系模式R <U,F >来说有以下的推理规则:
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所蕴含。
导出规则:
根据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)
引理1:
X→A1 A2…Ak成立的充分必要条件是X→Ai成立(i=l,2,…,k)
函数依赖闭包
在关系模式R<U,F>中为F所逻辑蕴含的函数依赖的全体叫作F的闭包,记为F+。
例:
Armstrong公理系统是有效的、完备的
- 有效性:由F出发根据Armstrong公理推导出来的每一个函数依赖一定在F+中;
- 完备性:F+中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来
设F为属性集U上的一组函数依赖,X⊆U, XF+ ={A|X→A能由F 根据Armstrong公理导出},XF+称为属性集X关于函数依赖集F的闭包
求闭包的算法:
例:背下这些详细步骤
候选码求解方法
对关系模式R<U,F>,选取可能是候选码的属性集,求其函数依赖闭包,如果属性集的函数依赖闭包=U,则该属性集为候选码
三类属性
L类:仅出现在F的函数依赖左边
R类:仅出现在F的函数依赖右边
N类:没有出现在F的函数依赖中定理1:L类属性必为任一候选码的成员
定理2:R类属性不在任何候选码中
定理3:N类属性必包含在任何候选码中
最小函数依赖集
定义:如果函数依赖集F满足以下条件,则称F为一个极小函数依赖集。也称为最小依赖集或最小覆盖。
(1)F中任一函数依赖的右部仅含有一个属性。
(2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}U{Z→A}与F等价。
最小依赖集通用算法:
① 用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;
② 去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能去掉,依次做下去。直到找不到冗余的函数依赖;
③ 去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个属性的依赖。例如XY→A,若要判Y为多余的,则以X→A代替XY→A是否等价?若A属于(X)+,则Y是多余属性,可以去掉。(以上步骤中,求出关系依赖集F,此时,在F的基础上,求出X或者Y的闭包,是否包含A)注意:第三步求闭包使用的依赖集是第二步求出时的。
例:关系模式R(U,F)中,U=ABCDEG,F={B->D,DG->C,BD->E,AG->B,ADG->BC};求F的最小函数依赖集
最后建议这章还是找点题目来做,也是有一定占比的
随便找的几篇:
http://t.csdn.cn/aFuG9
http://t.csdn.cn/cUnNC考试更会考这种贴近生活的例子
相关文章:

《数据库系统概论》学习笔记——第六章 关系数据理论
教材为数据库系统概论第五版(王珊) 这一章重点在于各种范式的概念和将低级范式转为高级范式。一定要看多值依赖和4NF(因为这个概念很绕又烦,但是期中期末都考了)。最后计算题就是一定要会:算闭包࿰…...

Odoo | Webserivce | 5分钟学会【JSONRPC】接口开发
文章目录Odoo - JsonRPC1. Odoo内方法结构(接收端)2. POST接口请求结构(发送端)3. 实例测试Odoo - JsonRPC 1. Odoo内方法结构(接收端) # -*- coding: utf-8 -*- import odoo import logging import trac…...

搜广推 NeuralCF - 改进协同过滤+矩阵分解的思想
😄 NeuralCF:2017新加坡国立大学提出。【后文简称NCF】 😄 PNN:2016年上海交通大学提出。 文章目录 NeuralCF动机原理general NCFNCF终极版(GMF+MLP的结合)缺点优点ReferenceNeuralCF 动机 前面学了MF,可知MF在用户-物品评分矩阵的基础上做矩阵分解(用户矩阵Q和物品…...

dbever连接kerberos认证的hive
文章目录一、本地安装kerberos客户端二、本地kerberos客户端登录三、dbever连接hive一、本地安装kerberos客户端 下载地址:https://web.mit.edu/kerberos/dist/index.html 安装:下一步或者自定义安装即可 安装后会自动生成配置文件:C:\Pro…...

pom依赖产生的各种问题
文章目录问题一(org.apache.ibatis.session.Configuration)解决方法问题二(ERROR StatusLogger No log4j2)解决方法问题三(com.google.common.util.concurrent)解决方法问题四(start bean documentationPluginsBootstrapper)解决方法问题五(Unable to infer base url. )解决办法…...

RPC编程:RPC框架设计目标
一:前导知识 Http是超文本传输协议,跨平台性非常好。Http可以传输文本,更多的时候传输的是文本,我们也是可以传输二进制的,我们基于Http进行下载的时候,就是走的Http协议。 Tcp协议,处理的时候…...

RBAC 权限模型介绍
RBAC 权限: 一、关系: 这基于角色的访问控制的结构就叫RBAC结构。 二、RBAC 重要对象: 用户(Employee):角色施加的主体;用户通过拥有某个或多个角色以得到对应的权限。角色(Role&…...

西电面向对象程序设计核心考点汇总(期末真题)
文章目录前言一、往年真题与答案1.1 改错题1.2 读程题1.3 面向对象程序设计二、易错知识点2.1 构造函数2.2 静态成员变量和静态成员函数2.3 权限2.4 继承2.5 多态总结前言 主要针对西安电子科技大学《面向对象程序设计》的核心考点进行汇总,包含总共8章的核心简答。…...

判断一个用字符串表达的数字是否可以被整除
一.问题引出 当一个数字很大的时候,我们常用字符串进行表达,(超过了int和long等数据类型可以存储的最大范围),但是这个时候我们该如何判断他是否可以被另一个数整除呢? 这个时候我们不妨这样来考虑问题,每次将前边求模之后的数保存下来,然后乘以10和这一位的数字进行相加的操…...

这是一款值得开发人员认真研究的软件,数据库优化,应用服务器安全优化...
1.查询数据库死锁相关信息2.查看数据库的链接情况3.当前实例上的所有用户4.创建数据库独立密码5.查看数据库使用的端口号6.当前数据库设置的最大连接数7.当前数据库最大的理论可连接数8.当前数据库实例的连接数9.当前数据库连接数10.当前数据库连接超时设置11.当前sqlserver 超…...

栈与队列小结
一、理论基础1.队列是先进先出,栈是先进后出2.栈和队列是STL(C标准库)里面的两个数据结构。栈提供push和pop等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器。3.栈是以底层容器…...

SpringBoot整合(五)HikariCP、Druid数据库连接池—多数据源配置
在项目中,数据库连接池基本是必不可少的组件。在目前数据库连接池的选型中,主要是 Druid ,为监控而生的数据库连接池。HikariCP ,号称性能最好的数据库连接池。 在Spring Boot 2.X 版本,默认采用 HikariCP 连接池。而…...

ShardingSphere水平、垂直分库、分表和公共表
目录一、ShardingSphere简介二、ShardingSphere-分库分表1、垂直拆分(1)垂直分库(2)垂直分表2、水平拆分(1)水平分库(2)水平分表三、水平分库操作1、创建数据库和表2、配置分片的规则…...

《分布式技术原理与算法解析》学习笔记Day24
分布式缓存 在计算机领域,缓存是一个非常重要的、用来提升性能的技术。 什么是分布式缓存? 缓存技术是指用一个更快的存储设备存储一些经常用到的数据,供用户快速访问。 分布式缓存是指在分布式环境或者系统下,把一些热门数据…...

强化学习RL 02: Value-based Reinforcement Learning
DQN和TD更新算法。 目录 Review 1. Deep Q-Network(DQN) 1.1 Approximate the Q*(s,a) Function 1.2 Apply DQN to Play Game 1.3 Temporal Difference(TD) Learning 1.4 TD Learning for DQN 1.4.1 TD使用条件 condition 1.4.2 Train DQN using TD learning 1.5 summ…...

08_MySQL聚合函数
1. 聚合函数介绍什么是聚合函数聚合函数作用于一组数据,并对一组数据返回一个值。聚合函数类型AVG()SUM()MAX()MIN()COUNT()注意:聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用。1.1 AVG和SUM函数可以对数值型数据使用AVG 和…...

「TCG 规范解读」词汇表
可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…...

第三阶段-03MyBatis 中使用XML映射文件详解
MyBatis 中使用XML映射文件 什么是XML映射 使用注解的映射SQL的问题: 长SQL需要折行,不方便维护动态SQL查询拼接复杂源代码中的SQL,不方便与DBA协作 MyBatis建议使用XML文件映射SQL才能最大化发挥MySQL的功能 统一管理SQL, 方…...

从0开始学python -41
Python3 命名空间和作用域 命名空间 先看看官方文档的一段话: A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries。 命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是…...

如何将Google浏览器安装到D盘(内含教学视频)
如何将Google浏览器安装到D盘(内含教学视频) 教学视频下载链接地址:https://download.csdn.net/download/weixin_46411355/87503968 目录如何将Google浏览器安装到D盘(内含教学视频)教学视频下载链接地址:…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...

RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...

Java设计模式:责任链模式
一、什么是责任链模式? 责任链模式(Chain of Responsibility Pattern) 是一种 行为型设计模式,它通过将请求沿着一条处理链传递,直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者,…...