范式(上)-第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、可用关系模式

2024-06-18 21:52

本文主要是介绍范式(上)-第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、可用关系模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、范式的作用

根据关系模式间属性的数据依赖来评价关系模式的好坏

以下我们将基于函数依赖的范围内来讨论范式

二、范式的定义

1、数据依赖满足一定约束关系模式是范式

2、范式是符合某一级别的关系模式的集合,关系模式R为第几范式可记为R\in xNF

三、第一范式(1NF)

1、定义:

对于关系模式R,当且仅当R中的每个属性对应的域是原子的,则该关系模式R属于第一范式,即R\in 1NF

2、正面的例子:

有关系模式R,学生学号和课程编号共同组成R的主键

R(学生学号,课程编号,学生姓名,所在系,系主任,成绩)

每个属性对应的域都是原子的,满足第一范式的条件,因此关系模式R属于第一范式,即R\in 1NF

3、反面的例子

有关系模式R

R(学生学号,课程编号,学生姓名,所在系,系主任,成绩)

其所在系属性为复合属性或者其成绩属性为多值属性,则

该关系模式R不属于第一范式

4、分析

对于关系模式R:

R(学生学号,课程编号,学生姓名,所在系,系主任,成绩)属于第一范式,但是依旧存在着数据冗余、更新异常、数据不一致三个问题

四、 第二范式(2NF)

1、定义

对于关系模式R,当且仅当R\in 1NF,且R中的每一个非主属性都完全依赖于候选键时,该关系模式R属于第二范式,即R\in 2NF

2、反面例子

对于关系模式R:

R(学生学号,课程编号,学生姓名,所在系,系主任,成绩)

由于

所以

R\notin 2NF

2、正面例子

由于

 成绩完全依赖于候选键(学生学号,课程编号),而

学生姓名完全依赖于学生学号,所在系完全依赖于学生学号,系主任完全依赖于学生学号,

则将关系模式R分解为两个关系模式

R1(学生学号,课程编号,成绩)

R2 (学生学号,学生姓名,所在系,系主任)

则这两个关系模式均属于第二范式,即R1\in 2NFR2\in 2NF

消除了关系模式R中“非主属性对候选键的部分函数依赖”,解决了部分数据冗余问题部分数据更新异常问题

4、结论:

满足2NF的关系模式要比满足1NF的关系模式要好

五、第三范式(3NF)

1、定义

对于关系模式R,当且仅当R\in 2NF,且R中所有非主属性都不传递函数依赖于候选键时,该关

系模式R属于第三范式,记作 R\in 3NF

2、正面的例子

关系模式R(学生学号,课程编号,学生姓名,所在系,系主任,成绩)和

关系模式R1(学生学号,课程编号,成绩)都符合第三范式的条件,记为R\in 3NFR1\in 3NF

3、反面的例子

关系模式R2 (学生学号,学生姓名,所在系,系主任)中系主任传递函数依赖于学生学号

R2\notin 3NF

可通过将R2分解为

关系模式R3(学生学号,学生姓名,所在系)和

关系模式R4(所在系,系主任)

使得R3\in 3NFR4\in 3NF

消除了“非主属性对候选键”的传递函数依赖”,进一步消除了关系模式存在的数据冗余、更新异常和数据不一致问题

4、结论:

(1)满足3NF的关系模式要比满足2NF的关系模式要好

(2)3NF是一个可用的关系模式应该满足的最低范式要求

这篇关于范式(上)-第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、可用关系模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073160

相关文章

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大