`

常见范式定义

 
阅读更多

据库表结构设计时,遵从一定的范式(NF,Noraml Form)可以减少数据冗余和操作异常。

第一范式(1NF)

1NF指的是每个属性值都是不可再分的。

满足1NF的关系被称为规范化的关系,1NF也是关系模式应具备的最起码的条件。

比如有这样一张表user的两列:

  • name
  • phone_number

phone_number这一列只存储一个电话号码,如果一条数据同时存储了住宅电话和手机号码,比如:“010-65576558,13765556765”,那么这个属性是可以再分的,违背了1NF。

第二范式(2NF)

2NF要求去除局部依赖。

也就是说,表中的属性完全依赖于全部主键,而不是部分主键。

比方说user表包含下面几列:

  • user_id
  • name
  • phone_number
  • job_id
  • job_description

其中job_description依赖于job_id,而不是全部主键(user_id,job_id),所以违背了2NF。这时可以把job部分单独抽取成一张job表,去除冗余。

第三范式(3NF)

3NF要求消除非主属性对候选键的传递依赖。

比如user表现在组成如下:

  • user_id
  • name
  • classification

仅有user_id是主键,用户姓名依赖于主键user_id,根据姓名name来给用户分类,而用户可能重名,因此name是允许重复的,再有用户分类classification依赖于用户姓名。这张表已经满足了2NF,即属性依赖于全部主键user_id,但是形成了从classification到非候选键name再到主键user_id的传递依赖,不符合3NF。

BC范式(BCNF)

3NF中只是排除了非主属性对候选键的传递依赖,于是更进一步,BCNF还要求消除主属性对候选键在内的传递依赖。

user表现在变成这样:

  • user_id
  • card_id
  • passport_id

其中护照号passport_id是主键,身份证号card_id和用户号user_id都是候选键,存在主属性passport_id到card_id再到候选键user_id的传递依赖。

第四范式(4NF)

4NF是要消除多值依赖。

在关系模式中,函数依赖不能表示属性值之间的一对多联系,这些属性之间有些虽然没有直接关系,但存在间接的关系,把没有直接联系、但有间接的联系称为多值依赖的数据依赖。

比如user表:

  • user_id
  • position
  • salary_level

user_id是主键,薪水等级salary_level看似被用户id直接确定,但其实薪水等级是根据职位position来确定的,和用户本身无直接关系,这就是多值依赖。

第五范式(5NF)、DK范式(DKNF)和第六范式(6NF)

5NF要求消除连接依赖,并且必须保证数据完整。多值依赖是连接依赖的特殊情况,定义稍复杂。这几种范式已经很少涉及。

在保证数据完整性基础上,通常达到3NF,有时达到2NF已经足够了,追求过高的NF级别会导致混乱的库表,大量的多表连接查询,性能低下。

 

转载自:http://raychase.iteye.com/blog/1797933

分享到:
评论

相关推荐

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

    常见的数据库设计范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。以下是对这些范式的详细介绍和实例分析。 一、第一范式(1NF) 第一范式(1NF)是数据库设计的基本要求,指数据库表的每一列都是...

    从0范式到3范式模型设计视频介绍

    0范式(0NF)通常被视为数据模型的起点,它并没有明确的规范定义,但在实际操作中,0范式通常指的是原始数据的无结构状态,数据以不可分割的整体存在,没有明确的字段划分。在0NF中,数据的冗余度高,可能引发数据不...

    Java面试中数据库三范式详解

    在 Java 面试中,数据库三范式是常见的考察点,本文将对三范式进行详细的解释,并以实例来讲解怎样将这些范式应用于实际工程。 一、第一范式(1NF) 第一范式的定义是:关系 R 中的每个属性都是不可分割的项。也...

    主析取范式

    其中,“主析取范式”是一种常见的规范化形式,它对于解决逻辑问题具有重要作用。 #### 二、命题逻辑基础 在进入主析取范式的讨论之前,我们需要了解一些关于命题逻辑的基础知识。命题逻辑是研究命题之间逻辑关系...

    C++ 提取主范式的程序

    6. **设计模式的应用**:如工厂模式、观察者模式等设计模式都是主范式的体现,它们提供了一种标准的方式来解决常见的设计问题,确保代码的结构清晰,职责明确。 7. **异常处理**:在C++中,异常处理是一种重要的...

    编程范式与OOP思想

    编程范式是一种编程风格,它定义了一套编程的基本结构和常见的做法,是程序员用来组织代码的一种思维方式。不同的编程语言支持不同的编程范式,每种编程范式都有其独特的应用场景和优势。 #### 二、主流编程范式...

    java 语言与其程序设计范式

    4. **泛型编程**:Java的泛型允许我们在定义类、接口和方法时使用类型参数,以实现参数化的类型。泛型提高了代码的类型安全性,减少了强制类型转换,并允许我们在运行时检查类型,从而避免了常见的编程错误。 5. **...

    数据库范式理解例题.doc

    常见的数据库范式有第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。 7. 第一范式(1NF) 第一范式是指关系数据库中每个属性值不可分割,且每个元组都有唯一的主键。 8. 第二范式(2NF) 第二范式是指关系...

    一些范式基础知识自己整理

    每个范式的定义都建立在其前一级别之上,并引入了更严格的规则。 - **第一范式(1NF)**: 每个表的每一列都必须是原子的,即不可再分割。 - **第二范式(2NF)**: 建立在1NF的基础上,要求表中的每一列都完全依赖于整个...

    设计范式最好的讲解 数工考试题中占比较重的分数

    在关系数据库中,常见的设计范式分为六个级别,从第一范式到第六范式(1NF至6NF),其中前三者最为常见: 1. **第一范式(1NF)** - **定义**:要求表中的每一列都是不可分割的数据项,即列不可再分解。 - **目标...

    数据库应用技术:关系数据库的规范化.pptx

    第二范式定义与实例:第二范式要求满足第一范式,并且非主键字段须依赖于主键,不能只依赖于主键的一部分。例如,上表中的“部门地址”取决于“部门名称”,是主键的一部分;这种关系叫部分函数依赖。 第三范式定义...

    12第12 章进一步规范化ⅱ:高级范式.pdf

    范式是衡量表结构合理性的标准,常见的有1NF(第一范式)、2NF(第二范式)、3NF(第三范式)、BCNF(博伊斯-科德范式)、4NF(第四范式)和5NF(第五范式)。 **高级范式** 高级范式,如4NF和5NF,旨在解决更复杂...

    【专讲】 数据库范式.docx

    下面详细介绍六个常见的数据库范式: ##### 第一范式 (1NF) - **定义**:确保表中的每个列都只包含不可再分的原子值。 - **目的**:避免列内数据的重复,确保每一列都是单一的实体。 - **示例**: - 不合规示例:...

    MLDN魔乐科技JAVA培训_Oracle课堂25_数据库设计范式 PowerDesigner工具.rar

    常见的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF),以及更高层次的BCNF(博科斯范式)和第四范式(4NF)等。 1NF要求数据库表的每一列都是不可分割的基本数据项,不允许有重复的单元格。2NF在1NF的...

    005 编程范式考察点.rarpython面试

    常见的编程范式有以下几种: 1. **过程式编程**:这是最早期的编程思想,主要关注步骤和指令的顺序执行。在Python中,函数和循环结构就是过程式编程的体现。例如,通过函数将一系列操作封装起来,通过循环实现重复...

    6-4 关系范式的概念,1NF 2NF1

    规范化通常按照一系列被称为范式的标准进行,其中1NF(第一范式)、2NF(第二范式)和3NF(第三范式)是最基础和常见的。 6.2.1 函数依赖(Function Dependency)是规范化理论的基础,它描述了一个属性或一组属性...

Global site tag (gtag.js) - Google Analytics