【问题标题】:Active Record/ORM vs Normal Forms?Active Record/ORM 与普通形式?
【发布时间】:2011-02-17 13:46:56
【问题描述】:

我一直在玩 Active Record,我注意到 A.C./ORM 在创建一对一关系时总是使用以下数据库模型

标识 | country_id |姓名 | ...

国家

标识 |顶级域名 |姓名 | ...

不,我想知道,这不是违反第三范式吗?这清楚地表明“每个非主要属性都不可传递地依赖于表的每个键”。那么这个 country_id 不依赖于 personid 是吗?

这是错的还是我没有理解重点?

【问题讨论】:

    标签: sql database-design normalization


    【解决方案1】:

    函数依赖,A => B,意味着根据定义,A 的每个不同值只能与 B 的单个值相关联。换句话说,如果您知道 A,那么 B 就是给定的。在这种情况下,给定的personid 只能与一个country_id 关联,因此personid => country_id

    【讨论】:

    • +1 - country_id 只记录人所属的国家,所以是人的一个属性(人住在国家)。如果人员记录也有“地区”(地区在逻辑上是国家的一个属性),那么它将违反 3NF。
    【解决方案2】:

    是的,它是依赖的。

    在关系代数中,每个表都有一个与之关联的谓词(即用表中的值填充的语句构成一个真实的事实)。

    因此,例如“由id 识别的人,来自国家/地区country,姓名为name,等等......”

    第 3 范式有时也被表述为:“每个非主属性都必须提供关于键、整个键的事实,并且只提供键。”

    也就是说,您正在寻找传递依赖。一个例子是

    Person (id, country_id, tld, name, ...)
    

    在本例中,tld 是传递依赖的 id,因为它依赖于 country_id,而 country_id 又依赖于 id。所以,这个例子违反了 3NF。

    【讨论】:

      猜你喜欢
      • 2010-11-09
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      相关资源
      最近更新 更多