2011-11-29 84 views
1

我目前在系统分析类,我想更好地理解使用规范化。对于3NF,如果我在包含学生ID,姓名,电话号码和专业的表上工作。我只能使用学生证和专业证书,因为学生姓名和电话号码都可以通过ID找到。我理解这个权利吗?了解3NF

+0

Waht你的意思是'使用'?也可以仅使用学生ID找到专业。 – idstam

+0

为什么学生证不能找到Major? – Jan

+0

我在想,因为有不同的专业,但一个学生拥有一个ID – Thomas

回答

5

让我们从这个开始。 。 。

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'的唯一一个值? “答案是“否”。鉴于'朗尼塞曼'的名字,你会发现两个专业 - 美术和化学。

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

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

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