关系代数、函数依赖、Armstrong公理及软考试题解析

news2024/12/23 12:20:44

注:本文面向于软考高级—系统架构设计师,具体来说是数据库部分,知识点偏零碎化。想要系统学习数据库原理的,可考虑去看《数据库原理》,清华大学出版社或其他出版社皆可。

概述

概念

关系,就是二维表。特性:

  • 列不可分性:关系中每一列都是不可再分的属性,即不能出现如下复合属性
  • 行列无序性:交换列的前后顺序不影响关系模式的语义表达
  • 实体完整性:关系中不可能出现两个完全相同的元组

属性:二维表中的每一列称为属性,每个属性有一个名字称为属性名,某一列的值称为属性值。

值域:二维表中属性的取值范围。

元组:二维表中的一行数据称为元组,也叫记录。

分量:元组中的每个属性值称为元组的分量。

关系模式:关系的描述就是关系模式

超码:一个或多个属性的集合,这些属性的集合可以使我们在一个关系中唯一标识一个元组。

候选码:候选码是最小的超码,即候选码可以唯一标识一个元组,但除去候选码中的任何一个属性均不能唯一标识元组。

主码:当有多个候选码时可以选择一个作为主码,一个关系只有一个主码。主码能够唯一标识一个关系的元组且不含有多余元素。

外码:外码用于表示两个或多个实体间的关联关系。外码实际上是关系中的一个或多个属性,这些属性引用其他关系的主码或(候选码),详见参照完整性约束。

主属性:包含在任意候选码中的属性称为主属性,不包含在任意候选码中的属性叫非主属性。

逻辑蕴涵:设F是 R ( U ) R(U) R(U)上的一个函数依赖集合,X和Y是R的属性子集。如果从F中的函数依赖能推导出 X → Y X→Y XY,称F逻辑蕴涵 X → Y X→Y XY,记作 F ⊨ X → Y F⊨X→Y FXY

闭包:被F逻辑蕴涵的所有函数依赖集合称为𝐹的闭包,记作 F + F^+ F+。如果 F = F + F=F^+ F=F+,则F是一个全函数依赖族,或称函数依赖完备集。

完整性约束

数据完整性约束包含三大类:

  • 实体完整性约束:可以通过Primary Key指定。指数据库所有表中都有主码,且表中不允许存在:a.无主码的记录 (数据库中所有记录主码中所有属性都不为空) b.主码相同的记录。
  • 参照完整性约束:也称引用完整性,要求关系中不允许引用不存在的实体。描述实体间的联系,一般是指多个实体表之间的引用关系。通过Foreign Key指定,某些简单的约束可以通过Check、Assertion等实现。针对复杂的约束,系统提供触发器机制,通过用户编程实现。
  • 用户自定义完整性约束:也称为域完整性和语义完整性,任何关系数据库管理系统都应支持实体完整性参照完整性,除此之外根据要求不同还需要加一些特殊的约束条件。

关系代数表达式

关系代数中包括:并(∪)、交(∩)、差(-)、乘(笛卡尔积,×)、选择(σ)、投影(π)、联接(等值联接,)、除(÷)、自然联接(⋈)等操作。

五个基本操作:并、差、笛卡尔积、投影、选择,四个组合操作:交、联接、除、自然联接。

等值连接:Equi Join,表示先做笛卡尔积(×)之后,对相应列进行选择或等值关联后的结果;仅筛选行、不筛选列。

自然连接:Natural Join,一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并在结果中把重复的属性列去掉。而等值连接并不去掉重复的属性列。

由关系代数运算经有限次复合而成的式子称为关系代数表达式。这种表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的查询和更新操作。

关系代数表达式可使用属性列,也可以使用数字,两者是等价的。两个关系的共有属性列,需要标上关系.属性列,不能简单的使用属性列。

举例来说,有关系 R ( A , B , C , D ) R(A,B,C,D) R(A,B,C,D) S ( C , D ) S(C,D) S(C,D),关系代数表达式 π A , R . D ( σ R . C = S . D ( R ⋈ S ) ) π_{A,R.D}(\sigma_{R.C=S.D}(R⋈S)) πA,R.D(σR.C=S.D(RS))与关系代数表达式 π 1 , 4 ( σ 3 = 6 ( R ⋈ S ) ) π_{1,4}(\sigma_{3=6}(R⋈S)) π1,4(σ3=6(RS))等价。R.D不能写成D,因为D是两个关系里都有的属性列。

给定关系 R ( A , B , C , D , E ) R(A,B,C,D,E) R(A,B,C,D,E) S ( A , B , C , F , G ) S(A,B,C,F,G) S(A,B,C,F,G),表达式 π 1 , 2 , 4 , 6 , 7 ( σ 1 < 6 ( R ⋈ S ) ) π_{1,2,4,6,7}(\sigma_{1<6}(R⋈S)) π1,2,4,6,7(σ1<6(RS)),因为A、B、C是两个关系的共有属性列,等价SQL语句为:SELECT R.A,R.B,D,F,G FROM R,S WHERE R.A=S.A AND R.B=S.B AND R.C=S.C AND R.A<S.F

候选码

也叫候选关键字。若关系中的一个属性或属性组的值能够唯一地标识一个元组,且他的子集不能唯一的标识一个元组,则称这个属性或属性组为候选码。

快速求候选码的方法

对于给定的关系模式 R ( A 1 , A 2 , . . . , A n ) R(A_1,A_2,...,A_n) R(A1,A2,...,An)和函数依赖集F,可以将它的属性划分为4类:

  • L类:Left,仅出现在F的函数依赖左部的属性
  • R类:Right,仅出现在F的函数依赖右部的属性
  • N类:None,在F的函数依赖左部和右部均未出现的属性
  • LR类:Left AND Right,在F的函数依赖左部和右部两部均出现的属性。

根据以下定理和推论来求解候选码。

  • 定理1:若X(X∈R,下同)是L类属性,则X必为R的任一候选码的成员
  • 推论1:若X是L类属性,且X+包含R的全部属性,则X必为R的唯一候选码
  • 定理2:若X是R类属性,则X不在任何候选码中
  • 定理3:若X是R的N类属性,则X必包含在R的任一候选码中
  • 推论2:若X是R的N类和L类组成的属性集,且X+包含R的所有属性,则X是R的唯一候选码

图论判定方法

函数依赖

某个属性集决定另一个属性集时,称另一属性集依赖于该属性集。举例来说,在设计学生表时,一个学生的学号能决定学生的姓名,则称姓名依赖于学号。

函数依赖分为非平凡依赖,平凡依赖:

  • 非平凡依赖:当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y
  • 平凡依赖:当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集

从性质上还可以分为:

  • 完全函数依赖:Full Functional Dependency,设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X
  • 部分函数依赖:Part Functional Dependency,设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X
  • 传递函数依赖:Transitive Functional Dependency,设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y!→X),Y→Z,则称Z传递函数依赖于X

属性关系与函数依赖

属性之间有三种关系,但并不是每一种关系都存在函数依赖。设R(U)是属性集U上的关系模式,X、Y是U的子集:

  • 如果X和Y之间是1:1关系(一对一关系),则存在函数依赖X→Y和Y→X
  • 如果X和Y之间是1:n关系(一对多关系),则存在函数依赖Y→X
  • 如果X和Y之间是m:n关系(多对多关系),则X和Y之间不存在函数依赖

模式分解

模式分解是数据库设计中的重要步骤,即将一个关系模式分解成多个关系模式,以便更好地满足数据库设计的要求。

把一个关系模式分解成若干个关系模式的过程,称为关系模式的分解。把低一级的关系模式分解为若干个高一级的关系模式的方法不是唯一的。只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义。

判断分解是等价的方法:

  • 分解具有无损连接性(Lossless Join)
  • 分解要保持函数依赖(Preserve Dependency)
  • 分解既要保持函数依赖,又要具有无损连接性

无损分解

Lossless Decomposition,对关系模式分解时,原关系模型下任一合法的关系值在分解之后应能通过连接操作(如自然联接)恢复起来(重新构造出原始的关系)。如果不能恢复,则是有损分解。

函数依赖分解

Functional Dependency Decomposition,指根据关系模式中的函数依赖关系,将一个关系模式分解成多个关系模式,以消除冗余和提高数据的完整性和一致性。

无损分解通常是函数依赖分解的结果之一。在进行函数依赖分解时,通常会通过分解来消除冗余和提高规范化程度,而同时保持分解后的关系能够无损地重构原始关系。

但是,某个分解是无损分解并不一定意味着它同时也是函数依赖分解。

最小覆盖

如果函数依赖集合F满足下面的条件,称F为最小覆盖或最小依赖集:

  • F中每个函数依赖,右部都是单个属性。
  • ∀ X → A ∈ F ∀X→A∈F XAF,有 F − { X → A } F−\{X→A\} F{XA}不等价于F。即,F是最小的,去掉F中的任何一个函数依赖都不行。
  • ∀ X → A ∈ F ∀X→A∈F XAF Z ⊂ X Z⊂X ZX,有 ( F − { X → A } ) ∪ { Z → A } (F−\{X→A\})∪\{Z→A\} (F{XA}){ZA}不等价于F。即F中的任何一个函数依赖都是最小的,不可以把它们的左部缩小。

构造最小依赖的方法:

  • 分解:将 X → A B X→AB XAB分解成 X → A X→A XA X → B X→B XB,即所有依赖的右部都是单一属性。
  • 去除左部多余的属性:逐一检查所有的依赖项的左部。对于左部不是单一属性的依赖项,例如 X Y → A XY→A XYA,判断Y是否多余。计算 X + X^+ X+,如果 X + X^+ X+包含 Y Y Y,则Y就是多余的,可以去掉。
  • 去掉多余的依赖:对于每一个依赖项 X → Y X→Y XY,先去掉它,然后在其他项里求 X + X^+ X+,如果 X + X^+ X+包含Y,那么确实可以去掉它,否则就不能去掉。

ER图冲突

ER图集成时产生的冲突及解决办法:

  • 属性冲突:包括属性域和属性取值的冲突
  • 命名冲突:包括同名异义和异名同义
  • 结构冲突:包括同一对象在不同应用中具有不同的抽象,以及统一实体在不同的局部E-R图中所包含的属性个数和属性排列次序不完全相同

元祖演算

合并规则

Armstrong公理系统

基于一些推理规则,从已知的一些函数依赖,可以推导出另外一些函数依赖。这些推理规则就是函数依赖的Armstrong公理系统。

设关系模式 R ( U , F ) R(U,F) R(U,F),其中U为属性集,F是U上的一组函数依赖,则有6条推理规则(根据下述前三条规则可推出后三条):

  • 自反律:若属性集Y包含于属性集X,属性集X包含于U,则X→Y在R上成立。(此处X→Y是平凡函数依赖)
  • 增广律:若X→Y在R上成立,且属性集Z包含于属性集U,则XZ→YZ在R上成立
  • 传递律:若X→Y和Y→Z在R上成立,则X→Z在R上成立
  • 合并规则:若X→Y,X→Z,则X→YZ在R上同样成立
  • 分解规则:若X→W在R上成立,且属性集Z包含于W,则X→Z在R上也成立
  • 伪传递规则:若X→Y在R上成立,且WY→Z,则XW→Z在R上也成立

Armstrong公理系统是有效且完备的:

  • 有效性:由R出发根据Armstrong公理系统推导出来的每一个函数依赖一定是R所逻辑蕴含的函数依赖。
  • 完备性:对于R所逻辑蕴含的每一函数依赖,必定可以由R出发根据Armstrong公理系统推导出来。

证明

实战

关系代数表达式

给定学生 S ( 学号,姓名,年龄,入学时间,联系方式 ) S(学号,姓名,年龄,入学时间,联系方式) S(学号,姓名,年龄,入学时间,联系方式)和选课 S C ( 学号,课程号,成绩 ) SC(学号,课程号,成绩) SC(学号,课程号,成绩)关系,若要查询选修1号课程的学生的学号、姓名、成绩,则该查询的关系代数表达式为: π 1 , 2 , 7 ( σ 6 = ′ 1 ′ ( S ⋈ S C ) ) π_{1,2,7}(\sigma_{6='1'}(S⋈SC)) π1,2,7(σ6=1(SSC))

解析:先进行S与SC关系的自然连接,即选取S.学号=SC.学号的元组并去掉右边的重复属性学号,生成的新关系为(学号,姓名,年龄,入学时间,联系方式,课程号,成绩),共有7个属性列。
π 1 , 2 , 7 ( σ 6 = ′ 1 ′ ( S ⋈ S C ) ) π_{1,2,7}(\sigma_{6='1'}(S⋈SC)) π1,2,7(σ6=1(SSC))的含义为:进行S与SC关系的自然连接,选取S.学号=sc.学号的元组并去掉右边的重复属性学号,再选取“课程号=1”的元组,最后进行学号、姓名和成绩的投影运算。

自然连接

关系R、S如下图所示,进行自认连接运算后的元祖个数和属性列数分别是(3和4);关系代数表达式 π 1 , 4 ( σ 3 = 6 ( R ⋈ S ) ) π_{1,4}(\sigma_{3=6}(R⋈S)) π1,4(σ3=6(RS))与关系代数表达式 π A , R . D ( σ R . C = S . D ( R ⋈ S ) ) π_{A,R.D}(\sigma_{R.C=S.D}(R⋈S)) πA,R.D(σR.C=S.D(RS))等价。

R如下:

ABCD
6315
6151
6574
6374

S如下:

CD
15
74

解析:自然连接是在等值连接的基础上去掉重复的属性列,而等值连接又要求R和S有相等的属性才能连接。因此, R ⋈ S R⋈S RS结果为

ABCD
6315
6574
6374

有3行,故而元祖个数为3。

投影

给定关系模式 R ( A , B , C , D , E ) R(A,B,C,D,E) R(A,B,C,D,E) S ( D , E , F , G ) S(D,E,F,G) S(D,E,F,G) π 1 , 2 , 4 , 6 ( R ⋈ S ) π_{1,2,4,6}(R⋈S) π1,2,4,6(RS),经过自然连接和投影运算后的属性列数分别是(7和4)。

解析:自然连接 R ⋈ S R⋈S RS是指R与S关系中相同属性列名经过等值连接运算后,再去掉右边重复的属性列名S.D、S.E,所以经 R ⋈ S R⋈S RS运算后的属性列名为:R.A、R.B、R.C、R.D、R.E、S.F和S.G,共有7个属性列。

经过投影运算后的属性列名为:R.A、R.B、R.D、S.F,共有4个属性列。

候选码

给定关系模式 R ( U , F ) R(U,F) R(U,F),其中属性集 U = { A 1 , A 2 , A 3 , A 4 , A 5 , A 6 } U=\{A_1,A_2,A_3,A_4,A_5,A_6\} U={A1,A2,A3,A4,A5,A6},函数依赖集 F = { A 1 → A 2 , A 1 → A 3 , A 3 → A 4 , A 1 A 5 → A 6 } F=\{A_1→A_2,A_1→A_3,A_3→A_4,A_1A_5→A_6\} F={A1A2,A1A3,A3A4,A1A5A6},关系模式R的候选码为(A1A5)。由于R存在非主属性对码的部分函数依赖,所以R属于()。

解析:因为A1A5仅出现在函数依赖集F左部的属性,所以A1A5必为R的任一候选码的成员。又因为A1A5的闭包等于U,则A1A5必为R的唯一候选码。

元祖演算

给定元祖演算表达式 R ∗ = { t │ ( Э u ) ( R ( t ) ∧ S ( u ) ∧ t [ 3 ] < u [ 2 ] ) } R^*=\{t│(Эu)(R(t)∧S(u)∧t[3]<u[2])\} R={t(Эu)(R(t)S(u)t[3]<u[2])},若关系R、S如下图,则 R ∗ = { ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) , ( 7 , 8 , 9 ) } R^*=\{(1,2,3),(4,5,6),(7,8,9)\} R={(1,2,3),(4,5,6),(7,8,9)}

R如下:

ABC
123
456
789
101112

S如下:

ABC
3711
456
5913
61014

解析: R ∗ = { t │ ( Э u ) ( R ( t ) ∧ S ( u ) ∧ t [ 3 ] < u [ 2 ] ) } R^*=\{t│(Эu)(R(t)∧S(u)∧t[3]<u[2])\} R={t(Эu)(R(t)S(u)t[3]<u[2])}的含义为:新生成的关系 R ∗ R^* R中的元组来自关系R,但该元组的第三个分量值必须小于关系S中某个元组的第二个分量值。显然查询结果只有R关系的第一个、第二个和第三个元组满足条件。

模式分解

无损分解

已知关系模式 R ( U , F ) R(U,F) R(U,F),属性集 U = { A , B , C , D , E } U=\{A,B,C,D,E\} U={A,B,C,D,E},函数依赖集 F = { A B → C , C → D , D → E } F=\{AB→C,C→D,D→E\} F={ABC,CD,DE},R的一个分解为 p = { R 1 ( A , B , C ) , R 2 ( C , D ) , R 3 ( D , E ) } p=\{R1(A,B,C),R2(C,D),R3(D,E)\} p={R1(A,B,C)R2(C,D)R3(D,E)},判断是否为无损分解。

构造表初始化:根据分解的R进行构造,和F无关;根据表中行号中的元素,填上对应的 a i a_i ai,空白部分则补上 b i j b_{ij} bij,于是得到

分解的关系模式ABCDE
ABC a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3 b 14 b_{14} b14 b 15 b_{15} b15
CD b 21 b_{21} b21 b 22 b_{22} b22 a 3 a_3 a3 a 4 a_4 a4 b 25 b_{25} b25
DE b 31 b_{31} b31 b 32 b_{32} b32 b 33 b_{33} b33 a 4 a_4 a4 a 5 a_5 a5

由于AB→C,找AB列(不是A、B列),发现每一行(元组)中AB组合没有相同的,跳过;
由于C→D,找C列,发现1、2行相同(只看C列),因此将D列的1行改为 a 4 a_4 a4
由于D→E,找到D列,发现1、2、3行全部相同(只看D列),因此将E列的1、2行都改为 a 5 a_5 a5

于是得到

分解的关系模式ABCDE
ABC a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3 a 4 a_{4} a4 a 5 a_{5} a5
CD b 21 b_{21} b21 b 22 b_{22} b22 a 3 a_3 a3 a 4 a_4 a4 a 5 a_{5} a5
DE b 31 b_{31} b31 b 32 b_{32} b32 b 33 b_{33} b33 a 4 a_4 a4 a 5 a_5 a5

全部处理完,发现第一行(只需要考虑某一行即可)出现 a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3 a 4 a_4 a4 a 5 a_5 a5,因此本次分解为无损连接分解。

无损且函数依赖分解

设关系模式 R ( U , F ) R(U,F) R(U,F),R上的属性集 U = { A , B , C , D , E } U=\{A,B,C,D,E\} U={A,B,C,D,E},函数依赖集 F = { A → B , D E → B , C B → E , E → A , B → D } F=\{A→B,DE→B,CB→E,E→A,B→D\} F={AB,DEB,CBE,EA,BD},分解(D)是无损分解,并保持函数依赖的。

A. p = { R 1 ( A C ) , R 2 ( E D ) , R 3 ( B ) } p=\{R1(AC),R2(ED),R3(B)\} p={R1(AC),R2(ED),R3(B)}
B. p = { R 1 ( A C ) , R 2 ( E ) , R 3 ( D B ) } p=\{R1(AC),R2(E),R3(DB)\} p={R1(AC),R2(E),R3(DB)}
C. p = { R 1 ( A C ) , R 2 ( E D ) , R 3 ( A B ) } p=\{R1(AC),R2(ED),R3(AB)\} p={R1(AC),R2(ED),R3(AB)}
D. p = { R 1 ( A B C ) , R 2 ( E D ) , R 3 ( A C E ) } p=\{R1(ABC),R2(ED),R3(ACE)\} p={R1(ABC),R2(ED),R3(ACE)}

解析:选择题,答案是D。构造初始的判定表如下:

分解的关系模式ABCDE
R1(ABC) a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3 b 14 b_{14} b14 b 15 b_{15} b15
R2(ED) b 21 b_{21} b21 b 22 b_{22} b22 b 23 b_{23} b23 a 4 a_4 a4 a 5 a_5 a5
R3(ACE) a 1 a_1 a1 b 32 b_{32} b32 a 3 a_3 a3 b 34 b_{34} b34 a 5 a_5 a5

分析函数依赖集,由于:

  • A→B,属性A的第1行和第3行相同,可以将第3行第2列, b 32 b_{32} b32改为 a 2 a_2 a2
  • E→A,属性E的第2行和第3行相同,可以将属性A第2行 b 21 b_{21} b21改为 a 1 a_1 a1
  • CB→E,属性BC的第1行和第3行相同,可以将属性E第1行 b 15 b_{15} b15改为 a 5 a_5 a5
  • B→D,属性B的第1行和第3行相同,属性D第1行 b 14 b_{14} b14和第3行 b 34 b_{34} b34没有一行为 a 4 a_4 a4,因此改为同一符号,即取行号值最小 b 14 b_{14} b14

修改后的判定表如下:

分解的关系模式ABCDE
R1(ABC) a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3 b 14 b_{14} b14 a 5 a_{5} a5
R2(ED) a 1 a_{1} a1 b 22 b_{22} b22 b 23 b_{23} b23 a 4 a_4 a4 a 5 a_5 a5
R3(ACE) a 1 a_1 a1 a 2 a_{2} a2 a 3 a_3 a3 b 14 b_{14} b14 a 5 a_5 a5

需要进一步分析:
由于E→A且A→B且B→D,所以E→D,属性E的第1~3行相同。可以将属性D第1行 b 14 b_{14} b14和第3行 b 14 b_{14} b14改为 a 4 a_4 a4(软考答案给出的解析。没看懂!!!!)。修改后的判定表如下:

分解的关系模式ABCDE
R1(ABC) a 1 a_1 a1 a 2 a_2 a2 a 3 a_3 a3 a 4 a_{4} a4 a 5 a_{5} a5
R2(ED) a 1 a_{1} a1 b 22 b_{22} b22 b 23 b_{23} b23 a 4 a_4 a4 a 5 a_5 a5
R3(ACE) a 1 a_1 a1 a 2 a_{2} a2 a 3 a_3 a3 a 4 a_{4} a4 a 5 a_5 a5

发现第一行或第三行,全为a,故分解无损。

若分解保持函数依赖,那么分解的子模式的函数依赖集
在这里插入图片描述
F + = ( F R 1 + F R 2 + F R 3 ) + = ( A → B , C B → A , E → D , E → A ) + F^+=(F_{R1}+F_{R2}+F_{R3})^+=(A→B,CB→A,E→D,E→A)^+ F+=(FR1+FR2+FR3)+=(AB,CBA,ED,EA)+

参考

  • 软考高级试题
  • 百度百科

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

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

相关文章

2024年上半年软件设计师试题及答案(回忆版)

目录 基础知识选择题案例题1.缺陷识别的数据流图2.球队、球员、比赛记录的数据库题3.用户、老师、学生、课程用例图4.算法题5.程序设计题 基础知识选择题 树的节点&#xff0c;度为4的有4个&#xff0c;度为3的有8个&#xff0c;度为2个有6个&#xff0c;度为1的有10个&#x…

spring boot整合j2cache 配置项目全局键标识 帮助定位是哪个项目产生的缓存

我们利用 j2cache 存进 redis的缓存 key 可以加个全局标识 这样 到时看缓存 方便别人看是哪个项目存进去的 例如 这里 我们存入的 book 我们 keys * 查看 就知道是个book 但不知道具体来自那套系统 我们在 j2cache.properties 中加上 redis.namespace 项目全局键标识 我们…

【方法】ZIP压缩文件的密码如何设置和取消?

ZIP是一种常见的压缩文件格式&#xff0c;今天来分享一下&#xff0c;ZIP压缩文件如何设置密码保护&#xff0c;以及如何取消密码&#xff0c;不清楚的小伙伴一起来看看吧&#xff01; 设置ZIP文件密码&#xff1a; 想要给ZIP压缩包设置密码&#xff0c;需要用到支持ZIP格式的…

移动云主机ECS搭建Kubernetes集群:详细步骤与指南

目录 云主机 ECS&#xff1a;云计算的强大引擎什么是云主机ECS&#xff1f;为何选择云主机ECS&#xff1f; 使用移动云ECS进行Kubernetes集群搭建1. 环境准备2. 安装步骤2.1 在每一个节点上执行的操作2.1.1 系统准备2.1.2 安装Docker2.1.3 安装Kubernetes的安装组件 2.2 在Mast…

一篇文章讲透排序算法之堆排序

1.前言 在学习这篇文章之前&#xff0c;请大家先学习堆这一数据结构中堆的概念&#xff0c;向下调整算法&#xff0c;向下调整建堆。 有关堆的实现方式请参考&#xff1a;堆的实现 堆排序就是利用堆里面学习过的知识点进行排序&#xff0c;如何进行排序呢&#xff1f; 2.堆…

linux centos nginx配置浏览器访问后端(tomcat日志)

1、配置nginx访问tomcat日志路径 vim /usr/local/nginx/conf/nginx,conflocation ^~ /logs {autoindex on;autoindex_exact_size on;autoindex_localtime on;alias /home/tomcat/apache-tomcat-9.0.89-1/logs;}###配置讲解### 1、location ^~ /logs { … }: location&#xf…

抖音IP地址频繁变动:背后的原因与解读

在抖音这个短视频平台的日常使用中&#xff0c;不少用户可能注意到了自己的IP地址有时会频繁变动。这种现象不仅引起了用户的好奇&#xff0c;也引发了关于个人隐私、账号安全以及平台政策的一系列讨论。那么&#xff0c;抖音IP地址换来换去什么意思&#xff1f;这背后又隐藏着…

最新ETF市场全景画像

根据天软指数基金因子库&#xff0c;分析宽基、行业和主题ETF表现&#xff0c;目前已全部上线公众号&#xff0c;更多内容可关注天软公众号&#xff01;

2024年上半年系统架构设计师——案例第二题——UML相关

这个只记到一个大概了 主题干&#xff0c;说明人员访客系统 题目1 9分 问序列图信息类型和特点 题目2 序列图填空 好像是10分吧 访客系统的序列图 题目3 6分 说明软件分析和设计时的和UML图有关原则&#xff1f;

RocketMq源码解析四:生产者Producer启动

一、主要接口和类 生产者服务核心接口和类的关系如下图所示&#xff1a; MQProducer是生产者解耦&#xff0c;这里找几个有代表性的方法 // 同步发送消息 SendResult send(final Message msg) throws MQClientException, RemotingException, MQBrokerException,InterruptedExce…

如何使用Cloudways搭建WordPress网站

如今&#xff0c;搭建网站已经变得非常简单&#xff0c;这主要得益于开源的CMS建站系统的兴起。即使是不懂编程的人也能轻松搭建自己的网站&#xff0c;这些CMS系统提供了丰富的主题模板和插件&#xff0c;使用户可以通过简单的拖放和配置操作来建立自己的网站。 WordPress是目…

mysql中单表查询的成本

大家好。我们知道MySQL在执行一个查询时&#xff0c;经常会有多个执行方案&#xff0c;然后从中选取成本最低或者说代价最低的方案去真正的执行查询。今天我们来聊一聊单表查询的成本。 那么到底什么是成本呢&#xff1f;这里我们说的成本或者代价是由两方面组成的&#xff1a…

全新交友盲盒+付费进群二合一源码 包含全套源码+教程

盲盒交友脱单系统源码&#xff0c;带教程&#xff0c;免授权这套源码已经替你们搭建测试过了 附带进群系统&#xff0c;定位是正常的 申明需要无限回调&#xff0c;没有回调的搭建出来不能用不要说源码不能用 全新系统方便大家使用&#xff0c;已经录制好详细的教程&#xf…

解决问题的多样手段:不止律师

在我们日常生活和工作中&#xff0c;总是会遇到各种各样的问题。有时我们会不由自主地想到找律师打官司&#xff0c;认为这是解决问题的唯一途径。然而&#xff0c;解决问题其实有很多手段&#xff0c;律师和法庭只是其中的一种。事实上&#xff0c;只要能够发现问题并及时解决…

大模型应用:LLM基本原理及应用场景

1.背景 23年以来&#xff0c;随着OpenAI公司的ChatGPT横空出世&#xff0c;大模型一词开始火爆全球。国内外以OpenAI、Google、百度、阿里、字节等大厂为代表&#xff0c;相继推出一系列大模型及其应用&#xff0c;涉及社交、问答、代码助手等多个方面。 目前主流的大模型及产…

从零构建vue3+ts+vite项目打包及项目依赖配置

❗️❗️❗️❗️ 写在最前: 本文是根据B站作者 月光分层 视频vuets 工程化配置以及作者笔记稍作整理 &#x1f496;&#x1f496;作者B站地址https://space.bilibili.com/14110850 &#x1f496;&#x1f496;视频教程地址vuets 工程化配置 &#x1f496;&#x1f496;作者微信…

自反馈 Transformer:一种针对真实世界胰腺神经内分泌肿瘤数据的多标签诊断模型

文章目录 Self-feedback Transformer: A Multi-label Diagnostic Model for Real-World Pancreatic Neuroendocrine Neoplasms Data摘要方法实验结果 Self-feedback Transformer: A Multi-label Diagnostic Model for Real-World Pancreatic Neuroendocrine Neoplasms Data 摘…

最早做“转化医学”的国货护肤品牌,发力了!

文章来自化妆品行业媒体青眼 作者小朱 放眼全球护肤市场&#xff0c;皮肤科学的力量正在前所未有地凸显&#xff0c;多个国际美妆巨头专门设立了皮肤科学部门&#xff0c;国内皮肤科医生参与护肤品牌创建也成为一股风潮。 据青眼不完全统计&#xff0c;近年来&#xff0c;至少…

使用阿里云服务器部署(完整步骤)

部署项目前需要环境&#xff1a;阿里云云服务器ECS&#xff0c;宝塔面板 阿里云云服务器ECS实例创建过程 先登录阿里云网站注册账号,进入控制台左侧导航栏中云服务器ECS页面根据自己的需求去创建一个新的实例&#xff08;需要付费&#xff09;如果是学生的话&#xff0c;完成…

粤嵌—2024/5/13—删除排序链表中的重复元素(✔)

代码实现&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* deleteDuplicates(struct ListNode *head) {if (head NULL || head->next NULL) {return head;}struct ListNode *…