发布
社区首页 >问答首页 >正在尝试确定特定的数据库规范化问题

正在尝试确定特定的数据库规范化问题
EN

Stack Overflow用户
提问于 2009-06-05 19:05:27
回答 4查看 316关注 0票数 0

一位同事勾画出一个新表格的值为:

代码语言:javascript
代码运行次数:0
复制
"Foo", "some value 1"
"Foo", "some value 2"
"Foo", "some value 3"
"Bar", "some value 3"

这些是表中仅有的列。列名为Col1、Col2。

一个人说这个表没有规范化,另一个人说是规范化的。

违反规范化的具体论点是,删除Col1 "Foo“中带有"Foo”的三个记录将不再存在于系统中。那个人说应该有一个包含ID和Name列的查找表。上表将引用该表的Id作为其FK。

认为它没有规范化的论点是,表中没有依赖于第一列(第三种规范化形式)的第三列。

我认为混淆来自于它是1NF,因为它满足这个例子:

代码语言:javascript
代码运行次数:0
复制
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。这是正确的吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-05 20:31:50

如果这两列真的是全部,那么我会说这个数据库表是第三范式。我的理由是:

  1. It's in 1NF由于没有一个属性是“多值”的
  2. 由于col1和col2都不是有效的候选键值(重复值!),这个表上唯一可能和有效的主键是(col1,col2)
  3. 2NF规定任何非主属性在函数上都不能依赖于候选键的一部分。由于只有col1和col2都是唯一可能的候选关键字的一部分,这一点是没有意义的-表 is in 2NF
  4. 3NF根据E.F.Codd基本上说任何非关键字属性必须依赖于“关键字,整个关键字,除了关键字之外什么都不是”。因为我们只有有两列组成了键,所以没有其他的非键属性,所以没有任何非键属性违反这个规则--> is is 3NF

我不知道你的工作伙伴是否真的想要进入4NF,5NF或Boyce-Codd NF -我非常怀疑......

Marc

票数 3
EN

Stack Overflow用户

发布于 2009-06-05 19:11:57

有不同的标准化级别。但是如果没有实际的字段名,你就不能真正知道你是否需要规范化。

票数 2
EN

Stack Overflow用户

发布于 2009-06-05 19:10:54

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/957564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档