首页
学习
活动
专区
圈层
工具
发布

理解3NF
EN

Stack Overflow用户
提问于 2011-11-29 06:13:01
回答 1查看 1.1K关注 0票数 1

我目前在一个系统分析类中,我想更好地理解规范化的使用。对于3NF,如果我正在处理一个包含学生Id、姓名、电话号码和专业的表。我必须只使用学生ID和专业,因为学生的名字和电话号码都可以从ID中找到。我明白吗?

EN

回答 1

Stack Overflow用户

发布于 2011-12-07 05:55:51

让我们从这个开始。。。

代码语言:javascript
复制
student_id  name                 phone            major
--
1           Darcy Sailer         000-111-2345     Mathematics
2           Lonnie Seman         000-111-3456     Fine Art
3           Mathew Bradburn      000-112-9086     Education
4           Edwina Loflin        000-111-2345     Psychology
5           Clinton Rosebrook    000-111-1000     Chemistry
6           Lonnie Seman         000-113-2975     Chemistry

唯一的候选密钥是student_id。这意味着名字不是唯一的,手机不是唯一的,专业也不是独一无二的。

为了使表处于3NF中,它必须满足这些要求。

  • ,它在2NF中,每个非素数属性都直接依赖于每个候选键。(没有传递的dependencies.)

这张桌子是2NF的。(证据留给读者。)有三个非素数属性;它们都直接依赖于唯一的候选键。这意味着

  • 名称不确定电话,
  • 名称不确定专业,
  • 电话不确定专业,
  • 电话不确定名称,

<代码>H 116专业不确定名称,H 217H 118专业不确定电话。H 219F 220

所以它在3NF中。

在识别两列之间的依赖关系时,您试图回答以下问题:“给定第一列的一个值,我是否总是为第二列找到一个和唯一一个值?”

例如,要确定"name“和"major”之间是否存在依赖关系,您会问,“给定一个值表示'name',我是否总是为‘major’找到一个和唯一一个值?”答案是“不”。以“朗尼·塞曼”的名字命名,你可以找到两个专业--美术和化学。

在现实世界中,一个人可以拥有一个以上的电话号码和多个专业,这并不重要。选择只记录每个人一个电话号码还是每个人只记录一个主要电话号码是数据库设计的一个重要部分,但这与规范化无关。

在现实世界中,很少从有代表性的样本数据开始,这并不重要。数据库设计人员应该知道如下所示

  • 两个人可以有相同的名字。
  • 两个人可以有相同的电话号码。
  • 两个人可以有相同的专业。
  • 一个人可以有两个或更多的电话号码。

<代码>H 130一个人可以有两个专业。H 231F 232

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8306661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档