我目前在一个系统分析类,我想更好地理解规范化的使用。如果我在一张包含学生证,姓名,电话号码和专业的桌子上工作的话。我只需要使用学生证和专业,因为学生证上可以找到学生姓名和电话号码。我明白吗?
最佳答案
让我们从这个开始。……
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
唯一的候选关键字是学生id,这意味着名字不唯一,电话不唯一,专业也不唯一。
为了使一个表在3nf中,它必须满足这些要求。
在2NF。
每个非素数属性都直接依赖于每个候选者
钥匙。(没有可传递的依赖项。)
这张桌子是2NF的。(证据留给读者)有三个非素数属性;所有属性都直接依赖于唯一的候选密钥。也就是说
名字不能决定电话,
名字不能决定专业,
电话不能决定少校,
电话不能决定名字,
少校不知道名字,而且
少校不决定电话。
所以是在三楼。
在识别两列之间的依赖关系时,您试图回答以下问题:“给定第一列的一个值,我是否总是为第二列找到一个且只有一个值?”
例如,要确定“name”和“major”之间是否存在依赖关系,您可能会问:“给定‘name’的一个值,我是否总是只为‘major’找到一个值?”答案是“不”。有了“朗尼·塞曼”这个名字,你可以找到两个专业——美术和化学。
在现实世界中,一个人可以有多个电话号码和多个专业,这并不重要。选择每人只记录一个电话号码还是每人只记录一个主要号码是数据库设计的一个重要部分,但这与规范化无关。
无所谓,在现实世界中,你很少从有代表性的样本数据开始。数据库设计者应该知道
两个人可以同名。
两个人可以有相同的电话号码。
两个人可以学同一个专业。
一个人可以有两个或多个电话号码。
一个人可以有两个专业。
关于database - 了解3NF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8306661/