先决条件——功能依赖、数据库规范化、范式
如果两个或多个独立关系保持在单个关系中,或者当表中存在一个或多个行意味着同一表中存在一个或多个其他行时,我们可以说发生多值依赖。换言之,表中的两个属性(或列)彼此独立,但都依赖于第三个属性。多值依赖项总是需要至少三个属性,因为它至少由两个依赖于第三个属性的属性组成。
对于依赖 A -> B,如果对于 A 的单个值,存在多个 B 值,那么该表可能具有多值依赖。该表应该至少有 3 个属性,并且 B 和 C 应该独立于 A ->> B 多值依赖关系。例如,
Person | Mobile | Food_Likes |
---|---|---|
Mahesh | 9893/9424 | Burger / pizza |
Ramesh | 9191 | Pizza |
Person->-> mobile,
Person ->-> food_likes
这被解读为“人多决定移动”和“人多决定食物喜欢”。
请注意,函数依赖是多值依赖的一种特殊情况。在函数依赖 X -> Y 中,每个 x 恰好确定一个 y,永远不会超过 1。
第四范式(4NF):
第四范式 (4NF) 是一种数据库规范化级别,其中除了候选键之外没有重要的多值依赖项。它建立在前三个范式(1NF、2NF 和 3NF)和 Boyce-Codd 范式 (BCNF) 之上。它指出,除了满足 BCNF 要求的数据库外,它不得包含一个以上的多值依赖项。
属性——当且仅当满足以下条件时,关系 R 才符合 4NF:
- 它应该是 Boyce-Codd 范式 (BCNF)。
- 该表不应该有任何多值依赖。
具有多值依赖关系的表违反了第四范式 (4NK) 的规范化标准,因为它会产生不必要的冗余并可能导致数据不一致。要将其提高到 4NF,有必要将此信息分成两个表。
示例 –考虑一个班级的数据库表,其中有两个关系 R1 包含学生 ID(SID)和学生姓名(SNAME),R2 包含课程 ID(CID)和课程名称(CNAME)。
表 – R1(SID, SNAME)
SID | SNAME |
---|---|
S1 | A |
S2 | B |
表 – R2(CID, CNAME)
CID | CNAME |
---|---|
C1 | C |
C2 | D |
当完成交叉产品时,它会导致多值依赖:
表 – R1 X R2
SID | SNAME | CID | CNAME |
---|---|---|---|
S1 | A | C1 | C |
S1 | A | C2 | D |
S2 | B | C1 | C |
S2 | B | C2 | D |
多值依赖(MVD)是:
SID->->CID; SID->->CNAME; SNAME->->CNAME
联合依赖——联合分解是多值依赖的进一步推广。如果 R1 和 R2 在 C 上的连接等于关系 R 那么我们可以说一个连接
依赖关系 (JD) 存在,其中 R1 和 R2 是给定关系 R (A, B, C, D) 的分解 R1(A, B, C) 和 R2(C, D)。或者,R1 和 R2 是 R 的无损分解。如果 R1, R2, ….., Rn 是无损连接分解,则称 JD ⋈ {R1, R2, …, Rn} 保持关系 R。 *(A, B, C, D), (C, D) 将是 R 的 JD 如果 join 的属性等于
关系 R。这里,*(R1, R2, R3) 用于表示关系 R1, R2, R3 等是 R 的 JD。
令 R 是关系模式 R1, R2, R3……..Rn 是 R 的分解。 r( R ) 被称为满足连接依赖当且仅当
例子 –
表 – R1
Company | Product |
---|---|
C1 | pendrive |
C1 | mic |
C2 | speaker |
C2 | speaker |
Company->->Product
表 – R2
Agent | Company |
---|---|
Aman | C1 |
Aman | C2 |
Mohan | C1 |
Agent->->Company
表 – R3
Agent | Product |
---|---|
Aman | pendrive |
Aman | mic |
Aman | speaker |
Mohan | speaker |
Agent->->Product
表 – R1⋈R2⋈R3
Company | Product | Agent |
---|---|---|
C1 | pendrive | Aman |
C1 | mic | Aman |
C2 | speaker | speaker |
C1 | speaker | Aman |
Agent->->Product
第五范式/投影范式(5NF):
关系 R 是 5NF 当且仅当 R 中的每个连接依赖都由 R 的候选键隐含。 分解为两个关系的关系必须具有无损连接属性,这确保不会生成虚假或额外的元组,当关系通过自然连接重新结合。
属性——当且仅当关系 R 满足以下条件时,它才属于 5NF:
- R 应该已经在 4NF 中了。
- 它不能被进一步非损失分解(连接依赖)
示例 –考虑上述模式,案例为“如果一家公司生产产品,而代理人是该公司的代理人,那么他总是为该公司销售该产品”。在这些情况下,ACP 表显示为:
表 – ACP
Agent | Company | Product |
---|---|---|
A1 | PQR | Nut |
A1 | PQR | Bolt |
A1 | XYZ | Nut |
A1 | XYZ | Bolt |
A2 | PQR | Nut |
关系 ACP 再次分解为 3 个关系。现在,所有三个关系的自然 Join 将显示为:
表 – R1
Agent | Company |
---|---|
A1 | PQR |
A1 | XYZ |
A2 | PQR |
表 – R2
Agent | Product |
---|---|
A1 | Nut |
A1 | Bolt |
A2 | Nut |
表 – R3
Company | Product |
---|---|
PQR | Nut |
PQR | Bolt |
XYZ | Nut |
XYZ | Bolt |
R1 和 R3 在 ‘Company’ 上的自然连接的结果,然后 R13 和 R2 在 ‘Agent’ 和 ‘Product’ 上的自然连接的结果将是表ACP 。
因此,在这个例子中,所有的冗余都被消除了,ACP的分解是一个无损连接分解。因此,该关系在 5NF 中,因为它不违反无损连接的属性。