这是我关于数据库规范化的问题,这与功能依赖关系非常相关。
我的问题是关于下表:
{ ID,NR_ID,IMPRESSION_TYPE,VALUE}
Say ID -> NR_ID, ID->IMPRESSION_TYPE, ID->Value.
Also, { NR_ID, IMPRESSION_TYPE } -> VALUE.
所以我可以说,ID -> { NR_ID, IMPRESSION_TYPE }
从而打破了 3NF 的规则,即不应该有传递依赖吗?
这是我关于数据库规范化的问题,这与功能依赖关系非常相关。
我的问题是关于下表:
{ ID,NR_ID,IMPRESSION_TYPE,VALUE}
Say ID -> NR_ID, ID->IMPRESSION_TYPE, ID->Value.
Also, { NR_ID, IMPRESSION_TYPE } -> VALUE.
所以我可以说,ID -> { NR_ID, IMPRESSION_TYPE }
从而打破了 3NF 的规则,即不应该有传递依赖吗?
是的,当然它具有传递依赖。因为
ID 可以确定值,即(ID-->Value)
NR_ID 和 IMPRESSION_TYPE 可以确定值,即
( NR_ID, IMPRESSION_TYPE --> Value)
所以这是 2NF 形式,必须删除传递依赖以使其成为 3NF,我的建议是在另一个表中有 ID 和 Value
所以我可以说,ID -> { NR_ID, IMPRESSION_TYPE } 从而打破了 3NF 的规则,即不应该有传递依赖吗?
不,您不能通过重新排列术语来消除传递依赖。
依赖关系是基于集合的。表达式 A->B 的意思是“称为‘A’的属性集合决定了称为‘B’的属性集合”。Date 说:“基本上,函数依赖……是在给定 relvar 中从一组属性到另一组属性的多对一关系。” (日期,数据库系统简介,第 7 版,第 330 页。已添加重点。)
其次,阿姆斯特朗的公理(分解)说那ID -> { NR_ID, IMPRESSION_TYPE }
等价于ID -> NR_ID, ID->IMPRESSION_TYPE
。这并不意味着 ID 不再决定 Value,或者 { NR_ID, IMPRESSION_TYPE } 不再决定 Value。