数据库系统概论——函数依赖、码和范式(1NF、2NF、3NF、BCNF)详解

news2024/11/13 22:24:43

文章目录

  • 概念回顾
  • 1、函数依赖的定义
      • 1.1 平凡函数依赖和非平凡函数依赖
      • 1.2 完全函数依赖和部分函数依赖
      • 1.3 传递函数依赖
  • 2、码
      • 2.1 主码和候选码
      • 2.1主属性与非主属性
      • 2.2 全码
      • 2.3 外部码
  • 3、范式
      • 3.1 第一范式(1NF)
      • 3.2 第二范式(2NF)
      • 3.3 第三范式(3NF)
      • 3.4 BC范式(BCNF)

概念回顾

关系模式由五部分组成,即它是一个五元组:
R ( U , D , D O M , F ) R(U, D, DOM, F) R(U,D,DOM,F)

  • R : R: R 关系名
  • U : U: U 组成该关系的属性名集合
  • D : D: D 属性组U中属性所来自的域
  • D O M : DOM: DOM 属性向域的映象集合
  • F : F: F 属性间数据的依赖关系集合

关系模式 R ( U , D , D O M , F ) R(U, D, DOM, F) RU,D,DOM,F中, D D D D O M DOM DOM与逻辑结构设计关系不大,因此,将关系模式简化为一个三元组:

  • R ( U , F ) R(U, F) RU,F

当且仅当 U U U上的一个关系 r r r 满足 F F F时, r r r称为关系模式 R ( U , F ) R(U, F) RU,F的一个关系

1、函数依赖的定义

在这里插入图片描述

R ( U ) R(U) R(U)是一个属性集 U U U上的关系模式, X X X Y Y Y U U U的子集。

若对于 R ( U ) R(U) R(U)的任意一个可能的关系 r r r r r r中不可能存在两个元组在 X X X上的属性值相等, 而在 Y Y Y上的属性值不等, 则称 “ X X X函数确定 Y Y Y” 或 “ Y Y Y函数依赖于 X X X”,记作 X → Y X→Y XY

函数依赖说明:

  1. 所有关系实例均要满足

  2. 语义范畴的概念

  3. 数据库设计者可以对现实世界作强制的规定

1.1 平凡函数依赖和非平凡函数依赖

定义:
在关系模式 R ( U ) R(U) R(U)中,对于 U U U的子集 X X X Y Y Y

  • 如果X→Y,但 Y ⊈ X Y \not\subseteq X YX则称X→Y是非平凡的函数依赖
  • 若X→Y,但 Y ⊆ X Y \subseteq X YX, 则称X→Y是平凡的函数依赖

举例说明:
在关系SC(Sno, Cno, Grade)中

非平凡函数依赖

  • (Sno, Cno)——>Grade

平凡函数依赖

  • (Sno,Cno)——>Sno
  • (Sno,Cno)——>Cno

X → Y X→Y XY,则 X X X称为这个函数依赖的决定属性组,也称为决定因素(Determinant)。
X → Y , Y → X , X→Y,Y→X, XYYX则记作 X ← → Y X←→Y X←→Y
Y Y Y不函数依赖于 X X X,则记作 X ↛ Y X \not\rightarrow Y XY

1.2 完全函数依赖和部分函数依赖

定义:
R ( U ) R(U) R(U)中,如果 X → Y X→Y XY,并且对于 X X X的任何一个真子集 X ′ X^{'} X,都有 X ′ ↛ Y X^{'} \not\rightarrow Y XY,则称 Y 对 X Y对X YX完全函数依赖,记作 X → F Y X \overset F \rightarrow Y XFY

X → Y X→Y XY,但 Y Y Y不完全函数依赖于 X X X,则称 Y Y Y X X X部分函数依赖,记作 X → P Y X \overset P \rightarrow Y XPY

举例说明一下:

( S n o , C n o ) → F G r a d e (Sno,Cno) \overset F \rightarrow Grade (Sno,Cno)FGrade是完全函数依赖;
( S n o , C n o ) → S d e p t (Sno,Cno)→Sdept (Sno,Cno)Sdept是部分函数依赖

因为在完全函数依赖中,任何一个真子集(Sno或者Cno)都不能单独地决定Grade,也就是 S n o ↛ G r a d e Sno \not\rightarrow Grade SnoGrade C n o ↛ G r a d e Cno \not\rightarrow Grade CnoGrade
而在部分函数依赖中,任何一个真子集(Sno或者Cno)都可以单独地决定Sdept,也就是 S n o → S d e p t Sno \rightarrow Sdept SnoSdept C n o → S d e p t Cno \rightarrow Sdept CnoSdept

1.3 传递函数依赖

定义:
在R(U)中,如果 X → Y , ( Y ⊈ X ) , Y ↛ X , Y → Z X→Y,(Y \not\subseteq X) ,Y \not\rightarrow X, Y→Z XY(YX),YX,YZ, 则称 Z Z Z X X X传递函数依赖。 记作: X → Z X→Z XZ

注:
如果Y→X,即X←→Y,则Z直接依赖于X,非传递依赖。

例: 在关系Std(Sno, Sdept, Mname)中(属性组分别为学号、系别、系主任名字),有:

  • Sno → Sdept,Sdept → Mname
  • Mname传递函数依赖于Sno
    记作: Sno → Mname

2、码

在讲解码的概念之前,首先阐明一点,码即是键,键即是码,意思就是我们平时学习数据库进行表操作的时候,遇见的主键和外键就是主码和外码的意思,两者是同一概念,不要弄混。先给一个图大致理解下:
在这里插入图片描述

2.1 主码和候选码

定义:
K K K R < U , F > R<U,F> R<U,F>中的属性或属性组合。若 K → F U K \overset F \rightarrow U KFU,则 K K K称为 R R R的侯选码(Candidate Key)。

若候选码多于一个,则选定其中的一个做为主码(Primary Key)。

2.1主属性与非主属性

  • 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)。

  • 不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)

2.2 全码

整个属性组 U U U是码,称为全码(All-key)。

即当所有的属性共同构成一个候选码时,这时该候选码为全码。举例在关系模式R(教师,课程,学生)中,假如一个教师可以讲授多门课程,某门课程可以有多个教师讲授,学生可以听不同教师讲授的不同课程,那么,要区分关系中的每一个元组,这个关系模式R的候选码应为全部属性构成 (教师、课程、学生),即主码。

举例说明一下:
关系模式 S ( S n o ‾ , S d e p t , S a g e ) S(\underline{Sno},Sdept,Sage) S(Sno,Sdept,Sage)

  • 单个属性Sno是码,

S C ( S n o , C n o ‾ , G r a d e ) SC(\underline{Sno,Cno},Grade) SCSnoCnoGrade中,

  • (Sno,Cno)是码

关系模式 R ( P , W , A ) R(P,W,A) RPWA
P : P: P演奏者 W : W: W作品 A : A: A听众

  • 一个演奏者可以演奏多个作品
  • 某一作品可被多个演奏者演奏
  • 听众可以欣赏不同演奏者的不同作品

此关系模式的码为(P,W,A),即全码(All-Key)

2.3 外部码

定义:
关系模式 R R R 中属性或属性组 X X X 并非 R R R的码,但 X X X 是另一个关系模式 S S S的码,则称 X X X R R R外部码(Foreign key),简称外码。

举例:
如在 S C ( S n o , C n o ‾ , G r a d e ) SC(\underline{Sno,Cno},Grade) SCSnoCnoGrade中, S n o Sno Sno不是码,但 S n o Sno Sno是关系模式 S ( S n o ‾ , S d e p t , S a g e ) S(\underline{Sno},Sdept,Sage) SSnoSdeptSage的码,则 S n o Sno Sno是关系模式 S C SC SC的外部码。

3、范式

范式是符合某一种级别的关系模式的集合,在关系数据库中的关系必须满足一定的要求,而满足不同程度要求的关系为不同类型的范式

范式的种类:

  • 第一范式 ( 1 N F ) 第一范式(1NF) 第一范式(1NF)
  • 第二范式 ( 2 N F ) 第二范式(2NF) 第二范式(2NF)
  • 第三范式 ( 3 N F ) 第三范式(3NF) 第三范式(3NF)
  • B C 范式 ( B C N F ) BC范式(BCNF) BC范式(BCNF)
  • 第四范式 ( 4 N F ) 第四范式(4NF) 第四范式(4NF)
  • 第五范式 ( 5 N F ) 第五范式(5NF) 第五范式(5NF)

各种范式之间存在联系:
在这里插入图片描述

某一关系模式 R R R为第 n n n范式,可简记为 R ∈ n N F R∈nNF RnNF
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化 。

3.1 第一范式(1NF)

定义:
如果一个关系模式 R R R的所有属性都是不可分基本数据项,则 R ∈ 1 N F R∈1NF R1NF

第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。

但是满足第一范式的关系模式并不一定是一个好的关系模式

举例:
[例] 关系模式 S − L − C ( S n o , S d e p t , S l o c , C n o , G r a d e ) S-L-C(Sno, Sdept, Sloc, Cno, Grade) SLC(Sno,Sdept,Sloc,Cno,Grade)

  • S l o c Sloc Sloc为学生住处,假设每个系的学生住在同一个地方

函数依赖包括

  • ( S n o , C n o ) → F G r a d e (Sno, Cno) \overset F \rightarrow Grade (Sno,Cno)FGrade
  • S n o → S d e p t Sno → Sdept SnoSdept
  • ( S n o , C n o ) → P S d e p t (Sno, Cno) \overset P \rightarrow Sdept (Sno,Cno)PSdept
  • S n o → S l o c Sno → Sloc SnoSloc
  • ( S n o , C n o ) → P S l o c (Sno, Cno) \overset P \rightarrow Sloc (Sno,Cno)PSloc
  • S d e p t → S l o c Sdept → Sloc SdeptSloc

S − L − C S-L-C SLC的码为 ( S n o , C n o ) (Sno, Cno) (Sno,Cno)

S − L − C S-L-C SLC满足第一范式。

非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)

分解前的关系模式 S − L − C S-L-C SLC
在这里插入图片描述
但是 S − L − C S-L-C SLC不是一个好的关系模式,会产生以下问题:

  • (1) 插入异常
  • (2) 删除异常
  • (3) 数据冗余度大
  • (4) 修改复杂

原因:Sdept、 Sloc部分函数依赖于码。

解决方法:

  • S − L − C S-L-C SLC分解为两个关系模式,以消除这些部分函数依赖

    • S C ( S n o , C n o , G r a d e ) SC(Sno, Cno, Grade) SCSnoCnoGrade
    • S − L ( S n o , S d e p t , S l o c ) S-L(Sno, Sdept, Sloc) SLSnoSdeptSloc
  • 关系模式 S C SC SC的码为 ( S n o , C n o ) (Sno,Cno) SnoCno

  • 关系模式 S − L S-L SL的码为 S n o Sno Sno

  • 这样非主属性对码都是完全函数依赖

在这里插入图片描述

3.2 第二范式(2NF)

定义:
R ∈ 1 N F R∈1NF R1NF,且每一个非主属性完全函数依赖于码,则 R ∈ 2 N F R∈2NF R2NF

例:

  • S − L − C ( S n o , S d e p t , S l o c , C n o , G r a d e ) ∈ 1 N F S-L-C(Sno, Sdept, Sloc, Cno, Grade) ∈1NF SLC(Sno,Sdept,Sloc,Cno,Grade)1NF
  • S − L − C ( S n o , S d e p t , S l o c , C n o , G r a d e ) 分解为 2 N F : S-L-C(Sno, Sdept, Sloc, Cno, Grade) 分解为2NF: SLC(Sno,Sdept,Sloc,Cno,Grade)分解为2NF
    • S C ( S n o , C n o , G r a d e ) ∈ 2 N F SC(Sno, Cno, Grade) ∈ 2NF SCSnoCnoGrade2NF
    • S − L ( S n o , S d e p t , S l o c ) ∈ 2 N F S-L(Sno, Sdept, Sloc) ∈ 2NF SLSnoSdeptSloc2NF

采用投影分解法将一个 1 N F 1NF 1NF的关系分解为多个 2 N F 2NF 2NF的关系,可以在一定程度上减轻原 1 N F 1NF 1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

但将一个 1 N F 1NF 1NF关系分解为多个 2 N F 2NF 2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。

3.3 第三范式(3NF)

定义:

  • 关系模式 R < U , F > R<U,F> R<UF>中若不存在这样的码 X X X、属性组 Y Y Y及非主属性 Z ( Z ⊈ Y ) Z(Z \not\subseteq Y) ZZY, 使得 X → Y , Y → Z X→Y,Y→Z XYYZ成立, Y → X Y → X YX,则称 R < U , F > ∈ 3 N F R<U,F> ∈ 3NF R<UF>∈3NF
  • R ∈ 3 N F R∈3NF R3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码

例: 2 N F 2NF 2NF关系模式 S − L ( S n o , S d e p t , S l o c ) S-L(Sno, Sdept, Sloc) SL(Sno,Sdept,Sloc)中的函数依赖关系:

  • S n o → S d e p t Sno→Sdept SnoSdept
  • S d e p t ↛ S n o Sdept \not\rightarrow Sno SdeptSno
  • S d e p t → S l o c Sdept→Sloc SdeptSloc

可得:
S n o → 传递 S l o c Sno \overset {传递} \rightarrow Sloc Sno传递Sloc,即 S − L S-L SL存在非主属性对码的传递函数依赖, S − L ∉ 3 N F S-L \not\in 3NF SL3NF

函数依赖图:

在这里插入图片描述
解决方法:
采用投影分解法,把 S − L S-L SL分解为两个关系模式,以消除传递函数依赖:

  • S − D ( S n o , S d e p t ) S-D(Sno, Sdept) SDSnoSdept
  • D − L ( S d e p t , S l o c ) D-L(Sdept,Sloc) DLSdeptSloc
  • S − D S-D SD的码为 S n o Sno Sno D − L D-L DL的码为 S d e p t Sdept Sdept

分解后的关系模式 S − D S-D SD D − L D-L DL中不再存在传递依赖

采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。

3.4 BC范式(BCNF)

定义:
关系模式 R < U , F > ∈ 1 N F R<U,F>∈1NF R<UF>∈1NF,若 X ↛ Y X \not\rightarrow Y XY Y ⊆ X Y \subseteq X YX X X X必含有码,则 R < U , F > ∈ B C N F R<U,F> ∈BCNF R<UF>∈BCNF
等价于:每一个决定属性因素都包含码

若R∈BCNF

  • 所有非主属性对每一个码都是完全函数依赖
  • 所有的主属性对每一个不包含它的码,也是完全函数依赖
  • 没有任何属性完全函数依赖于非码的任何一组属性

在这里插入图片描述
如果R∈3NF,且R只有一个候选码
在这里插入图片描述

注意:如果一个关系模式 R R R属于 B C N F BCNF BCNF,则一定是 3 N F 3NF 3NF,但是一个关系模式 R R R如果属于 3 N F 3NF 3NF,则不一定是 B C N F BCNF BCNF

[例] 关系模式 S ( S n o , S n a m e , S d e p t , S a g e ) S(Sno,Sname,Sdept,Sage) SSnoSnameSdeptSage

  • 假定 S S S有两个码 S n o , S n a m e Sno,Sname SnoSname
  • S ∈ 3 N F S∈3NF S3NF
  • S ∈ B C N F S ∈ BCNF SBCNF

[例]在关系模式 S T J ( S , T , J ) STJ(S,T,J) STJSTJ中, S S S表示学生, T T T表示教师, J J J表示课程。
函数依赖:

  • ( S , J ) → T , ( S , T ) → J , T → J (S,J)→T,(S,T)→J,T→J (SJ)T(ST)JTJ
    - ( S , J ) 和 ( S , T ) (S,J)和(S,T) (SJ)(ST)都是候选码

在这里插入图片描述

  • S T J ∈ 3 N F STJ∈3NF STJ3NF
    • 没有任何非主属性对码传递依赖或部分依赖
  • S T J ∉ B C N F STJ \not\in BCNF STJBCNF
    • T T T是决定因素,在 B C N F BCNF BCNF中所有的主属性对每一个不包含它的码,也是完全函数依赖,但 T T T不包含码。 S T J STJ STJ显然不满足。

解决方法:将 S T J STJ STJ分解为二个关系模式:
S T ( S , T ) ∈ B C N F , T J ( T , J ) ∈ B C N F ST(S,T) ∈ BCNF, TJ(T,J)∈ BCNF ST(ST)BCNFTJ(TJ)BCNF

在这里插入图片描述

没有任何属性对码的部分函数依赖和传递函数依赖。

其它数据库系统概论详细请看:

  1. 数据库系统概论①——数据库系统基本概念
  2. 数据库系统概论②——关系数据库基础
  3. 数据库系统概论——关系代数详解

原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

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

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

相关文章

现在的互联网技术,已蜕变成区块链技术,人工智能技术

在互联网的进化过程中&#xff0c;我们看到了互联网技术的不断孪生与蝶变。现在的互联网技术&#xff0c;早已不再是传统意义上的互联网技术&#xff0c;而是蜕变成为了大数据技术&#xff0c;云计算技术&#xff0c;蜕变成为了区块链技术&#xff0c;人工智能技术。这些新的技…

【STM32笔记】HAL库ADC测量精度提高方案(利用内部参考电压VREFINT计算VDDA来提高精度)

【STM32笔记】HAL库ADC测量精度提高方案&#xff08;利用内部参考电压VREFINT计算VDDA来提高精度&#xff09; 多数STM32的MCU 都没有内部基准电压 如L496系列 但在外接VDDA时&#xff08;一般与VCC 3.3V连接&#xff09; 有可能VCC不稳定 导致参考电压不确定 从而使ADC测量不…

深度学习调参炼丹术(总结向)

调参控制变量&#xff0c;每次调一个值。 1.初始化方式&#xff1a;FC/CNN用kaiming uniform或normalize&#xff0c;Emendding选截断normalize 2.activation function&#xff1a;sigmoid(淘汰)、tanh(淘汰)、relu(推荐)、leakey-relu 3.优化器&#xff1a;SGD动量&#xff0…

若依配置教程(三)新建模块

若依模块化管理&#xff0c;使代码更加规范化&#xff0c;方便在不同文件夹下进行修改和开发。 接下来是新建模块的步骤&#xff1a; 文章目录**接下来是新建模块的步骤&#xff1a;**1.创建新的module2.配置pom.xml1.创建新的module 项目上鼠标右击&#xff1a; 然后修改项…

Kettle 实战教程

Kettle 实战教程1.引言....................................................................................81.1 编写目的...........................................................81.2 阅读对象...........................................................91.3 术…

DBCO-SS-Mal;DBCO二硫键-马来酰亚胺-点击化学

DBCO-SS-Maleimide&#xff1b;Mal-SS-DBCO 英 文 &#xff1a;DBCO-SS-Maleimide 中文&#xff1a;二苯并环辛炔-二硫键-马来酰亚胺 分子式&#xff1a;C30H30N4O5S2 分子量&#xff1a;590.71 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff…

做自媒体,有哪些好用的工具和软件,这6大自媒体工具,力荐!

工具一&#xff1a;效率控 效率控是一个汇集很多工具的工具APP。使用它可以用来习惯养成&#xff0c;表情制作&#xff0c;二维码生成&#xff0c;倒数日&#xff0c;文字识别&#xff0c;配色方案等等。 它特别一个亮点的功能是剪切板增强&#xff0c;还有一个特别实用的功能是…

DevStyle,一个让Java开发更现代化的工具!

如果您喜欢Eclipse的强大功能&#xff0c;但对它的可用性和美观度没有很高的要求&#xff0c;那么从今天开始&#xff0c;请准备好从全新的角度来看待Eclipse。在之前暗黑的插件基础上&#xff0c;MyEclipse官方团队为大家带来了DevStyle。使用DevStyle&#xff0c;开发人员可以…

小程序提升篇-组件

提升篇学习目标如何自定义小程序组件小程序组件中behaviors的作用安装和配置vant-weapp组件库如何使用MobX实现全局数据共享如何对小程序API进行Promise化小程序组件学习目标创建并引用组件&#xff08;全局、局部、usingComponent&#xff09;修改组件样式&#xff08;option-…

Java JVM:字节码执行引擎(六)

执行引擎是 Java 虚拟机核心的组成部分之一&#xff0c;执行引擎由软件自行实现 目录一、运行时栈帧结构二、方法调用三、基于栈的字节码解释执行引擎四、OSGI&#xff1a;灵活的类加载器架构一、运行时栈帧结构 Java 虚拟机以方法作为最基本的执行单元&#xff0c;“栈帧”则…

如何用ffmpeg截取视频片段 以及 截取时间不准确的坑

之前在工作中&#xff0c;有遇到需要程序化截取视频片段的场景&#xff0c;这里使用ffmpeg命令行就可以很容易实现&#xff0c;这里也记录下我们使用过程中遇到的坑&#xff0c;希望对大家也有所帮助。    举个例子&#xff0c;当我们要截取视频文件中input.mp4的第15秒到第9…

【C语言练习】逻辑分析题

目录题目一&#xff1a;求名次题目详情&#xff1a;解题思路&#xff1a;题目二&#xff1a;找凶手题目详情&#xff1a;解题思路&#xff1a;题目一&#xff1a;求名次 题目详情&#xff1a; 5位运动员参加了10米台跳水比赛&#xff0c;有人让他们预测比赛结果&#xff1a; A…

(02)Cartographer源码无死角解析-(52) 2D点云扫描匹配→ceres扫描匹配:CeresScanMatcher2D→栅格地图残差

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

上海洲邦携手图扑建设数字孪生工厂,获 2022 智能制造优秀场景

前言 12 月 2 日&#xff0c;工信部公示了 2022 年度智能制造示范工厂揭榜单位和优秀场景名单。图扑软件和上海洲邦合作建设的宁波甬友数字孪生工厂被评为优秀场景&#xff0c;全国共有 369 个智能制造典型场景入选。 《智能制造试点示范行动实施方案》包括智能制造优秀场景和…

ESP-IDF:快速排序测试

ESP-IDF:快速排序测试 /快速排序测试/ void printArray(int arr[], int len) { for (int i 0; i < len; i) { cout << arr[i] << " "; } cout << endl; } void QuickSort(int arr[], int start, int end) { int i start; int j end; // 找…

【IoT】蔽障智能车设计:带有无线调试系统的蔽障小车

说明 近年来随着计算机在社会领域的渗透和大规模集成电路的发展&#xff0c;单片机的应用正在不断地走向深入&#xff0c;由于它具有功能强&#xff0c;体积小&#xff0c;功耗低&#xff0c;价格便宜&#xff0c;工作可靠&#xff0c;使用方便等特点&#xff0c;因此越来越广…

Activiti7工作流-使用idea插件actiBPM设计请假流程---工作流工作笔记005

首先我们看一下我们之前写的测试类, ProcessEngine 这个流程引擎,打开 看源码可以看到有几个常用的, HistoryService就是用来管理之前_hi表的,关于历史的 TaskService用来管理任务的 RuntimeService用来管理_run那些运行时的表的 然后我们还可以通过,上面定义的processEngi…

程序员的成长离不开哪些软技能?

道破一个残忍的真相&#xff1a;一个程序员的成长往往是软技能&#xff1e;硬技能&#xff0c;想纯靠技术能力一路挺过35岁基本是不可能的任务&#xff0c;作为一个优秀的程序员&#xff0c;离不开以下这些软技能。 较真 所有在技术上的较真都是一次专业技能的提升&#xff0…

Ruoyi-Cloud框架学习-【07 新增功能模块】

根据该博客新建模块后&#xff0c;在添加具体的数据表实现增删改查 在ruoyi-cloud中建立数据表 新建business_device表中【与gen_table、gen_table_column在一个库】 CREATE TABLE business_device (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键,name varchar(255) COLLA…

USB转双串口芯片 CH342 兼容替代CP2105

概述CH342是一个USB总线的转接芯片&#xff0c;实现USB转两个异步串口。每个串口都支持高速全双工&#xff0c;支持奇偶校验&#xff0c;提供了常用的MODEM联络信号&#xff0c;用于为计算机扩展异步串口&#xff0c;或者将普通的串口设备或者MCU直接升级到USB总线。特点全速US…