数据库——关系数据的规范化:范式判断【知识点罗列+例题讲解】

本文主要是介绍数据库——关系数据的规范化:范式判断【知识点罗列+例题讲解】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

知识点罗列:

各种范式之间的关系

1.第一范式1NF:

如果关系模式R中所有的属性都具有原子性,均是不可再分的(一个属性不能再被分解成更小的数据单元),则称R属于第一范式,简称1NF,记作R∈1NF。

  • 关系模式中最基本具备的范式关系是1NF,也就是说任一关系模式均满足第一范式;
  • 第一范式具有大量的数据冗余,还会出现插入、删除和更新异常等弊端。解决该弊端的方法是利用投影运算将关系分解,去掉过于复杂的函数依赖关系,向更高级的范式转换。

2.第二范式2NF:

如果关系模式R∈1NF,且每个非主属性都完全函数依赖于R的主关系键,则称R属于第二范式,简称2NF,记作R∈2NF 。

  • 在第一范式中提到通过投影运算可以将关系模式转换到更高级的范式,因此,从1NF关系转换到2NF的方法就是:在1NF中消除非主属性对主关系键的部分函数依赖
  • 如果R的关系键为单属性,或R的全体属性均为主属性,则R∈2NF

3.第三范式3NF:

如果关系模式R∈2NF,且每个非主属性都不传递函数依赖于R的主关系键,则称R属于第三范式,简称3NF,记作R∈3NF。


4.关系模式规范化:

一个低一级范式的关系模式,通过模式分解转化为若干个高一级范式的关系模式的集合的过程。

  • 目的:使关系模式结构合理,消除存储异常,减少数据冗余,便于插入、删除和更新。
  • 基本原则:遵循“一事一地”的原则。
  • 规范化流程:

例题讲解:

该题有两个选项填空,第一个是候选码的求解,第二个是关系模式R的最高满足范式判断;

(1)该关系模式的候选码求解结果是:D、[AB、AC、AD]

详细的求解步骤可以参考我写过的一篇文章:http://t.csdnimg.cn/qt0vH

(2)基于该关系模式,这种题型一般只考虑1NF、2NF、3NF:

1NF是每个关系模式都具备的范式关系,只需要考虑2NF、3NF,而3NF是基于满足2NF的条件再去判断每个非主属性间是否是直接函数依赖,是就满足3NF,不是(即传递函数依赖)就不满足。

判断2NF

列出主属性(候选码)

列出非主属性(在关系模式R中非候选码的属性)
结合函数依赖集,判断非主属性是否完全依赖于主属性。也就是说判断主属性能不能推得出非主属性,同时主属性的真子集不能推出非主属性,这样才叫做完全依赖。

第一步:列出主属性——AB、AC、AD

第二步:列出非主属性——E

第三步:分别判断AB—>E?  判断AC—>E? 判断AD—>E?

已知F={AB→DE,AC→E,AD →B,B →C,C→D},

先看AB是否能够推得出E:

  • 在F中,我们发现只有AC→E,那么就需要看看能不能找到:AB→AC
  • F中有B →C,通过增广律,可以得到AB →AC
  • 因此AB →E。

看AC是否能够推得出E:

  • 显而易见,题目已经给出了,AC→E满足关系模式R的函数依赖集F,因此无需再去对其分析

看AD是否能够推得出E:

  • 依旧是根据F中的AC→E,那么就需要看看能不能找到:AD→AC
  • 首先先看F集中能推得出AC的,没有,那么就看看有没有能够间接推得出AC的
  • F中有B →C,那么通过增广律,可以得到AB →AC
  • 所以接下来就去看看能不能找到AD→AB
  • F中有AD →B,依旧是增广律,两边同时添加A,有多个相同的属性只取一个,所以AD →AB
  • AD →AB、AB →AC、AC→E,通过传递律我们可以证明AD→E
非主属性E对三个主属性都满足完全依赖关系,因此,关系模式R满足2NF

判断3NF:

在2NF的基础上,判断非主属性是否传递函数依赖于主属性。如果是则不满足,如果不是则满足。

先看AC→E:是直接函数依赖,题目F依旧给出

AB→E是否是传递函数依赖:

  • 回到2NF的判断过程,我们是通过AB →AC——AC→E,从而间接得到AB →E
  • 判断是否是传递函数依赖,就去判断AC能不能确定AB,AC能够确定AB就是直接函数依赖,不能确定AB就是传递函数依赖
  • 在F中,我们可以找到能够确定B的只有AD →B,通过增广律可以得到AD →AB,那么接下来就去判断AC是否能确定AD
  • 因为C→D,通过增广律,AC→AD,而AD →AB
  • 所以根据传递律,AC →AB。也就是说,E对AB是直接函数依赖

AD→E是否是传递函数依赖:

同理,按照上面的分析步骤,我们是通过

AD →AB——AB →AC——AC→E从而间接得到AD→E

  • 我们已经知道,AC →AB,那么就只需要判断,AB是否能够推得出AD
  • 在F中,我们可以找到能推得出AD的只有通过在C→D上使用增广律,AC→AD
  • 那么就请判断AB能否推得出AC,在F中依旧对B→C使用增广律,可得AB→AC
  • AB→AC,AC→AD,使用传递律,可以得到AB→AD。也就是说,E对AD是直接函数依赖
在满足2NF的情况下,非主属性E对三个主属性都满足直接函数依赖,因此可以得知关系模式R满足3NF

这篇关于数据库——关系数据的规范化:范式判断【知识点罗列+例题讲解】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/504545

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma