我已经学习数据库设计和编程很长一段时间了,但我仍然不能掌握每个单独的范式(1NF,2NF,3NF)。
由于任何时候数据都是第三范式,它已经自动成为第二和第一范式,通过从一开始就完全标准化数据,整个过程实际上可以更轻松地完成。通过安排数据,每个表中的列(而不是主键)只依赖于整个主键,就可以很容易地做到这一点。
如果我们可以通过执行我所描述的操作来简单地完全标准化数据,那么理解每个单独的范式有多重要?
编辑:我最终要问的是:在对数据进行规范化时,通过每个范式的步骤是否很重要,或者只使用第三范式是否合适,因为结果最终是相同的?
发布于 2018-06-04 20:10:24
我强烈建议您了解每个范式,因为这将帮助您确定或调查当前数据库可能存在的任何问题,因为有时您可能不会每次都有完美的方案,了解每个范式将帮助您了解现有数据库设计的当前问题。
一步一步地通过不同的范式,将帮助你弄清楚为什么我们这样做,这是为了达到E.F.Codd指定的目标。规范化的目标如下: 1.将关系集合从不必要的插入、更新和删除依赖中释放出来。2.减少在引入新类型的数据时对关系集合进行重组的需要,从而增加应用程序的寿命。3.使关系模型对用户更具信息性。4.使关系集合对查询统计信息保持中立,这些统计信息可能会随着时间的推移而变化。
这里有一张图片可以帮助你更好地理解不同的范式。P.S. BCNF实际上是3.5NF而不是4NF
发布于 2018-05-29 03:57:42
这不是这样的情况,如果它在3 NF中,它在1 NF中,nad 2 NF .it类似于,如果它在2 NF中,它必须事先在1 NF中,对于3NF .for归一化到3NF,它必须清除1和2 NF形式。
第一范式声明不应该存在多值属性。2NF指出,不应该存在对非主属性的部分依赖。3NF指出,不应该有传递性依赖。
谢谢
发布于 2018-06-03 06:57:33
唯一重要的NF (范式)是5NF。
一个关系(值或变量)在5NF中,对于它可以被无损分解的每一种方式,组件可以按某种顺序连接回来,其中每个连接的公共列是原始连接的超键。(Fagin的PJ/NF论文的成员资格算法。)
这允许一个表是具有重叠含义但没有更新异常的其他表的连接。(尽管更新异常在ETNF停止,在4NF和5NF之间。)
无论如何,如果你想要一个较低的NF,你应该标准化到5NF,然后反规范化。人们满足于较低的NFs的主要原因是无知。有一定的成本和好处,但人们不知道或解决它们--代码必须限制更新,以解决有问题的更新异常。对给定NF的归一化不是通过较低的NFs来完成的;人们对所需的NF使用适当的算法。(大多数教科书都清楚地表明了这一点,尽管有些人错误地说要通过较低的NF,但放入较低的NF可以阻止原始的高NF的好版本在以后出现。)
PS没有单一的概念1NF,它与更高的NFs的所有共同点是都寻求“更好的”设计。
https://stackoverflow.com/questions/50493873
复制相似问题