整洁数据与第三范式的等价性

数据挖掘 数据集 数据 数据清理 正常化
2022-02-15 23:55:52

Hadley Wickham 的“Tidy Data”论文中,他指出

在整洁的数据中:

  1. 每个变量形成一列。
  2. 每个观察形成一行。
  3. 每种类型的观察单元形成一个表格。

这是 Codd 的第 3 范式(Codd 1990),但具有以统计语言为框架的约束,并且重点放在单个数据集上,而不是关系数据库中常见的许多连接数据集。

Codd 的第三范式可以描述为:

  1. 一个表是第一范式,如果

    • 它将信息存储在行和列中,其中一个或多个列(称为主键)唯一标识每一行。
    • 每列包含原子值,并且没有重复的列组。
  2. 一个表是第二范式,如果

    • 该表是第一范式,并且
    • 所有非键列都依赖于表的主键。
  3. 一个表是第三范式,如果

    • 它是第二范式,并且
    • 它仅包含非传递依赖于主键的列

我试图了解这两组规则是如何等效的。

我相信第一个 Tidy Data 规则映射到第一范式。具体来说,“每个变量形成一列”映射到“每列包含原子值,并且没有重复的列组”。

我相信 Tidy Data 规则“每个观察形成一行”映射到“所有非键列都依赖于表的主键”以及“它只包含非传递依赖于主键的列”。

我怀疑“每种类型的观察单元形成一个表”映射到“该表将信息存储在行和列中,其中一个或多个列(称为主键)唯一标识每一行”,但我对这种映射不太确定.

我相信我上面的分析不是(很)正确的,所以我希望有人能澄清这两组规则之间的联系。

我的问题是:前面提到的三个 Tidy Data 规则如何等同于第三范式?

1个回答

我相信它是这样的,基于我自己的思考:

Hadley 规则 1 和 2(称为 TR1 和 TR2)等价于 1NF,但 Hadley 规则 1 允许列重复。我们在 TR1 和 TR2 中所说的是我们在表格的每个单元格中都有一个值,尽管我认为这取决于你如何解释观察。如果观察是特定对象的实例,那么这是一个更强有力的陈述,尽管 TR3 表明我认为情况并非如此。

Hadley 规则 1、2 和 3 的组合相当于 3NF。使用这个链接,它也解释了传递依赖:

包含 UnitCode、UnitName、CourseCode、CourseName 的表在 2NF 中,但违反了 TR3,因为 course 和 unit 是不同的对象。3NF中课程和单元通过外键分隔和链接的表符合TR1、TR2和TR3。

假设我们要证明隐含并假设我们有 TR1、TR2 和 TR3。由于那些对重复列只字未提,我认为我们必须要么假设不重复列,要么接受这些不等价。让我们假设没有重复的列。从定义 TR1 & TR2 => 1NF。如果我们有一个不在 2NF 中的表,则使用上面示例中的逻辑违反了 TR3。因此我们有 2NF。类似地,如果我们有一个不在 3NF 中的表,则 TR3 被违反,再次使用上面的逻辑。因此 TR1 & TR2 & TR3 => 3NF。

我认为有人可能会花更多时间做一个更彻底的证明。

高温高压