具有唯一值的第三范式

3rd normal form with unique values

我有 table USER 架构 USER(user_id, email, first_name, last_name, ...)。 电子邮件是我数据库中的唯一值,user_id 是主键。因此,user_id 和电子邮件是候选键。 这是否意味着我在这里具有传递依赖性 (user_id -> email -> (first_name, last_name, ...)),因此数据库不在 NF3 中?

3NF定义says

"All the non-prime attributes must depend only on the candidate keys."

如果您有两个候选键,那么它们自然会定义所有其他属性,没关系。 3NF的要点是两边没有non-keys的FD

注意 Relational Database 标签。

混淆一切的主要问题是,只有一种关系模型,然后是各种被其他人宣传为“关系”的废话。

  1. 唯一的原创 关系模型,作者是 Dr E F Codd。
  • 这是一个 rock-solid 定义,自 1970 年 6 月以来就没有改变过,也不需要改变。真理是永恒的,它不会改变。它是商业平台提供商 可以 构建其平台的基础,并且在 1980 年代已经这样做了。
  1. Date & Darwen & Fagin 版本,即 1960 年代的 记录归档系统 ,pre-database 以及 pre-Relational:非常重要RM 替换。加上来自 关系模型 的几个片段(不是完整的概念)。大量宣传和营销为“关系”,这是不正确的。
  • 这是一个collection的片段,永远在变。他们现在最多就是几个“关系代数”; 17个异常的“范式”(他们改变了原来的范式以适应他们自己的目的);等等

  • 以下术语在关系模型中不存在,它们是用于提升其RFS中的片段以获得一点关系外观的术语.

    • “传递依赖”
    • “候选键”
  • 1960 年代的 RFS 的特点是 Record ID(你的是 user_id),这是一个物理(非逻辑)指针。这在 RM 中被明确禁止,这是合乎逻辑的,并且脱离了之前的 pointer-based 系统。

  • 1960 年代的 RFS 和 RM 的主要区别(不是唯一的区别)是,而 RFS 使用物理指针关联物理记录,例如Record IDRM 使用数据中出现的自然键关联数据的逻辑行(不是记录)。

  • 1990 年代出现的 non-commercial 平台提供商通常会参考这些添加内容,或 RM 中禁止的供应条款,有时会提供一些功能来减轻它们造成的痛苦。

Relational Model 是免费提供的(在那些日子里,只有合格的人才会尝试数据库设计)。但是,这些术语已过时,因此今天无法理解。它是开创性的,密集的。支持者指望这一点,以将他们的方法宣传为“关系”。


关系模型

我将回答关系模型。为了避免多次重复同一项目,我将按逻辑顺序处理这些问题。

  1. RM要求每一行(不是记录,因为超出记录)是唯一的。

  2. RM中,为每个table选择一个或多个Unique Keys。每个Key都必须“由数据组成”。此外,每个 Key 必须是 non-redundant,最小的 Key。如果有多个Key,则选择一个作为Primary Key,迁移到从属行作为Foreign Key。选择主键后,剩下的任何键都是备用键

While the Keys may be loosely called "candidates" before the election, after the election they are no longer "candidates", they are losers.

  • The use of the term "candidate" serves only to (a) maintain the tension of not choosing a Primary Key from one of the "candidates" (as required by the RM), and (b) thus allow a non-Key (such as a fabricated Record ID or user_id as a PRIMARY KEY.

  • A Record ID field does not exist in the data, it is manufactured by the system (GUID; AUTO INCREMENT; etc). Such a field is great for perceiving the data in physical terms (RFS), as if it were a stupefying grid, and therefore suppressing the perception of data as logical components the are related (the RM).

  • A genuine Key has many important properties. Declaring a non-Key to be a PRIMARY KEY, which is possible in SQL, does not magically give the non-Key any of those properties.

  • 因此架构是 USER(user_id, email, first_name, last_name, ...)
  1. 您已经认识到 email 是一个唯一标识符。伟大的。事实上,对于该模式,它是唯一的 Key,因此您不必担心从多种可能中选择一个。

这是一个比较。

  • 我所有的数据模型都在 IDEF1X 中呈现,这是自 1993 年以来的关系数据库建模标准。

  • 我的IDEF1X Introduction是初学者必读的


现在你要检查 table 是否满足 3NF。德米特里的意图是正确的,尽管他的定义可能不正确。 E F Codd 博士的 3NF,而不是伪装者:

  • 一行是第三范式当且仅当每个non-prime属性在功能上依赖于键,整个键,只有键。

  • RM只有“完全”的函数依赖,不协助分片Key的人处理他们的分片。

  • 传递性是一个逻辑和数学术语,它不在RM中减去,而是根本不适用,不需要,因为它处理整个密钥,而 RFS 处理密钥的片段。

  • first_name, last_name, ...
    每个功能都依赖于email,只有 email.

  • 因此满足3NF。


1960 年代的记录归档系统

抱歉,我帮不了你,因为它是一个 ever-changing 和不可靠的混乱,处理数据碎片而不是识别原子,他们会无休止地争论,解决不了任何问题。他们研究的概念不在 RM 中,因此被误称为“关系”,同时保留了 1960 年代 Record-oriented 范式的基本部分:附加字段和附加索引对于物理 Record ID;以及物理引用 Record IDRM.

禁止两者

评论

本部分是根据 SO 指南提供的,具体而言:纠正您看到的错误信息。我确实回复了评论,但他们一直在消失。所以我把它放在这里了。

philipxy:
Codd's 1971 [paper] "Further normalization of the data base relational model" introduced "normalization" in the sense of decomposition to higher NFs, including "FD", "CK", "one of its CKs is arbitrarily designated as PK", "2NF" in terms of "partial/full FDs" & "3NF" in terms of "transitive/non-transitive FDs".

  1. 那句话来自 1971 年的论文,而不是 1970 年 6 月的论文 The Relational Model。它们是两篇不同的论文。因此确认:
  • 该内容在 1971 年的论文中

  • 1970 年 6 月 关系模型 论文没有该内容。

因此,1971 年的论文可以驳回

  1. 证据表明,Codd 在这十年(1970 年到 1980 年)期间另外写了大约 12 篇论文,他试图让 RM 被接受。它们没有任何价值,除了历史目的,检查他对由 RM 引起的 DBMS 平台供应商剧变的反应方式:这是一种范式转变。

1971 年的论文以及“RM/Tasmania”文章和演示文稿的明确目的是帮助当时根深蒂固的 DBMS 平台用户在不更改平台的情况下在他们的系统中实现一些关系功能, reference-by-physical-pointer 范式(思维方式和实施)。

After the Relational Model became accepted, around 1985, when all the DBMS platform suppliers started switching to supplying RDBMS platforms, ie. the reference-by-physical-pointer platforms became extinct, the 1971 paper, which was previously near and dear to them, became obsolete.

因此,1971 年的论文可以驳回

  1. 唯一一篇与 RM 相关的文章(不是正式论文,但被广泛接受)是 1985 年的 ComputerWorld 文章,通常被称为 Codd 的十二条规则,它给出了 (a) DBMS 平台和 (b) 数据库的规则,这些规则被接受为真正的关系。那是为了克服 DBMS 平台供应商添加关系点点滴滴然后将其产品标记为“关系”的问题。

  2. 还在一头雾水?一个科学人会:

  • 认识到RM与1971年论文矛盾,1971年论文与RM,[=39矛盾=]

  • 认识到它们不能同时为真,

  • 应用法则Non-Contradiction,

  • 取消1971年的论文

  1. The Date、Darwen、Fagin 等人,以及他们所有的追随者(作者、教授、讲师等)并不愚蠢。因此,以下证据行为:
  • 所谓的问题 [4]、

    的 non-resolution
  • 抑制RM(原子性;Codd的三个NF不变;关系键;对关系键的“完全”功能依赖),

  • 1971年过时论文的提升(碎片化;ever-changing re-definitions 17个NF;物理RecordID作为“关键”;部分FD处理片段等),

  • 1971 年的论文(自 1985 年起已过时)与 关系模型 相矛盾的声明是“关系模型”。正如 philipxy 和其他人所证明的那样。

不正确,与原始关系模型不一致。

关系模型的制度化压制

它通过其他行为得到加强:

  • 将 Codd 规则 1(事后 数据库中的数据视图)误认为是确定的,事前 对数据,那就是 "table":

Erwin Snout:
When cut down to its bare essence, the relational model of data has no more than exactly one "rule" : all information in the database must be represented as values of attributes in tuples in relations.

关系模型十二条规则中有 40 多条规则。将它们缩减为一个简洁的规则与 RM.

不兼容
  • 这消除了真实数据建模的可能性

  • 永久使用完全过时的 ERD 进行数据分析和建模,这不支持 关系模型的中心文章,复合Relational Key,从而维护碎片感知

  • 禁止使用 IDEF1X,它专为 关系模型 而设计,自 1985 年以来可用,NIST自 1993 年以来的关系数据建模标准。它将 RM.

    中的概念形式化