我目前在一个系统分析类中,我想更好地理解规范化的使用。对于3NF,如果我正在处理一个包含学生Id、姓名、电话号码和专业的表。我必须只使用学生ID和专业,因为学生的名字和电话号码都可以从ID中找到。我明白吗?
发布于 2011-12-07 05:55:51
让我们从这个开始。。。
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的。(证据留给读者。)有三个非素数属性;它们都直接依赖于唯一的候选键。这意味着
<代码>H 116专业不确定名称,H 217H 118专业不确定电话。H 219F 220
所以它在3NF中。
在识别两列之间的依赖关系时,您试图回答以下问题:“给定第一列的一个值,我是否总是为第二列找到一个和唯一一个值?”
例如,要确定"name“和"major”之间是否存在依赖关系,您会问,“给定一个值表示'name',我是否总是为‘major’找到一个和唯一一个值?”答案是“不”。以“朗尼·塞曼”的名字命名,你可以找到两个专业--美术和化学。
在现实世界中,一个人可以拥有一个以上的电话号码和多个专业,这并不重要。选择只记录每个人一个电话号码还是每个人只记录一个主要电话号码是数据库设计的一个重要部分,但这与规范化无关。
在现实世界中,很少从有代表性的样本数据开始,这并不重要。数据库设计人员应该知道如下所示
两个人可以有相同的名字。两个人可以有相同的电话号码。两个人可以有相同的专业。一个人可以有两个或更多的电话号码。<代码>H 130一个人可以有两个专业。H 231F 232
https://stackoverflow.com/questions/8306661
复制相似问题