范式(上)-第一范式(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

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素