提前感谢您的知识。我正在攻读微软技术考试,其中一个练习题是:
创建主键满足第一个普通表单。对或错?
我个人认为它是假的,因为第一个正常形式是摆脱重复的组。但是文中有一句话(数据库基础,微软出版社考试98-364),其中说明如下:
“第一个规范化形式(1NF)表示数据采用实体格式,这基本上意味着必须满足以下三个条件:•表必须没有重复记录。一旦为表定义了主键,就可以了已达到第一个标准化形式标准。“
请帮助我理解这一点,请解释,就像我五岁。谢谢。
主键必须完全唯一。因此,一旦这是记录的一部分,它就不同于任何其他记录。
例如。
Record 1
---------
KEY = 1
Name = Fred Boggs
Age = 84
Record 2
--------
KEY = 2
Name = Fred Boggs
Age = 84
这两个记录是不同的,因为字段KEY是不同的。因此,虽然其余数据相同,但它符合1NF的要求。
我无法向五岁的孩子解释这个问题。我试过了。但我或许可以对这个问题有所了解。您需要知道的第一件事是多年来对1NF有多种定义,这些定义有时会相互冲突。这可能是您混淆的原因,或者至少是其中的一部分。
一个有用的事情是Ed Codd在第一次定义它时的想法。 Ed Codd在他1970年出版的论文中定义了First Normal Form,他称之为Normal Form。他在该论文中的目的是证明沿关系线构建的数据库将具有现有数据库具有的所有表达能力。现有数据库通常处理拥有一组子项的父项。例如,如果父数据项包含有关学生的数据,则每个孩子可能包含有关该学生正在学习的一门课程的数据。
实际上,您可以通过允许关系的一个属性本身就是一种关系来根据数学关系定义这样的结构。我将称之为“嵌套”关系,尽管我不记得Ed Codd所说的。在定义数学关系后紧密模式化的关系数据模型时,Ed Codd出于各种原因想要禁止这样的结构。他的理由大多是实用的,以使构建第一个关系数据库更加可行。
因此,他将他的一些论文用于证明您可以将属性限制为“简单”值,而不会降低关系数据模型的表达能力。我现在要回避一下“简单”的意思,尽管它值得回归。他把这种限制称为“正常形式”。一旦发现第二个普通形式,正常形式就会重命名为第一个普通形式。
当构建关系数据库时,工程师决定使用称为“表”的数据结构。 (我不知道实际的历史,但这是近似的)。表是由行和列组成的逻辑结构。它可以被认为是一个记录数组,其中每个记录代表一行,所有记录都有相同的标题。
现在,如果您希望这样的结构表示关系,则必须引入一个限制,以防止两个行具有完全相同的值。如果你有这样的重复,这不代表一种关系。根据定义,关系具有不同的元素。这是主键的来源。具有主键的表不能有重复的行,因为它不能有重复的键。
但我还没有完成。你没有问这个问题,但它在堆栈溢出中已经出现了一千次,所以值得投入这里。设计师可以通过创建包含文本的列来打败Ed Codd的原始意图,而该文本又包含逗号分隔值。在Codd的原始表述中,值列表并不“简单”。
这对初学者非常有吸引力,因为它看起来更简单,更有效,用逗号分隔值存储一个表,而不是为父记录创建一个表,另一个用于子记录,并且当它们都需要时加入它们查询。联接并不是新手的简单,他们确实需要一些计算机资源。
在几乎每种情况下,列设计中的CSV都是一个不幸的设计。原因是某些可以通过索引快速完成的查询现在需要全表扫描。这可以将秒数分为几分钟或几分钟。它比加入要贵得多。
所以你必须教新手为什么对所有数据进行密钥访问是一件好事,这意味着你必须教他们1NF的真正含义。这可能和教一个五岁孩子一样困难。新手通常不如五岁小孩懵懂,但他们往往更顽固。
第一范式主要是定义问题而不是设计问题。在关系系统中,数据结构是关系变量。由于关系总是由唯一元组组成,因此关系变量将始终具有至少一个候选键。按照惯例,我们将每个关系的一个键称为“主”键,因此在关系数据库中始终满足主键要求。
类似地,在关系数据库中,所有属性都包含可通过名称而不是位置索引标识的值,因此“重复组”的问题不适用。 “重复组”的概念存在于一些非关系系统中,而这正是Codd最初定义1NF时所指的。
然而,解释1NF的问题出现是因为大多数现代DBMS并不是真正的关系,即使人们试图像关系系统那样使用它们。由于SQL DBMS不是关系型的,我们如何在SQL DBMS中解释像1NF这样的关系概念?
1NF的本质是每个表必须有一个键,并且元组由每个属性的单个值组成。大多数基于SQL的系统不支持“重复组”的概念(单个属性位置中的多个值),因此通常可以肯定地说,如果SQL表具有键并且不允许任何属性位置中的空值,则它是“关系型的”,满足1NF的精神。
您只是引用了文本数据库管理基础知识的一个片段。更完整的报价是:
第一个规范化形式(INF)表示数据采用实体格式,这基本上意味着必须满足以下三个条件: •表格必须没有重复记录。 [...] •该表也不能具有多值属性,这意味着您不能在单个列中组合多个对列有效的值。 [...] •列或属性中的条目必须具有相同的数据类型。
("1NF" is full of confusions, vagueness and changes这个词的历史。但这是本文所说的。)
让我参加聚会;)
对于一个问题“1NF中的这种关系”有意义,你首先需要一个关系。为了使你的桌子成为一种关系,你需要一把钥匙。没有任何键的表不是关系。
为什么?因为关系是一组(元组/行),并且一个集合不能多次包含相同的元素(否则它将是多集),这是由密钥确保的。
一旦你通过拥有一个关键词来获得关系,你就可以看到你的所有属性是否都是atomic,如果是,你就拥有了1NF。
那么...的答案
创建主键满足第一个普通表单。对或错?
......是假的。你确实需要一把钥匙,但你也需要原子性。