学习数据库规范化,混淆了2NF

时间:2013-03-01 21:06:56

标签: database normalization functional-dependencies

我正在观看有关youtube上的规范化的视频,我不得不说我现在感到困惑,即使它有25个喜欢且只有1个不喜欢,我可能会在视频中出现错误。

Normalization

特别关于可在5分钟标记处找到的2NF部分。

作者说“分配说明”列取决于“分配ID”列...但是对于相同的分配ID,存在不同的分配说明。然后,他将此表“规范化”为2NF,将其分为两个表...其中一个表仅包含“分配ID”和“分配说明”。这个表甚至不是1NF(非唯一主键),那么它怎么能是2NF?

有人可以告诉我这段视频在2NF上是否正确或不正确?

1 个答案:

答案 0 :(得分:2)

从关系的角度来看,该视频充其量只是草率和粗心。它的某些部分是完全错误的,包括你引用的部分。不要再观看“数据库规范化大师”中的视频了。

对于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的任何值,我们找到当前工作位置的唯一值。

将主键更改为代理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中。但事实并非如此。视频制作者忽略了大多数表具有多个候选键的事实,并且该规范化将每个候选键考虑在内,而不仅仅是称为主键的“特殊”候选键

此视频存在很多其他问题 - 很多我没有看过它。生命太短暂,不能浪费一分钟。