一位同事勾画出一张新桌子的价值:
"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,因为它满足了这个例子:
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。它是否正确?
答案 0 :(得分:3)
如果这两列确实存在,那么我会说这个数据库表是第三种正常形式。这是我的理由:
我不知道你的工作伙伴是否想要真正进入4NF,5NF或Boyce-Codd NF - 我非常怀疑......
马克
答案 1 :(得分:2)
有不同的标准化水平。但是如果没有实际的字段名称,你就不能真正知道是否需要规范化。
答案 2 :(得分:1)
答案 3 :(得分:1)
有一些different levels of normalization。
如果“Foo”,“some value 1”“Foo”,“some value 2”“Foo”,“some value 3”“Bar”,“some value 3” 表示表格如下:
Col1| Col2 ------------------ Foo | some value 1 Foo | some value 2 Foo | some value 3 Bar | some value 3
在Col1 / Col2上有一个主键,然后是,它是'Normalized' 如果根本没有密钥,那么不,它没有标准化,因为你可以插入另一个“Bar”,“some value 3”的实例。
关于您添加的新问题:
如果有跨越Col1&的PK Col2,然后它仍然在2NF和3NF。您必须添加一个不属于该键的列的列,否则它必须仅来自Col1或仅来自Col2。
答案 4 :(得分:0)
我相信表中的值列表代表四行:
col1 col2
Foo some value 1
Foo some value 2
Foo some value 3
Bar some value 3
根据我的理解,该表将被视为标准化。我希望这里的主键是{col1,col2}的复合键。
当col1和col2是包含被映射实体的其他属性的其他表的外键时,我通常希望在表中看到这种类型的多对多映射值。
我还建议考虑数字键而不是这些nvarchar值。我怀疑这些文本值可能不是他们所代表的实体的良好候选键,但我没有足够的信息来完全做出判断。