基本概念
连接依赖:设关系模式R、Ri的属性集是U、Ui,UiU(1≤i≤n).若R每个容许的实例r均满足r=∏U1(r)∞...∞∏Un(r)则称R满足连接依赖,记作∞(R1,...,Rn).若其中某个Ui=U,则称连接依赖是平凡连接依赖。 多值依赖也是连接依赖。
第五范式:如果关系模式R中的每一个连接依赖均由R的候选码所隐含,则称此关系模式符合第五范式。
举例
看下面关系表是否符合第5范式
设关系模式SPJ(SNO,PNO,JNO),其中SNO表示供应者号,PNO表示零件号,JNO表示项目号。设有关系SPJ。如果将SPJ模式分解为SP、PJ和JS,并进行SP⋈PJ及SP⋈PJ⋈JS的自然连接,其操作数据及连接结果如图(注:“⋈”符号为连接符)
SPJ | ||
供应商代码(SNO) | 零件代码(PNO) | 项目代码JNO(PNO) |
S1 | P1 | J2 |
S2 | P1 | J1 |
S1 | P1 | J1 |
S1 | P2 | J1 |
将上表变成如下表,加两个“供应商代码(SNO)”是为了便于分析
供应商代码(SNO) | 由零件代码(PNO) | 工程项目代码JNO(PNO) | 供应商代码(SNO) |
S1 | P1 | J2 | S1 |
S2 | P1 | J1 | S2 |
S1 | P1 | J1 | S1 |
S1 | P2 | J1 | S1 |
将 SPJ模式分解为SP、PJ和JS
得到如下结果,如下是3个表,这里为了保持共性,用一个表表示
sp | js | ||
供应商代码(SNO) | 由零件代码(PNO) | 工程项目代码JNO(PNO) | 供应商代码(SNO) |
S1 | P1 | J2 | S1 |
S2 | P1 | J1 | S2 |
S1 | P2 | J1 | S1 |
pj |
进行SP⋈PJ及SP⋈PJ⋈JS的自然连接
供应商代码(SNO) | 由零件代码(PNO) | 工程项目代码JNO(PNO) |
S1 | P1 | J2 |
S2 | P1 | J1 |
S1 | P1 | J1 |
S1 | P2 | J1 |
上例中,因为它仅有的候选码(SNO,PNO,JNO)肯定不是它的三个投影SP、PJ、JS自然连接的公共属性,所以 SPJ ∉ 5NF(“∉”为不属于符号)
学习笔记
关于第五范式和连接依赖,看定义都很抽象,也没找到一些更明确的资料,不过个人感觉就是3个以上的关系决定一条数据就算是连接依赖了吧。也暂时只能就这么理解了。这种依赖比多值依赖更麻烦吧,一对多还只是两个字段的关系,这里确数据到3个以上的字段的依赖关系,形成一个依赖的连接,我也只能用我的理解去靠近语义的理解,这样也方便自己的记忆。(((X→Y)→Z)→...n),这是我用自己理解的方式定义的一个公式。相比于X→→Y,“→→”符合代表依赖的数量,而连接依赖代表依赖的维度,二位以上的关系。
补记
表的分解和自然连接过程