我有点搞不懂3NF的定义。
根据维基百科:
第三范式(3NF)是一种用于数据库规范化的规范形式。3NF最初由E.F. Codd于1971年定义。Codd的定义指出,表在3NF中的当且仅当以下两种条件都成立:
但是,根据亚伯拉罕·西尔伯沙茨著的“数据库系统概念第六版”一书,Henry F.Korth,S.Sudarshan:
关系模式R相对于一组函数依赖集(3NF)是第三范式(3NF),如果对于表单F+的α→β中的所有功能依赖项,其中α⊆R和β⊆R至少有以下一项:
此外,根据Ramez Elmasri Shamkant B. Navathe的数据库系统第6版:
关系模式R是第三范式(3NF),如果当一个非平凡函数依赖X→A在R中保持时,(a) X是R的超键,或者(b) A是R的素数属性。
在阅读了上述定义之后,我不确定一个关系模式是否必须在2NF中才能在3NF中。另外,关系模式必须在3NF中才能在BCNF中吗?
发布于 2014-04-28 03:58:08
规范形式是以这样一种方式指定的,即对于任何正常形式,模型也满足低编号范式的标准。所以,是的,如果你的模型是第三范式,它也是第二范式和第一范式。
当对模型进行规范化时,您通常会在下一个范式之前解析一个范式。这使得标准化更简单,错误也更少,因为您只是在时间上应用了几个规则。有可能,处于较低范式的实体也处于较高的范式中。大多数第三范式实体也是第四和第五范式。
第四、第五和第六范式超越了功能依赖。在适用的情况下,它们进一步简化了数据,而牺牲了更多的表格。它们减少了冗余,提高了数据的完整性。
发布于 2014-04-28 07:23:46
是的,Korth对3NF的定义意味着2NF。
假设有关系书
书籍{ pub_id,auth_id,publisher_name,author_name}
使用一组函数依赖项:
pub_id -> publisher_name auth_id -> author_name
这里的候选密钥是{pub_id, auth_id}。
显然,这种关系不在2NF中,因为publisher_name依赖于pub_id,后者是候选键的子集(因此它在功能上并不完全依赖于唯一的候选键)。
现在,让我们尝试应用Korth对3NF的定义。
{pub_id}或{auth_id}也不是超级密钥。因此,即使不存在传递依赖关系,这种关系也不存在于3NF中。
此外,如果我们试图将这种关系正常化为3NF,我们将被迫将这种关系分解如下:
出版商{ pub_id,publisher_name} 作者{auth_id,author_name}
这相当于图书的2NF分解。
发布于 2014-04-28 10:15:11
通过尝试实现2nf和3nf,您可能会有一个更好的主意。在实时中,您不能区分这两者,因为它们是同时发生的。当你是2nf-ing,你就不能停在那里,如果它没有定义主键或超级键的话,w3nf本身就不是了。
https://dba.stackexchange.com/questions/64011
复制相似问题