【问题标题】:Single attribute primary key and second normal form (2NF)单属性主键和第二范式(2NF)
【发布时间】:2019-08-30 12:38:31
【问题描述】:

我不确定这句话是真是假:“具有单个属性主键的表至少自动处于第二范式(2NF)。”

我认为这是对的,但我无法解释为什么。

【问题讨论】:

  • 不,那是错误的。单列主键,连1NF都不保证
  • 在没有理由的情况下说你认为这是真的对你来说可能意味着什么? PS这是假的。如果某些非素数列在每一行中必须具有相同的值,则 {} 部分功能地确定该列和表不在 2NF 中。然而,这是一个常见的神话,因为人们忘记了 {} 作为决定因素。
  • @a_horse_with_no_name "1NF" has no single meaning. 但所有含义本质上与现代归一化理论无关。它们只是不允许某些与规范化理论中的其他任何东西无关的表值。
  • PS 此外,请阅读 2NF 的定义。所有非主列必须在功能上完全依赖于每个 CK,而不仅仅是一个。这可能是您的讲师希望您注意的,因为他们可能将所有 CK 简单意味着 2NF 的神话归咎于这一神话。 PK也无所谓,CK有。如果您的意思是前提包括只有一个 CK,那么您应该这样说。 PS 给出你对 2NF 的定义。它可能关心也可能不关心某些版本的“1NF”。
  • 请按照出版的学术教科书展示并证明您的工作步骤,并提出一个具体问题。现在,您只是要求我们用定制的教程重写您的教科书/手册并完成您的(家庭)作业,而您没有表现出任何研究或其他努力。需求转储不是主题问题。请参阅How to Ask,点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。

标签: database database-design primary-key database-normalization


【解决方案1】:

对于第一范式的表,表的属性不能有多个值

例如,

id   mobile_number   age
------------------------------
1    9xxx5xxxxx      25
     9xxx6xxxxx      
2    8xxxx5xxxx      26 
     7xxxx5xxxx      

这可以归一化为1NF,如下所示,

id  mobile_number  age
------------------------------------
1   9xxx5xxxxx     25
1   9xxx6xxxxx     25
2   8xxxx5xxxx     26 
2   7xxxx5xxxx     26 

如果表处于第一范式并且没有非主属性依赖于任何候选键的真子集,则称该表处于第二范式

这里的候选键是{id,mobile_number}

非主要属性是年龄

该表不在 2NF 中,因为非主属性(年龄)仅依赖于候选键(id)的真子集。

为了将其标准化为 2NF,我们将表拆分如下

id   mobile_number
------------------------------
1    9xxx5xxxxx
1    9xxx6xxxxx
2    8xxxx5xxxx
2    7xxxx5xxxx

id age
------
1  25
2  26  

【讨论】:

  • 如果你让提问者给出他们对 2NF 的定义,你可能会发现它并不关心 1NF。 "1NF" has no single meaning.看我的cmets关于这个问题。
  • 这个答案没有回答这个问题,因为它没有解决“具有单个属性主键的表”的假设。 PS“对于处于第一范式的表,表的属性不能有多个值”意味着每个表都在 1NF 中,因为根据定义,关系表每行每列都有一个值。您是“1NF”众多令人困惑且无益的演示之一的受害者。请参阅我的链接重新 1NFs。
  • 谢谢@philipxy 我会调查的
猜你喜欢
  • 1970-01-01
  • 2016-06-10
  • 2016-10-31
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 2017-01-18
  • 2017-08-11
  • 2015-02-05
相关资源
最近更新 更多