我在youtube上看了这段正常化的视频,我不得不说我现在很困惑,我可能在视频中有错误,尽管它有25个喜欢,只有1个不喜欢。
Normalization
特别是关于2NF部分,可以在5分钟标记处找到。
作者说'assignment description'列取决于assignment id列…但是对于同一个assignment id有不同的assignment description。然后,他将此表“规范化”为2nf,将其分为两个表…其中一个表只包含assignment id和assignment description。这个表甚至不在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}。但员工和当前工作位置之间存在部分密钥依赖关系。考虑到员工的价值,我们只为当前工作地点找到一个价值。
将主键更改为代理项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中。但事实并非如此,视频制作者忽略了这样一个事实:大多数表都有多个候选密钥,并且标准化会考虑每个候选密钥,而不仅仅是称为主键的“特殊”候选密钥。
这段视频还有很多其他的问题——太多了,以至于我没有全程观看。生命太短,不能再浪费一分钟。