让我们从这开始吧...
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
Run Code Online (Sandbox Code Playgroud)
唯一的候选键是student_id.这意味着名称不是唯一的,手机不是唯一的,而且专业不是唯一的.
为了使表格在3NF,它必须满足这些要求.
此表格为2NF.(证明留给读者.)有三个非素数属性; 所有都直接依赖于唯一的候选键.这意味着
所以它在3NF.
在识别两列之间的依赖关系时,您试图回答这个问题:"给定第一列的一个值,我是否总能找到第二列中的一个且只有一个值?"
例如,要确定"name"和"major"之间是否存在依赖关系,您会问,"给'name'一个值,我是否总能找到'major'的唯一值?" 答案是"不".鉴于"Lonnie Seman"的名字,你会发现两个专业 - 美术和化学.
无论如何,在现实世界中,一个人可以拥有多个电话号码和一个以上的专业.选择是每人只记录一个电话号码还是每人只记录一个主要电话号码是数据库设计的一个重要部分,但它与规范化无关.
无论如何,在现实世界中,您很少从代表性样本数据开始.数据库设计者应该知道类似的东西