`
javawebsoa
  • 浏览: 425419 次
社区版块
存档分类
最新评论

数据库范式与数据库设计

 
阅读更多

1、数据库范式:
第1范式:属性必须是原子的,不可分的。从实体的角度看就是实体属性的类型只能是基本数据类型,不能是复合数据类型。这一条对于关系数据库来说很容易满足,但对于面向对象数据库来说就不一定了。而且需要特别注意的是数据库范式的考察必须与具体的需求相关,也就是属性的原子性不是绝对的,而是相对于需求的。比如对于学生表(学号,姓名,学校),对于学校这个属性而言,如果我们不需要更进一步的考察,那么学校属性就是原子的,如果需要进一步分解学校这个属性,比如为学校(学校编号,校名,成立日期),那么学校属性就是非原子的。

第2范式:非主属性a不能部分依赖于侯选键R。如果非主属性a部分依赖于侯选键R,则说明这个非主属性和其依赖的主属性集合A(A是R的真子集)在这张表中存在行上的数据重复。比如用户角色关系表(用户ID,角色ID,角色名称),其中(用户ID,角色ID)为侯选键,角色名称依赖于角色ID,就是一种部分依赖,这种设计有4个问题:
1) 是数据存储冗余:在这张表中角色ID和角色姓名存在大量的存储冗余(比如一个角色对应N个用户,则角色名称需要重复存N次).
2)是更新异常:如果某一行的角色姓名被修改,就必须同时更新所有对应角色ID的角色姓名,不能仅仅只更新侯选键所在的行;
3)插入异常:如果新增加一个角色,由于没有选课,则无法录入;
4)删除异常:同样的,如果用户角色关系删除后就可能导致角色信息业被删除;
为了避免上述问题,则可以增加一张表2(角色ID,角色姓名),将用户角色关系表改为(用户ID,角色ID),就可以消除用户角色关系表中的部分依赖,从而减少数据冗余和异常操作问题。虽然增加一个主键列关系ID,可以消除这种部分依赖,但并不能解决问题的实质:存储冗余和操作异常.
第3范式:在第二范式的基础上,属性不能依赖于其它非主属性。如果一个属性依赖于其它非主属性,一样会存在范式2中所说的几个问题,解决办法同范式2。
BCNF(鲍依斯-科得范式):若关系模式是第一范式,且每个属性都不传递依赖于关系模式的候选键.很容易证明该范式满足第2范式,因为如果有非主属性a部分依赖于侯选键R1(候选键R),则很容易得出R->R1->a,即a传递依赖于R,与定义不符合。 同样也可以证明BCNF满足第3范式,因为一个属性如果依赖于其它非主属性,则必然传递依赖于其候选键。其实BCNF表达的是一个关系模式中,任何属性都只能直接依赖于候选键,从消除了主属性对候选键的传递依赖,在第3范式并没有限制主属性不能能依赖于其它主属性。

从上面的范式可以看出,提出范式的根本目的是消除冗余和各种操作异常。但在实际中,并不能会完全满足上述范式,一是出于性能的考虑,通过冗余一定的数据来换取性能上优势或者程序编写上的便利。这种例子比较多,但需要注意的是,冗余的这些数据一般是不需要改动,或者改动非常少的,或者一致性要求可以忽略,而且不会带来操作异常中的插入和删除异常问题,比如订单明细表(订单号,明细序号,产品编码,产品名称)和产品信息表(产品编码,产品名称)还是会有两张表,这种冗余就不会产生插入和删除异常,而且一般产品信息表中的产品名称修改的可能性比较小,订单明细中的产品名称不会修改,更新异常不会太严重,因此这种冗余是可以的,影响就非常小;另外一种情况是根据业务必须冗余的,非常典型的就是带有法律意义的有价证券的设计上,比如合同如果涉及到产品,为了电子版和纸质版一致,那么产品名称和产品ID就都需要保存(当然,在产品一旦使用就不能修改名称的情况下,这种保存就没必要,这里只是为了举例).还有一种情况就是看起来是不符合范式,但实际上并不违背范式,这主要是一些模板性基础表和业务表之间的冗余。(以上举例中的表设计仅仅是为了举例,不是必然的,在不同的要求下,情况会不一样)。

分享到:
评论

相关推荐

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

    数据库范式是relation database设计中的一种规范,旨在确保数据库的结构正确性和数据的一致性。其中包括第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等。 第一范式(1NF) 第一范式是最基本的数据库设计...

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

    "数据库设计范式的重要性" database设计范式是关系数据库的基础规范,关系数据库的设计必须遵循这些规范,否则将会导致数据库设计混乱、数据冗余、查询效率低下等问题。本文将详细介绍数据库设计范式的概念、类型和...

    数据库范式.pdf

    数据库范式是关系数据库的设计理论,旨在消除数据冗余,提高数据的一致性和可管理性。范式是一个升级的过程,每个上层的模式都是建立在下一级范式之上的。消除数据冗余的影响包括:减少物理空间的存储需求、数据变得...

    数据库范式理解例题.doc

    数据库范式是关系数据库设计中的一种规范约束规则,用于确保数据库的逻辑一致性和数据的完整性。下面是对数据库范式的理解和例题: 1. 属性的分类: 在关系数据库中,属性可以分为主属性和非主属性。主属性是包含...

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

    数据库范式是关系型数据库设计中的核心理论,它是一组规则,用来指导如何构建和组织数据库,以确保数据的一致性、减少冗余并避免数据异常。这些规则以不同的级别存在,即第一范式(1NF)、第二范式(2NF)、第三范式...

    数据库三大范式详解

    数据库范式1NF 2NF 3NF BCNF(实例) 设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系...

    数据库设计的基础-数据库范式

    数据库设计的基础——数据库范式

    数据库范式

    设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式...

    数据库系统范式教程数据库系统范式教程.ppt

    数据库系统范式是数据库系统设计的基础,它们是关系数据库设计的标准,旨在解决数据冗余、更新异常、插入异常和删除异常等问题。 1.1 数据库系统原理 数据库系统设计的主要目标是解决数据依赖对关系数据库的影响...

    数据库范式理论

    数据库系统概论数据库范式理论。数据库范式理论

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

    数据库设计三大范式应用实例剖析 数据库设计是软件开发中的一个重要步骤,它直接关系到软件系统的性能和可维护性。数据库设计的质量如何?关键就在于是否满足数据库设计的范式。数据库设计范式是数据库设计所需要...

    数据库范式讲解

    数据库范式讲解

    Oracle学习笔记(数据库设计范式 PowerDesigner工具)

    Oracle学习笔记(数据库设计范式 PowerDesigner工具),有具体的代码案例

    数据库设计三范式

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

    数据库范式化教程 - 订单数据实例速成.pdf

    数据库范式化是数据库设计中保证数据关系清晰、降低数据冗余和提高数据一致性的过程。根据文档内容,本教程将简明扼要地介绍范式化的概念,并通过订单数据实例进行阐释。以下是基于文档内容的知识点梳理。 首先,...

    关系型数据库设计范式

    关系型数据库设计范式是数据库设计的核心原则,用于确保数据的一致性、减少冗余和避免数据异常。在设计数据库时,遵循这些范式能够提高数据的组织效率和查询性能,降低维护成本。以下是四种主要的范式以及它们的解释...

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

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

    关系数据库设计范式培训

    关系数据库设计范式是数据库设计中的核心概念,用于确保数据的规范化和高效存储。以下是关于关系数据库设计范式的详细介绍: 1. 第一范式(1NF):这是最基本的要求,规定数据库表中的每一列(属性)都必须是不可再...

Global site tag (gtag.js) - Google Analytics