我在 youtube 上看这个关于规范化的视频,我不得不说我现在很困惑,我可能在视频中有错误,即使它有 25 个喜欢,只有 1 个不喜欢。
特别是关于可以在 5 分钟标记处找到的 2NF 部分。
作者说“作业描述”列取决于作业 ID 列...但是对于相同的作业 ID 却有不同的作业描述。然后,他将该表“规范化”为 2NF,方法是将其分成两个表……其中一个仅包含作业 ID 和作业描述。而且这个表连 1NF(非唯一主键)都不是,怎么可能是 2NF?
谁能告诉我这个视频关于 2NF 是正确的还是不正确的?
最佳答案
从关系的角度来看,该视频充其量只是马虎和粗心。它的某些部分完全是错误的,包括您引用的部分。不要再看“数据库规范化大师”的视频了。
要使关系符合 2NF,它必须
- 在 1NF 中,并且
- 没有部分键依赖。
如果属性依赖于任何候选键的一部分,则存在部分键依赖,并且该关系不在 2NF 中。
视频试图说明的一点是,如果主键是单列,则关系保证为 2NF。但是看看这张表(来自 Wikipedia entry for 2NF )。
Employees' Skills
--
Employee Skill Current Work Location
Jones Typing 114 Main Street
Jones Shorthand 114 Main Street
Jones Whittling 114 Main Street
Bravo Light Cleaning 73 Industrial Way
Ellis Alchemy 73 Industrial Way
Ellis Flying 73 Industrial Way
Harrison Light Cleaning 73 Industrial Way
这个关系只有一个候选键,{Employee, Skill}。但是 Employee 和 Current Work Location 之间存在部分关键依赖关系。给定 Employee 的任何值,我们会为 Current Work Location 找到一个且只有一个值。
将主键更改为代理 ID 号不会改变这种情况,尽管视频暗示它会。
Employees' Skills
--
ID Employee Skill Current Work Location
1 Jones Typing 114 Main Street
2 Jones Shorthand 114 Main Street
3 Jones Whittling 114 Main Street
4 Bravo Light Cleaning 73 Industrial Way
5 Ellis Alchemy 73 Industrial Way
6 Ellis Flying 73 Industrial Way
7 Harrison Light Cleaning 73 Industrial Way
主键是单列,他们说这保证了这种关系是 2NF。但事实并非如此。视频制作者忽略了一个事实,即大多数表有多个候选键,并且规范化考虑了每个候选键,而不仅仅是称为主键的“特殊”候选键.
这个视频还有很多其他问题 -- 太多以至于我没有看完。人生苦短,不能再浪费一分钟了。
关于database - 学习数据库归一化,对2NF一头雾水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166890/