1

我目前正在上系统分析课程,我想更好地了解规范化的使用。对于 3NF,如果我正在处理包含学生 ID、姓名、电话号码和专业的表格。我只需要使用学生 ID 和专业,因为学生姓名和电话号码都可以通过 ID 找到。我理解对了吗?

4

1 回答 1

7

让我们从这个开始。. .

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。
  • 每个非主属性都直接依赖于每个候选键。(没有传递依赖。)

该表在 2NF 中。(证明留给读者。)有三个非主要属性;所有都直接依赖于唯一的候选键。这意味着

  • 名字不能决定电话,
  • 名字不决定专业,
  • 电话不决定专业,
  • 电话无法确定姓名,
  • 专业不确定名称,并且
  • 专业不确定电话。

所以它在 3NF 中。

在确定两列之间的依赖关系时,您试图回答这个问题:“给定第一列的一个值,我是否总是为第二列找到一个且只有一个值?”

例如,要确定“name”和“major”之间是否存在依赖关系,您会问:“给定 'name' 的一个值,我是否总是找到一个且只有一个 'major' 的值?” 答案是“不”。给定“Lonnie Seman”这个名字,你会发现两个专业——美术和化学。

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

没关系,在现实世界中,您很少从具有代表性的样本数据开始。数据库设计人员应该知道诸如

  • 两个人可以有相同的名字。
  • 两个人可以拥有相同的电话号码。
  • 两个人可以有相同的专业。
  • 一个人可以有两个或多个电话号码。
  • 一个人可以有两个专业。
于 2011-12-07T05:55:51.300 回答