DBMS-2.2 数据库设计(2)——数据库规范化设计理论

news2024/9/17 7:19:15

本文章的素材与知识来自李国良老师和冠宇老师。

  • 依赖理论

对于关系数据库中的依赖,分为函数依赖、多值依赖和连接依赖。

一.函数依赖

1.函数依赖

(1)定义:

(2)理解:

  • 通俗地讲,对于关系R中的两个属性或属性组X和Y,如果X的值能决定Y的值,则X->Y。
  • 其中X和Y可能由一个属性构成,也可能由多个属性构成。
  • 函数依赖X->Y要求当X的值相同时,Y的值一定相同;但不要求X的值不同时的情况,即允许当X的值不同时,Y的值仍可能相同。
  • 一个函数依赖X->Y要成立,不仅要求当前关系R中的已有数据均满足函数依赖条件,还要求关系R的所有可能取值都要满足函数依赖条件。即当前已有的数据要满足X->Y,未来可能添加的数据也必须满足X->Y。

(3)意义:函数依赖反映了一个关系中属性或属性组之间相互依存、相互制约的关系,同时具有对现实世界的反映。例如:国家—>首都。

(4)分类:函数依赖还可以进一步细分为 平凡函数依赖和非平凡函数依赖、部分函数依赖和完全函数依赖、传递函数依赖。这三种分类不冲突,一个函数依赖可以同时是平凡(或非平凡)、部分(或完全)、传递的。

2.平凡和非平凡函数依赖

(1)定义:

(2)理解:

  • 平凡函数依赖是无意义的,因为关系的所有属性或属性集X均满足X->X,即均满足平凡函数依赖。
  • 因此平常所指的函数依赖默认都是非平凡函数依赖。例如说X->Y,那么我们不考虑Y是X的子集的情况。
3.部分和完全函数依赖

(1)定义:

(2)理解:

  • 通俗地讲,对于函数依赖X->Y,只要X少了一个属性就无法决定Y,则称Y完全函数依赖于X;如果X少了一个或多个属性后仍能决定Y,则称Y部分函数依赖于X。

(3)平凡非平凡 + 部分完全:

上述提到一个函数依赖的平凡非平凡与部分完全是不冲突的,因此下面来对这两个属性作排列组合,探讨其可行性。

  • 平凡+部分:可行。X->X
  • 平凡+完全:可行。(X,Y)->(X,Y)
  • 非平凡+部分:可行。(X,Y)->Z 且 X->Z
  • 非平凡+完全:可行。(X,Y)->Z
4.传递函数依赖

(1)定义:

(2)理解:

  • 为什么当Y->X时,就有X->Z?若Y->X,又因为Y->Z,则有Y是该关系的候选键;又因为X->Y,所以X也是该关系的候选键,因此有X->Z。
  • 传递函数依赖的定义中,仅限制了Y!->X,但是未限制Z->Y。
5.从函数依赖的角度理解关系的键

(1)

(2)通俗地讲,对于关系R的属性集U,X是U中的一个属性,如果U中所有属性都完全函数依赖于X,则X可以作为该关系R的一个候选键。

(3)所有在候选键中的属性都为主属性,不在任一候选键中的属性为非主属性。

(4)对于一个候选键内部的所有主属性之间,不存在任何函数依赖,包括部分完全、传递非传递。

(5)对于同一个关系模式的不同候选键,它们的属性个数是可能不同的!例如:对于关系模式R<U,F>,U={ A,B,C },F={ A->B,A->C,(B,C)->A },那么根据上述候选键的性质,该关系模式R的候选键有:(A)和(B,C)。

二.多值依赖

1.多值依赖

(1)定义:

(2)理解: 

  • 通俗地讲,多值依赖X->->Y,就是给一个X,能决定一组Y的值,且这组Y的值只与X有关。

(3)示例

该关系中,给一个Sno可以决定一组Phone,因为一个学生可以有多个手机号;且Phone的值只取决于Sno,与Email无关;因此构成多值依赖Sno->->Phone。

同样地,给一个Sno可以决定一组Email,因为一个学生可以有多个邮箱;且Email的值只取决于Sno,与Phone无关;因此构成多值依赖Sno->->Email。

(4)函数依赖与多值依赖的关系

  • 函数依赖是对于属性或属性集X和Y,给一个X可以决定一个Y。
  • 多值依赖是对于属性或属性集X和Y,给一个X可以决定一组Y。
  • 函数依赖是一种特殊的多值依赖,当X->->Y,且这组Y里面实际只有一个值的时候,则多值依赖X->->Y就成为了函数依赖X->Y。因此函数依赖又称为单值依赖。
2.平凡和非平凡多值依赖

(1)定义:

(2)理解:

  • 平凡和非平凡多值依赖,就是看除了X、Y以外,关系R中是否还有其他属性或属性集:若只有X、Y,则是平凡多值依赖;若除X、Y以外还有其他属性或属性集,则是非平凡多值依赖。

三.连接依赖

1.连接依赖

(1)定义:

(2)多值依赖与连接依赖的关系

  • 多值依赖是一种特殊的连接依赖,因为多值依赖可以分解成两个子关系的连接,而连接以来则可以是多个(包含两个)子关系的连接。

(3)示例

该关系中存在多值依赖Sno->->Phone,Sno->->Emial,Sno->->Bank;则该关系构成连接依赖,可以分解成三个子关系(Sno,Phone),(Sno,Email),(Sno,Bank)。

四.区别与联系

1.函数依赖是一种特殊的多值依赖,多值依赖是一种特殊的连接依赖。

2.函数依赖和多值依赖是指属性间的依赖,用于描述同一关系下的不同属性间的关系。而连接依赖是用来描述整个关系的。

  • 规范化设计和范式

一.规范化设计

1.定义:

2.理解:

(1)规范化设计是指在数据库中减少数据冗余和定义一个规范的表空间结构,以更好地实现数据完整和一致性。

(2)评判一个数据库规范化设计的好坏:数据冗余 + 增删改异常。

  • 数据冗余:数据冗余是指一组数据不必要地重复出现在多个表中。数据冗余会导致占用更多的存储空间和提高数据库维护的成本等问题。
  • 增删改异常:由数据冗余等原因导致的,当修改单条记录时,会引起与该条记录关联的其他数据异常。

二.范式和规范化

1.范式(normal form)

(1)定义:

(2)分类:

高一级范式是建立在低一级范式的基础上的:如满足3NF则一定满足2NF,满足2NF则一定满足1NF。但如果不满足1NF,则一定不满足2NF,不满足2NF则一定不满足3NF。

2.规范化(normalization)

(1)定义:一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫做规范化。

(2)范式规范化过程

三.第一范式(1NF)

1.定义

2.理解

(1)第一范式就是不能表中有表,即表的每一个单元格无法再细分。

(2)在关系数据库中,满足最低要求的范式是第一范式,不满足第一范式的不是关系数据库。

3.示例

对于这个Student表,其Contact属性明显可以再细分为Phone属性和Email属性,因此其不满足1NF。对其进行拆分使其满足1NF:

4.问题

对于上述满足1NF的SLC表,我们从数据冗余和增删改异常两方面来说明其问题:

(1)数据冗余:如果一个学生选了多门课,则对于相同的(Sno,Sdept,Sloc),由于Cno不同而会被存储多次,造成数据冗余。

(2)增删改异常:假设学校新来一批学生需要插入,此时还未选课,由于Cno是主键的一部分,因此无法插入。

其根本原因是非主属性Sloc和Sdept对候选键(Sno,Cno)存在部分函数依赖。

四.第二范式(2NF)

1.定义
2.理解

(1)第二范式就是在满足第一范式的基础上,不存在非主属性对候选键的部分函数依赖。

3.示例

我们通过将上述只满足1NF的SLC表拆分成满足2NF的SL表和SC表,解决了非主属性Sdept和Sloc对候选键(Sno,Cno)的部分函数依赖问题。

4.问题

对于上述满足2NF的SL表,我们从数据冗余和增删改异常两方面来说明其问题:

(1)数据冗余:由于Sdept->Sloc,因此对于一个系的所有学生,相同的Sloc会因为Sno不同而被存储多次。

(2)增删改异常:如果一个系的所有学生都毕业了,则删除该系所有Sno对应的数据后,会丢失Sdept与Sloc的对应关系。

其根本原因是非主属性Sloc对候选键Sno存在传递函数依赖。

五.第三范式(3NF)

1.定义
2.理解

(1)第三范式就是在第二范式的基础上,不存在非主属性对候选键的传递函数依赖。

(2)3NF的定义是在满足1NF的基础上而不是在满足2NF的基础上,即为什么不存在传递函数依赖则一定不存在部分函数依赖?

  • 使用反证法举例:
  • 假设对于关系R的属性U(X,Y,Z),其候选键为(X,Y),有X->Z,(X,Y)->Z,因此存在Z对候选键的部分函数依赖。
  • 又因为(X,Y)->X,X->Z,X!->(X,Y),因此存在Z对候选键的传递函数依赖。
  • 即只要存在部分函数依赖,则一定存在传递函数依赖。因此只要不满足2NF则一定不满足3NF。
  • 反之,只要不存在传递函数依赖,则一定不存在部分函数依赖。因此满足3NF则一定满足2NF。
3.示例

我们通过将上述只满足2NF的SL表拆分成满足3NF的SD表和DL表,解决了非主属Sloc对候选键Sno的传递函数依赖问题。

4.问题

对于上述满足3NF的SCT表,我们从数据冗余和增删改异常两方面来说明其问题:

(1)数据冗余:Tno->Cno,对于同一老师,会因为Sno不同而导致Cno和Tno被存储多次。

(2)增删改异常:如果选修课程的学生都结课了,则删除该课程所有Sno对应的数据后,会丢失Cno与Tno的对应关系。

其根本原因是主属性Cno对候选键(Sno,Tno)存在传递函数依赖。

六.巴斯科德范式(BCNF)

1.定义

2.理解

(1)巴斯科德范式就是在满足第三范式的基础上,不存在主属性对候选键的传递函数依赖(和部分函数依赖)。

(2)即在满足BCNF的关系模式中,不存在任何属性的部分函数依赖和传递函数依赖,只有完全函数依赖。 

(3)如果关系模式R满足3NF,且只有一个候选键,那么R必定满足BCNF。因为该候选键内部如果存在属性集Y对X存在部分函数依赖或传递函数依赖,则Y就不应该存在于该候选键内部。可以看上文“从函数依赖的角度理解关系的键”。

(4)如果一个关系模式R满足BCNF,则说明在函数依赖的范畴内,它已经实现了关系模式的彻底分解,达到了最高的规范化程度,消除了增删改异常。

(5)BCNF是针对主属性较多的情况。

3.BCNF的特性

(1)所有非主属性都完全函数依赖于每个候选键。若存在部分函数依赖,则不满足2NF。

(2)所有主属性都完全函数依赖于每个不包含它的候选键。若存在部分函数依赖或是依赖于包含自身的候选键(即存在传递函数依赖),则不满足BCNF。

(3)没有任何属性完全函数依赖于非候选键的任何一组属性。若存在依赖于非候选键(即存在传递函数依赖),不满足3NF。

3.示例

七.第四范式(4NF)

1.定义
2.理解

(1)4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。

(2)4NF所允许的非平凡多值依赖,实际上是函数依赖。

3.示例

八.第五范式(5NF)

1.定义

第五范式就是在第四范式的基础上,消除了连接依赖。

九.总结

1.

2.

(1)1NF、2NF、3NF、BCNF属于函数依赖的范畴。其中BCNF是函数依赖范畴内,关系模式范式的天花板。。

(2)4NF属于多值依赖的范畴,5NF属于连接依赖的范畴,在实际中应用较少。

十.范式分析步骤

1.找出所有的主属性并标注,将主属性和非主属性区分开;

2.按“候选键、主属性、非主属性”这个顺序依次分析,把所有函数依赖都列出来;

3.根据所列出的函数依赖,确定关系的范式。

  • 数据依赖的公理系统

一.Armstrong公理系统

1.逻辑蕴涵

(1)定义

(2)理解

  • 通俗地讲,逻辑蕴涵的意思就是“成立”。如定义中所说,如果F逻辑蕴涵X->Y,意思就是X->Y这个函数依赖在关系R中成立。
  • 使用逻辑蕴涵这个词的对象是:(关系的一组函数依赖)逻辑蕴涵(一个函数依赖)。

(3)问题

2.Armstrong公理系统

(1)定义

(2)理解

  • 通俗地讲,Armstrong公理系统就是用来根据已有的函数依赖推理出隐含的函数依赖的工具。
  • 而无论是F中已有的函数依赖,还是根据Armstrong公理系统推出的函数依赖,都被F所逻辑蕴含。

(3)证明:对于关系模式R<U,F>的任一关系r,(X,Y,Z,W)是U上的属性集,t、x是r的任意两元组。

  • 自反律证明:

若 t[X] = s[X],由于 Y⊆ X,所以 t[Y] = s[Y],即 X->Y成立。

  • 增广律证明:

假设 t[XZ] = s[XZ],则有 t[X] = s[X],t[Z] = s[Z]

因为X->Y ,所以当 t[X] = s[X] 时,有 t[Y] = s[Y]

由t[Y] = s[Y],t[Z] = s[Z] 可得 t[YZ] = s[YZ]

即当 t[XZ] = s[XZ]时,有 t[YZ] = s[YZ],所以XZ->YZ成立。

  • 传递律证明:

因为X->Y,所以当 t[X] = s[X] 时,有 t[Y] = s[Y]

因为Y->Z,所以当 t[Y] = s[Y] 时,有 t[Z] = s[Z]

因此当 t[X] = s[X] 时,有 t[Z] = s[Z],所以X->Z成立。

  • 合并规则证明:

因为 X->Y,由增广律可得,有XX -> XY,即 X->XY

因为 X->Z,由增广律可得,有XY -> YZ

即有 X->XY,XY->YZ,由传递律可得,有 X -> YZ。

  • 分解规则证明:

因为 Z⊆ Y,由自反律可得,有 Y -> Z

因为X -> Y,Y -> Z,由传递律可得,有 X -> Z。

  • 伪传递规则证明:

因为 X -> Y,由增广律可得,有 XW -> WY

因为 WY -> Z,又因为 XW -> WY,由传递律可得,有 XW -> Z。

(4)引理

通俗地讲就是,当 X->YZW 时,有X->Y,X->Z,X->W;反之亦然。

(5)示例

二.闭包及其计算

1.函数依赖集的闭包

(1)定义

(2)理解

  • 通俗地讲,闭包就是写了的+没写的。“写了的”是指F直接给出的函数依赖,“没写的”是指根据已有的函数依赖 + Armstrong公理系统所能推出的所有隐含的函数依赖。
2.属性依赖集的闭包

(1)定义

(2)理解

  • 函数依赖集的闭包是从关系模式R的函数依赖集F出发,根据Armstrong公理系统,推导出所有能被F逻辑蕴涵的函数依赖。
  • 属性依赖集的闭包是从关系模式R的一个属性或属性集X出发,根据Armstrong公理系统,所能被X推出的所有属性。
  • 函数依赖集的闭包,其内容是函数依赖。例如F={X->Y,X->Z,Y->Z},则F+={X->Y,X->Z,Y->Z,X->Z}。
  • 属性依赖集的闭包,其内容是属性。例如F={X->Y,X->Z,Y->Z},则XF+={X,Y,Z}。
  • 求属性依赖集的闭包记得把自身也包含进去。
3.闭包的引理

通俗地讲,就是X->Y要想在关系模式R中成立,其充要条件是:Y在X的属性依赖集闭包中。约等于废话。

4.闭包的计算步骤

(1)

(2)理解

  • 整个求闭包的过程就是循环将一个集合不断扩张的过程。
  • 步骤(1)表明:要求X的闭包XF+,那么我们先假设一开始X的闭包只有X自己,即XF+={X};
  • 步骤(2)(3)表明:分析F中已有的函数依赖,对于那些函数依赖于XF+中的任意属性和属性集的属性,把它们加入到XF+中;
  • 步骤(4)表明:判断加入前的XF+和加入后的XF+是否相等,如果不相等,说明对于XF+还存在继续扩张的可能,则继续下一轮扩展循环;
  • 步骤(5)表明:对于XF+无法再继续扩展存在两种可能:第一种无法再推出多余的属性,表现为加入前的XF+和加入后的XF+相等,即无论循环多少次XF+都不再变化;第二种是已经推出了U中的所有元素,表现为XF+=U。对于这两种情况,则退出循环,此时的XF+就是最终的X的属性依赖集闭包。
  • 整个闭包计算过程,都是以F中直接给出的函数依赖作为驱动,推导过程无需再额外依据Armstrong公理系统推导出隐含的函数依赖作为驱动。因为步骤(2)(3)构成的循环其实就是在使用Armstrong公理系统推出隐含函数依赖。

(3)示例

5.基于闭包的计算,求解关系的候选键

(1)关系中的四类属性

(2)求解关系候选键的思路

(3)求解关系候选键的步骤

  • 整个求候选键的过程与求闭包的过程类似,都是循环将一个集合不断扩张的过程。令R的候选键Key = { }。
  • 步骤(1):因为L类和N类属性一定在候选键中,因此L类和N类属性共同构成初始的Key,Key = { L类属性,N类属性 }。
  • 步骤(2):求解属性依赖集Key的闭包KeyF+,如果KeyF+ = U,说明Key就是R的唯一候选键,因为Key中已有的属性已经能推出关系R的全部属性,后续即使再往Key中加属性,Key也只会变成超键而不是候选键。
  • 步骤(3):如果KeyF+ != U,说明最终的候选键中存在 LR类 属性,那么我们就逐个遍历LR类属性,选取LR类属性集中的一个LR类属性与Key构成新的Key,即 Key = { L类属性,N类属性,任意一个LR类属性 },此时重复步骤(2),求解新的KeyF+。

那么整个遍历过程就变成了:

Key = { L类属性,N类属性,一号LR类属性 },求KeyF+;

Key = { L类属性,N类属性,二号LR类属性 },求KeyF+;

......

Key = { L类属性,N类属性,N号LR类属性 },求KeyF+。

遍历完成后,可能会得到多个形式为{ L类属性,N类属性,一个LR类属性 }的候选键。

  • 步骤(4):步骤(3)是循环选取一个LR类属性,那么步骤(4)就是循环选取N个(N>=2)个LR类属性,即Key = { L类属性,N类属性,任意N个LR类属性 },求KeyF+。遍历完成后,可能会得到多个形式为{ L类属性,N类属性,N个LR类属性 }的候选键。
  • 需注意的是,对于一个关系的不同候选键,它们的属性个数是可能不同的。因此进行完步骤(3)后,步骤(4)也需要进行判断。

(4)示例

三.函数依赖集的等价

1.定义

2.引理

3.示例

(1)要判断F和G是否等价,即转化成判断F+是否等于G+

(2)根据引理,可以再转化成判断是否 F含于G+且G含于F+

(3)以判断F是否含于G+为例,即要判断是否F中的每个函数依赖,都在G+中

(4)F中的两个函数依赖为U1->U2,U2->U3,即转化成求U1G+和U2G+,也就是U1在G中的闭包是否包含U2,以及U2在G中的闭包是否包含U3

(5)简言之,判断是否F含于G+,就是求F中每个函数依赖的左部属性在G中的属性集闭包,并判断属性集闭包中是否包含原函数依赖的右部属性。例如对于F中的一个函数依赖X->Y,需要求X在G中的属性集闭包,并判断该闭包中是否包含属性Y。如果F中所有函数依赖都满足上述要求,则可以说F含于G+。

四.最小函数依赖集

1.定义

(1)第一点就是:要把右侧的组合属性都拆开。根据Armstrong公里的引理可知,可以将X->YZ拆成X->Y、X->Z,最小函数依赖集就是将所有右侧属性都拆成这种形式。

(2)第二点就是:去除冗余的函数依赖。对于函数依赖集F,如果去除函数依赖X->Y前后,F的闭包F+都不发生变化,则将该函数依赖X->Y去除。

(3)第三点就是:把左侧属性最小化。对于函数依赖X->Y,如果有X的子集Z,使Z->Y能够完全取代X->Y在F中的地位,那么就把X->Y缩小成成Z->Y。

2.求最小函数依赖集的步骤

整个求最小函数依赖集的过程,可以分 “右-左-中” 三个过程进行

(1)右:将右侧所有多个属性都拆成单个。例如:X->ABC,则拆成X->A、X->B、X->C。

(2)左:假设函数依赖为X->Y,那么对左侧属性X处理的重点在于,X的子集X1是否能够推出X,而不是X1是否满足X1->Y。这是一个非常需要注意区分的点。如果X1能够推出X,那么根据已有X->Y,肯定就能满足X1->Y。

  • 一定要注意X1要想取代X,条件是:X1能够推出X,即X1与X是等价的;而不是仅仅满足X1->Y成立。
  • 例如F={ BD->E,B->D },对于BD的子集B,(BD)F+ = {B,D,E} = (B)F+,因此Fm = { B->E,B->D }。注意用B取代BD后为B->E,但也不要漏写了B->D。

(3)中:去除冗余项。依次遍历F中的每个函数依赖,如果去掉该函数依赖前后,F是等价的,则去掉该函数依赖,再继续遍历后续的函数依赖。

  • 例如对F={ A->B,B->C,C->D }执行第三步去除冗余项:
  • 那么最先遍历到的是A->B,即要判断 F={ A->B,B->C,C->D } 与 F1={ B->C,C->D }是否等价;如果是等价的,则令F=F1。
  • 然后遍历到的是B->C,根据前面遍历的不同,此时的F可能为{ A->B,B->C,C->D }或{ B->C,C->D },那么在这一步对应的去除了B->C的F2就可能为{ A->B,C->D }或{ C->D }。
  • 后续遍历C->D也同理。重点是,判断否去除当前函数依赖时的F,是建立在已经判断完是否去除前一个函数依赖的基础上的。

(4)理解:

  • 那么对于F={ AB->C,A->C },很明显Fm={ A->C },而去掉AB->C这一步是在最后的“中”进行的,而不是在“左”进行的,因为A是无法取代AB的。 
  • 由上述分析步骤也可以看出,对于一个函数依赖集F,其最小函数依赖集并不是唯一的,取决于遍历每一个函数依赖的先后顺序。
3.示例

4.最小函数依赖集的意义

(1)最小函数依赖集的作用是简化范式的分析步骤:

(2)一般我们拿到一个关系模式R<U,F>,要分析其范式,需要先求取F的最小函数依赖集Fm;

(3)再在Fm的基础上,执行上述提到的范式分析步骤;

(4)用Fm而不用F去分析,是为了消除干扰项。

  • 总结

这一章涉及到的算法定义较多,以下做个汇总:

1.范式分析步骤:区分标注主属性——依次所有列出函数依赖——分析范式

2.Armstrong公理系统:6推理 + 1引理

3.闭包的计算步骤:循环扩张

4.求解关系的候选键:基于闭包的计算

5.判断两个函数依赖集是否等价:基于 引理 + 闭包的计算

6.求最小函数依赖集:右左中

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

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

相关文章

【Linux】借命令行参数的引导,探索环境变量的奥秘

目录 1.命令行参数 1.1.概念&#xff1a; 1.2.利用命令行参数打造计算器&#xff1a; 2.环境变量 2.1.环境变量是什么&#xff1f; 2.2.有什么方法可以不用带路径&#xff0c;直接就可以运行自己的程序呢&#xff1f; 法一&#xff1a; 法二&#xff1a; 2.3.通过代码…

PostgreSQL技术内幕9:PostgreSQL事务原理解析

文章目录 0.简介1.PG事务整体介绍1.1 事务类型介绍 1.2 事务模块介绍2. 代码分析 0.简介 有了上一篇数据库事务并发控制协议的介绍&#xff0c;对于数据库事务和并发控制有了基本的认识&#xff0c;本文将介绍PG事务模块&#xff0c;主要介绍PG支持的事务类型&#xff08;普通…

git为不同的项目设置不同的提交作者

方法1&#xff1a;找到项目的.git文件夹打开 打开config在下面添加自己作者信息 [user]name 作者名email 邮箱方法2&#xff1a;直接在.git文件夹设置作者名&#xff08;不使用–global参数&#xff09; git config user.name "xxxxx"如果想要修改之前提交的…

银行结算业务

1.1 银行本票 银行本票是由银行签发的,承诺自己在见票时无条件支付票款给收款人或持票人的业务。银行本票按票面划分为定额本票和不定额本票,按币种划分为人民币银行本票和外币银行本票。人民币银行本票仅在同一交换区域内使用,资金清算利用当地人民银行组织的资金清算形式…

vllm源码解析(五):LLM模型推理

八 模型推理细节探索 8.1 回顾下step的流程 def step(self) -> List[Union[RequestOutput, EmbeddingRequestOutput]]:# 多GPU并行推理时走AsyncLLMEngine分支。如果进入当前LLMEngine,性能会下降&#xff0c;这里会抛出异常。if self.parallel_config.pipeline_parallel_s…

基于机器学习的电商优惠券核销预测

1. 项目简介 随着移动互联网的快速发展&#xff0c;O2O&#xff08;Online to Offline&#xff09;模式已成为电商领域的一大亮点。优惠券作为一种有效的营销工具&#xff0c;被广泛应用于吸引新客户和激活老用户。然而&#xff0c;传统的随机投放方式往往效率低下&#xff0c;…

JavaWeb【day11】--(SpringBootWeb案例)

SpringBootWeb案例 前面我们已经实现了员工信息的条件分页查询以及删除操作。 关于员工管理的功能&#xff0c;还有两个需要实现&#xff1a; 新增员工 修改员工 首先我们先完成"新增员工"的功能开发&#xff0c;再完成"修改员工"的功能开发。而在&quo…

万能视频下载器-下载所有网站上的任何视频

万能视频下载器-下载所有网站上的任何视频 在Edge浏览器中发现了一款令人惊叹的视频下载扩展插件&#xff0c;简直就是视觉盛宴的利器&#xff01;只需轻点几下&#xff0c;在拓展商店中轻松查找并安装&#xff0c;你便能随时随地随心所欲地把心仪的视频收入囊中。无论是教学资…

matlab仿真 OFDM系统仿真

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第九章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; clear all N8;%子载波数 f1:N;%各个子载波频率 xrandi([0 3],1,N);%子载波上的数据 x1qammod(x,4);%4-QAM调制 t0:0.001:1-0.…

学习周报-2024.9.3

目录 摘要 Abstract 文献阅读&#xff1a;一种改善河流水质预测的耦合模型以解决非平稳性和数据限制 一、现有问题 二、提出方法 三、相关知识 1、基于小波分析的LSTM&#xff08;WA-LSTM&#xff09; 2、迁移学习TL改进WA-LSTM 四、WA-LSTM-TL模型 五、研究实验 1、…

手写NACOS的服务的注册与发现|心跳机制|轮询调用服务功能

背景 手写NACOS的服务的部分核心功能&#xff0c;提高自身的编码能力 本篇文章设计的是单体NACOS后端服务&#xff0c;提供SDK给多个NACOS客户端使用 本文编写了注册与发现|心跳机制|轮询调用服务功能&#xff0c;可当做入门级阅读 nacos-service 项目结构 代码内容 pom配置…

Detect It Easy

Detect It Easy&#xff08;简称 DIE&#xff09;项目的网址为 https://github.com/horsicq/Detect-It-Easy 下载完安装包后&#xff0c;直接双击die.exe即可进入到操作界面 工具介绍&#xff1a; 它可以用来检测程序架构和文件类型。如图所示。其中&#xff0c;「模式」说明程…

UE5 贝塞尔曲线导弹

首先创建导弹Actor蓝图 代码逻辑&#xff0c;这其中创建的所有变量都不用添加值&#xff0c;这些逻辑要画图来解释&#xff0c;比较麻烦&#xff0c;大家自行理解一下 接下来进入人物蓝图编写代码逻辑&#xff0c;我这里是在两个不同的位置发射两枚导弹 宏中的代码&#xff0c;…

时序预测|基于粒子群优化支持向量机的时间序列预测Matlab程序PSO-SVM 单变量和多变量 含基础模型

时序预测|基于粒子群优化支持向量机的时间序列预测Matlab程序PSO-SVM 单变量和多变量 含基础模型 文章目录 一、基本原理1. 问题定义2. 数据准备3. SVM 模型构建4. 粒子群优化&#xff08;PSO&#xff09;5. 优化与模型训练6. 模型评估与预测7. 流程总结8. MATLAB 实现概述 二、…

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点&#xff1a; 鼠标左键双击&#xff0c;设定红色的起点。左键双击设定起点&#xff0c;用红色标记。 设定终点&#xff1a; 鼠标右键双击&#xf…

轻松上手,高效产出:音频剪辑工具年度精选

不知道你有没有拍vlog记录生活的习惯&#xff0c;有时候视频里穿插进自己的声音能让视频更加丰富贴上自己的标签。这次我们一起探讨当下有哪些好用的在线音频剪辑工具。 1.FOXIT音频剪辑 链接直达>>https://www.foxitsoftware.cn/audio-clip/ 这个工具是一款专业的音…

GNU的伪操作 (25)

这里主要是 对 GNU的 各个伪操作进行 详细的解释。 先来看着几个 伪操作。 .byte, .short, .long, .quad , .float , 这个是关于 字节的。 .string .ascii 是关于字符串的。 这个字符串编译器是可以自动在末尾补0 的。 举例&#xff1a; val: .word 0x11223344 mov r…

计算机组成原理(SRAM电路图示)

1.该电路由6个MOS管&#xff08;T1-T6&#xff09;组成 2.T1-T4是一个由MOS管组成的触发器基本电路&#xff1b; T5&#xff0c;T6像开关&#xff0c;受行地址选择信号控制&#xff1b; T7,T8受列地址选择控制&#xff0c;分别与位线A&#xff0c;和相连 3.假设触发器…

FinOps原则:云计算成本管理的关键

导语&#xff1a; FinOps 原则为我们提供了北极星&#xff08;North Star&#xff09;&#xff0c;在我们实践云财务管理时指导我们的活动。这些原则由 FinOps 基金会成员制定&#xff0c;并通过经验磨练出来。 北极星&#xff08;North Star&#xff09;的含义&#xff1a; …

不用管理员权限直接修改windows中hosts值的方法

本文只适用于少数经常修改hosts文件的程序员帅哥和美女们。 背景&#xff1a;直接修改hosts文件的不足 修改C:\Windows\System32\drivers\etc\hosts时&#xff0c;必须要管理员权限。 经常修改&#xff0c;会觉得有一丝丝麻烦。 方法1 &#xff08;安全性低&#xff0c;不…