我一直在玩Active Record,我注意到A.C./ORM在创建一对一的关系时总是使用以下数据库模型
id | country_id |名字| ...
id | tld |名字| ...
不,我不知道,这不是第三范式的幻想吗?这清楚地表明“每个非主要属性都是非传递性的,取决于表格的每个键”。那么这个country_id不依赖于人格呢?
这是错误还是我没有明白这一点?
答案 0 :(得分:3)
功能依赖性,A => B,意味着根据定义,A的每个不同值只能与单个B值相关联。换句话说,如果您知道A,则B是给定的。在这种情况下,给定的personid
只能与一个country_id
相关联,因此personid => country_id
。
答案 1 :(得分:2)
是的,这是依赖的。
在关系代数中,每个表都有一个与之关联的谓词(即填充表中值的语句是真实的)。
因此,例如“由id
标识的人来自国家country
,名称为name
等......”
第三种常规形式有时也被称为:“每个非主要属性必须提供关于密钥,整个密钥以及密钥的事实。”
这就是说你正在寻找传递依赖。这方面的一个例子是
Person (id, country_id, tld, name, ...)
在此示例中,tld是可传递依赖的id,因为它依赖于country_id,它依赖于id。所以,这个例子会违反3NF。