`
starecho
  • 浏览: 9368 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

数据库设计之“有时不得不违背的第三范式”(转)

阅读更多
在博客园上看到了一篇关于数据库范式的文章《数据库设计中的五个范式》:
第三范式规则查找以消除没有直接依赖于第一范式和第二范式形成的表的主键的属性。我们为没有与表的主键关联的所有信息建立了一张新表。每张新表保存了来自源表的信息和它们所依赖的主键。  
关于第三范式的思想,我想有很多朋友都熟悉,在数据库设计时,也是我们尽可能采用的范式之一,第三范式的出发点是什么?就是尽可能的减小“数据冗余”、并也能得到“数据”的整洁性,提高维护性,不容怀疑,第三范式是我们努力、必须要去遵从的。
然而,有很多朋友把第三范式作为“不死的法宝”,但其实在实际的应用中,我们还是要从不同的业务出发,要合理的应用“第三范式”。下面我也就简单的举个例子:
    一张订单会关联很多的基础资料,如:客户,付款条款,货运方式等,这些信息是有专门表进行维护的,在下订单时也是用下拉框选择的,在保存订单信息时,按照“第三范式”的要求,那应该只保存对应的主键值就OK了。因为这样可以避免数据冗余,但对我来说,我不会这样做,我会把客户的名称、联系电话、付款条款名称等订单上要求记录的信息直接COPY到订单的表中。
   这样看来,我们违背了“第三范式”,是的,但在这里,我们违背“第三范式”也是有理由的:
   1我不想在订单下达完以后,删除了某条付款条款,导致这些订单无法知道“真实的付款条款”了,这肯定不合理。
   2我也不想,因为下了这张订单了,而“严格控制”付款条款的“删除”功能,这也不合理,凭啥不能删除了?下个月这个“条款”确实永远不会采用了。
   3我也不想,付款条款修改后,导致以前所有采用此付款条款的订单都变成新的条款,那在系统中的订单如何与手头的纸张订单再对应,这肯定也不合理。

  所以,我的设计原则是,对于这种订单我们应该采用“隔离”的方式来对待,让基础数据COPY到订单中,这当然会违背所谓的“第三范式”,但这也是实际的需要啊。理论与实际是有差别的。
  订单--这种在现实中以实物的方式存在,实物具有与基础数据的参考性,而不是关联性,基础数据只能是作为订单这个实物的一个“参考”,而不是“关联”,这可以称为“独立性”;再者,订单具有一定的历史性,因为是实物,在实际的过程中,是即时生成的,那么在生成的当时去参考了基础数据,订单就在当时被确定,确对不能因为基础数据的修改而导致订单被“无辜变性”了,这也就是订单的“历史性”,当以后翻阅这些纸张订单时也能对应上系统里的订单。

   这是我所理解的最典型的例子,在实际的系统设计中,我们应该多思考一下,是不是要采用“第三范式”,不要再盲目追捧了。


本文来自CSDN博客http://blog.csdn.net/Secreter/archive/2009/06/23/4292211.aspx
分享到:
评论

相关推荐

    数据库设计的第一范式第二范式第三范式描述和实例

    数据库设计的第一范式第二范式第三范式描述和实例 数据库设计的范式是指数据库设计时需要遵循的一些基本规则,以确保数据库的结构清晰、简洁、高效。常见的数据库设计范式包括第一范式(1NF)、第二范式(2NF)、第...

    数据库三大范式详解

    目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多...

    数据库设计三范式

    尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍。 在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手

    数据库设计三大范式应用实例剖析

    数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,...第三范式:在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。

    数据库设计范式最好的讲解

    目前关系数据库有六种设计范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。每种范式都有其特点和应用场景,关系数据库的设计需要根据实际情况选择...

    数据库范式理解例题数据库范式理解例题.doc

    其中包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等。 第一范式(1NF) 第一范式是最基本的数据库设计规范,它要求每个表中的每一行都具有唯一的值,且每个字段都不可分割。换言之,每个表中的每一行都...

    数据库设计范式数据库设计范式

    目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多...

    数据库设计三大范式

    介绍数据库设计基本的三大范式,简练透彻的立即数据库设计的范式。

    SQL 第三范式 规范化设计数据库范例 数据库设计示例

    SQL 第三范式 规范化设计数据库范例 数据库设计示例 本资源摘要信息将围绕 SQL 第三范式规范化设计数据库范例进行详细的解释和分析,从标题、描述、标签和部分内容中提炼出相关的知识点。 标题和描述解释 本资源...

    数据库设计第三范式详解

    在众多的规范化理论中,第三范式(3NF)是数据库设计中的一个重要概念,它有助于消除数据冗余,提高数据一致性,降低更新异常,从而优化数据库性能。本文将深入探讨第三范式,并通过具体的案例分析来帮助理解其应用...

    05-数据库设计三范式1

    总结来说,数据库设计三范式中的第一范式和第二范式是构建高效、稳定数据库结构的基础。它们帮助我们避免数据冗余,减少更新异常,提高数据一致性,并使得数据库设计更加规范。在实际的数据库设计过程中,理解和应用...

    关系型数据库设计范式

    3. 第三范式(3NF):3NF要求所有非主属性既不部分依赖也不传递依赖于候选键。以S1表为例,学号SNO决定了其他属性,但地点LOCATION依赖于系名DNAME,而DNAME依赖于系号DNO,形成了传递依赖。为消除这种依赖,可以将...

    数据库范式【转】

    数据库范式通常有三种:第一范式、第二范式和第三范式。下面将对每种范式进行详细的介绍。 第一范式 第一范式是最基本的范式,它要求关系模式 R 中所有属性的值域都是单纯域。也就是说,每个列都只能包含单个值,不...

    什么是数据库范式?什么是设计范式?

    这些规则以不同的级别存在,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF),还有更高层次的第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。 1. 第一范式(1NF): 1NF 是最基本的要求,它规定数据库...

    数据库设计模式范式简介

    接着,第三范式(3NF)进一步要求,表中的任何非主键列不能直接或间接地依赖于其他非主键列,即属性独立性。如果一个表中有员工编号、部门编号、员工工资等信息,而工资的计算可能依赖于部门的工资级别,那么部门的...

    数据库设计三大范式.pdf

    数据库设计是信息系统构建的核心环节,其中的三大范式——第一范式、第二范式和第三范式,是确保数据规范化和避免数据冗余的关键原则。这些范式是根据关系数据库理论建立的,目的是提高数据库的逻辑独立性和减少数据...

    关系数据库设计范式培训

    3. 第三范式(3NF):在满足2NF的前提下,3NF要求任何非主属性都不传递依赖于主键。这意味着没有一个非主属性可以通过其他非主属性间接依赖于主键。例如,如果一个表中"学生姓名"和"课程号"决定了"成绩",但"成绩"并...

    数据库设计需要遵守的范式规则

    范式是衡量数据库结构合理性和优化程度的重要标准,通常包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)以及第四范式(4NF)。这些范式旨在减少数据冗余、消除异常并确保数据的一致性,但在...

Global site tag (gtag.js) - Google Analytics