【发布时间】:2010-10-31 17:59:44
【问题描述】:
一位同事将新表的值勾画为:
"Foo", "some value 1"
"Foo", "some value 2"
"Foo", "some value 3"
"Bar", "some value 3"
这些是表中唯一的列。列名是 Col1、Col2。
一个人说这个表没有标准化,另一个人说它是。
它违反规范化的具体论点是删除 Col1 "Foo" 中带有 "Foo" 的三个记录将不再存在于系统中。那个人说应该有一个包含 ID 和名称列的查找表。上表将引用该表的 Id 作为其 FK。
它没有被规范化的论点是表中没有第三列依赖于第一列(第三种规范化形式)。
我认为混淆来自它是 1NF,因为它满足这个例子:
Customer Tr. ID Date Amount
Jones 12890 14-Oct-2003 -87
Jones 12904 15-Oct-2003 -50
Wilkins 12898 14-Oct-2003 -21
Stevens 12907 15-Oct-2003 -18
Stevens 14920 20-Nov-2003 -70
Stevens 15003 27-Nov-2003 -60
来自http://en.wikipedia.org/wiki/Database_normalization。
但听起来好像违反了这条规则,“相同的信息可以在多行上表示;因此对表的更新可能会导致逻辑不一致。”这适用于超过 1NF 的归一化。
所以看起来原始表会违反 2NF,从而违反 3NF,但会满足 1NF。它是否正确?
【问题讨论】:
-
呃,谢谢 Rich B,但我还是一头雾水。
-
好的,所以我没有问“什么是标准化”。我问这个特定实例是否违反了规范化规则。为什么不实际回答问题,而不是更改标题然后做出回应。您没有回答实际问题。
-
我的困惑在于您如何“措辞”您的样本数据。字段名称是什么?记录长什么样?是“foo”数据吗?那么不,它没有标准化,因为你在重复数据。
-
@blu 我们需要更多关于所表示的实际数据及其与周围数据的关系的信息才能回答。
-
@Adrien:重复数据不会使表格在任何正常使用中都未标准化。例如,两个人可以有相同的名字,几乎没有人会因此而拆分名字表。或者,即使他们确实拆分了名字表,该列也可能是外键。
标签: database-design normalization