【问题标题】:Is this table 4NF?这张桌子是 4NF 吗?
【发布时间】:2014-03-21 09:29:31
【问题描述】:

我正在尝试设计一个数据库。我有一张如下表:

Tag     Post     File
A        a         1
A        a         2
A        a         3
A        b         4
B        a         1
B        b         1
B        c         1
B        d         1

每个帖子可能有多个标签,每个文件可能有多个标签。除了标签之外,帖子和文件是不相关的。显然,仅从表格来看,就会存在冗余问题,例如后标签对 A-a 不必要地重复了 3 次,与后文件对 B-1 相同。但是,我已经查看了 1NF 到 4NF 的定义,并且似乎在所有这些定义中。

我错过了什么?

我认为如果一个表有冗余,那么它就没有被规范化。但它似乎确实被标准化为 4NF。所以我一定是哪里出错了。

【问题讨论】:

  • 您不会说给定标签是否可以包含多个帖子或文件。同样,“不相关”并不意味着任何特别的东西。 “冗余”也没有。也不是“明显”有任何 NF 可以删除。如果您尝试包含该标签->>post|file,即该表始终是其在 {tag, post} 和 {tag,file} 上的投影的自然连接,那么这与您的示例数据相矛盾。不存在重要的 MVD。您需要找出 FD 和 MVD(或二进制 JD)是什么,并说出哪些 FD 持有和不持有以及哪些 MVD/JD 持有和不持有(或者有哪些无损分解)。非正式是不够的。
  • Re“这是对的”:根据您的参考/教科书显示您的工作步骤,并说明理由 - 并非所有术语/符号都是标准的,我们不确切知道您使用什么算法/方法正在关注,我们想检查你的工作,但不想重做,当流程允许时,我们需要你的选择,否则我们无法告诉你哪里对错,我们不想重写你的教科书。请参阅How to Ask,点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。如果您不确定它是否正确,请针对您卡在哪里提出 1 个经过研究的特定非重复问题。

标签: database


【解决方案1】:

根据您的描述,您应该将该表分解为 2 个表,以模拟“帖子和标签”与“文件和标签”之间的一对多关系

POST   TAG
a       A
b       A
a       B
b       B
c       B
d       B


FILE   TAG
1       a
2       a
3       a
4       b
1       b
1       c
1       d

看看这里的第一个例子:

http://en.wikipedia.org/wiki/Fourth_normal_form

这通常与您在问题中描述的情况相同。

这也是一个有用的问题:

Database Normalization

【讨论】:

  • 那么...我的表格是否标准化?为什么或者为什么不?有没有规定我应该把桌子一分为二?这不会使记录数量翻倍吗?
  • 不,您的表未根据第四范式定义进行规范化,因为正如您所说,POST 和 FILE 是不相关的,即彼此独立,但存在于同一个表中,这违反了唯一的要求如您所述,第四范式并创建冗余。将表拆分为 2 解决了这个问题,因为每个表中的每一列都依赖于另一列。
  • 我明白了,这是一个多值依赖!
  • @user2108462 & Rami 在问题中的标签是 A,B,... 不是 a,b,.... 所以第二张表没有意义。有关更多问题,请参阅我对该问题的评论。
猜你喜欢
  • 1970-01-01
  • 2015-06-20
  • 2010-12-12
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多