1

我在 youtube 上看这个关于标准化的视频,我不得不说我现在很困惑,我可能在视频中有错误,即使它有 25 个喜欢和只有 1 个不喜欢。

正常化

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

作者说“作业描述”列取决于作业 ID 列......但是对于相同的作业 ID,有不同的作业描述。然后,他将该表“规范化”为 2NF,方法是将其分成两个表……其中一个仅包含分配 ID 和分配描述。而且这个表甚至不在 1NF(非唯一主键)中,那么它怎么可能是 2NF?

有人能告诉我这个视频关于 2NF 是正确还是错误?

4

1 回答 1

3

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

对于处于 2NF 中的关系,它必须

  • 处于 1NF 中,并且
  • 没有部分关键依赖。

如果一个属性依赖于任何候选键的一部分,则存在部分键依赖,并且关系不在 2NF 中。

视频试图说明的一点是,如果主键是单列,则关系保证为 2NF。但是看看这张表(来自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 中。但事实并非如此。视频制作者忽略了这样一个事实,即大多数表都有多个候选键,并且规范化考虑了每个候选键,而不仅仅是称为主键的“特殊”候选键。

这段视频还有很多其他问题——太多了,以至于我没有看完。生命太短暂,不能再浪费一分钟。

于 2013-03-01T22:56:50.867 回答