我一直在研究数据库设计和编程很长一段时间,但我仍然无法理解每个正常形式(1NF,2NF,3NF)。
当数据处于第三范式时,它已经自动处于第二范围和第一范式,通过从一开始就完全规范化数据,整个过程实际上可以更加繁琐地完成。我可以通过安排数据来轻松完成此任务,这样每个表中的列(主键除外)仅依赖于整个主键。
如果我们可以通过按照我所描述的方式简单地完全规范化数据,那么理解每个正常形式有多重要?
编辑:我最终要问的是:在对数据进行标准化时,是否重要的是通过每个正常形式的步骤,或者仅仅看到第三范式,因为结果最终是相同的?< / p>答案 0 :(得分:2)
我强烈建议您了解每个正常表单,因为这将帮助您确定或调查当前数据库可能遇到的任何问题,因为有时您可能每次都没有完美的情况,并且理解每个正常表单将帮助您了解当前的问题如果有的话,使用现有的数据库设计。
逐步完成不同的常规形式将帮助您弄清楚我们为什么这样做,这是为了达到E. F. Codd指定的目标。 规范化的目标如下: 1.从不受欢迎的插入,更新和删除依赖项中释放关系集合。 2.随着新型数据的引入,减少重建关系集合的需要,从而延长应用程序的使用寿命。 3.使关系模型对用户更具信息性。 4.使关系集合与查询统计数据保持中立,这些统计数据随着时间的推移可能会发生变化。
这是一张图片,可以帮助您更好地理解不同的常规形式。 附: BCNF实际上是3.5NF而不是4NF
答案 1 :(得分:0)
这是正确的,当你在3. NF时,你也在2.和NF中。但是,3. NF的唯一条件是不只是所有数据仅依赖于整个候选键。它还具有已经在2. NF中的条件,这意味着不是候选键的每个属性必须完全依赖于候选键和它在1. NF中,这意味着每一列都必须是atomar。所以,是的,如果你想在3. NF。
中有一个表,了解每个NF是很重要的我会尝试向您解释普通表格:
1. NF指出每列必须是atomar。这意味着,一列中不应有多个数据项。例如,某人的地址不应存储在一列中,而应分布在国家,州,街道等中。然后,这些数据中的每一个都应存储在它们自己的列中。
2. NF指出,每个属性(不是候选密钥的一部分)必须只能由整个候选密钥识别。这意味着您不应该将书籍和打印标签存储在一个表中。因为那时书的名称只取决于书的id,而打印标签的名称只取决于打印标签的id而不是整个候选键的ID。
3. NF几乎与2相同:不允许列依赖于非候选键列。这意味着,例如,您不应该将书籍的IBAN和书籍的ID存储在同一个表中,只有id是候选键,因为您只需要IBAN来查找书籍的名称
如果这不能很好地解释这个问题,那么网上有很多关于正常表格的信息(如Wikipedia)。
答案 2 :(得分:-1)
如果它在3 NF中它在1 NF和第2 NF中就不是这样的情况。如果它在第2 NF中它必须预先在第1 NF中。同样适用于3NF。用于归一化到3NF它必须清除第1和第2 NF形式。
第1范式表示不应存在多值属性。 2NF声明不应该部分依赖非主要属性。 3NF表示不存在传递性的依赖性。
谢谢
答案 3 :(得分:-2)
唯一重要的NF(正常形式)是5NF。
关系(值或变量)在5NF时,对于每种方式,它可以无损分解,组件可以按某种顺序连接回来,其中每个连接的公共列是原始的超级密钥。 (Fagin的PJ / NF论文会员算法。)
这允许表是具有重叠含义但没有更新异常的其他表的连接。 (虽然更新异常在ETNF停止,但在4NF和5NF之间。)
无论如何,如果你想要一个较低的NF你应该标准化为5NF然后非规范化。人们满足于降低NF的主要原因是无知。有一定的成本和好处,但人们不知道或解决它们 - 代码必须限制更新以解决有问题的更新异常。通过较低的NF来实现对给定NF的归一化;一个人想要使用适合的NF算法。 (大多数教科书都清楚说明了这一点,虽然有些人错误地说要通过较低的NF,但是降低NF可能会阻止原版的高NF版本出现以后出现。)
PS没有单一的概念1NF,而且与更高的NF相同的是,它们都寻求更好的&#34;设计。
PS如果您认为这值得贬低,请发表评论,以便我可以在此框架内解决您的问题。解决收到的智慧和问题的问题某些教科书/演讲。