浅析数据库设计三范式

盘点天才少年稚晖君彭志辉的知识体系 一个杰出工程师的工作区间和装备 阅读详情

   在学习数据设计的时候,N种专业术语,看的头疼。但又不能不学,所以只好把它们整理整理出来,好让自己对它们有一个更深的理解。特别是对三范式(Normal Formal)的理解。


    三范式指的是第一(1NF)、第二(2NF)和第三范式(3NF),其作用:解决数据冗余,为数据有效性检查,提高存储效率考虑。  


     在了解三范式之前,我们先来弄清楚这几个概念(键、函数依赖以及其类型): 

一、关键码(键):由一个或多个属性组成,在实际使用中,有下列几种:

  • 超键:在关系中能唯一标识元组的属性集称为关系模式的超键。注意:(属性集,说明可以是多个)
  • 候选键:不含有多余属性的超键
  • 主键:用户选作记录标识的候选键

 这三个的关系,用数学关系可以做如下表示:

举例:一张学生信息表


问:超键是?

   答曰:学号唯一,是超键;姓名唯一,是超键;(学号,年龄)唯一,是超键;(学号、姓名、年龄)唯一,也是超键。

——从这里我们就可以看出,超键的组合是唯一的,但不可能是最小唯一的。


问:候选键是?

    答曰:学号,唯一且没有多余的属性;姓名,唯一且没有多余的属性。


问:主键是?

     答曰:既可以选择学号,也可以选择姓名(前提是规定没有重名的)作为主键,所以主键是选中的一个候选键。

 

    数据库设计的目的主要是为了解决数据冗余,对数据进行有效的管理。那么引起数据冗余的主要原因是什么呢?答曰:数据依赖。什么是数据依赖?数据依赖是指在一个关系模式之间的依赖关系。其最典型的例子就是函数依赖。


二、函数依赖:若对于R(U)的任意两个可能的关系r1、r2,若r1[x]=r2[x],则r1[y]=r2[y],或者若r1[x]不等于r2[x],则r1[y]不等于r2[y],称X决定Y,或者Y依赖X。


   通俗的说:就是我们知道一个之后可以推导出另外一个。

 

我们都知道,在数据库中,属性之间都是会发生联系。例如,每个学生只有一个姓名,每门课程只有一个任课教师,每个学生学一门课程只能有一个总评成绩。等等,这类联系,我们都可以将其称为函数依赖(FD),所以没必要把这概念弄的那么玄乎。


函数依赖包括以下三种类型:


     1.平凡与非平凡依赖: 

a.平凡依赖

b.非平凡依赖


     2.局部依赖与完全依赖: 


a局部依赖

b.完全依赖

 

图上中:对于W—>A ,如果在X存在与W中,有X—>A成立,那么称W—>A是局部依赖,否则称W—>A是完全依赖。


      3.传递依赖:

如图: X—>Y,Y—>A,且Y/>X和A不属于Y,那么称X—>A是传递依赖。


最后、三范式的理解: 


 第一范式:要求每个关系的属性为原子性,不可再分。(能分就分,分到不能再分为止!)


例如:R(学号,姓名,性别)


 第二范式:主要是消除局部依赖


            违反第二范式的局部依赖示意图:


例如:有关系模式为:R(学号、课程编号、成绩、教师号、教师职称)等。


R上有两个FD:(学号,课程号)—>(教师号,教师职称)和 课程编号—>(教师工号,教师职称)。由此,可得出前面一个是局部依赖。所以R关系模式不是第二范式模式。此时R的关系就会出现冗余和异常现象。例如,如果一门课程有10个学生选修,那么在关系中就存有10条记录,教师工号和职称也会重复10次。  


解决方案:将R分解成R1(课程编号,教师号,教师职称)和R2(学号,课程号,成绩)。此时,R1和R2都是第二范式模式。

 

 第三范式:主要是消除传递依赖  

 

(1)

(2)


(3)

违反3NF的三种传递依赖情示意图


例如:R(课程编号,教师工号,教师职称)关系模式中,如果课程编号—>教师工号,教师工号—>教师职称,那么课程编号—>教师职称就是一个传递依赖。所以不是第三范式。此时R就会出现冗余和异常操作。例如,一个教师开设五门课程,那么关系中就会出现五条记录,教师职称就会重复五次。

 

解决方案:把R分解为R1(教师工号,教师职称)和R2(课程编号,教师工号)  


我们在学习的过程当中,第一次可能只是懵懵懂懂,这很正常。所以不要觉得有什么?放宽心态,踏实的往下学就可以了。随着再往后的学习中,我们会对前面的学习进行一个不断反复的过程,但那时候我们可以在前面的基础上,对他们进行深入的研究。 

从零解析:富斯i6遥控器与STM32的IBUS协议通信实战 本文详细解析了富斯i6遥控器与STM32通过IBUS协议通信的实战指南,涵盖硬件准备、协议解析、驱动实现及常见问题解决。特别适合机器人及智能小车开发者,提供低成本、高可靠性的无线控制方案,助力快速实现多通道控制功能。 阅读详情

相关推荐

信息系统项目管理师(高项)重点!

学习高项自己做的笔记

PanJWei的博客 3302

数据库的部分依赖,完全依赖,传递依赖以及三种范式

部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。 举个例子:通过AB能得出C,通过A也能得出C,通过B也能得出C,那么说C部分依赖于AB。 完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。 举个例子:通过AB能得出C,但是AB单独得不出C,那么

凉风有信 9万+

基于IC动态加权的机器学习多因子选股策略:从模型融合到实战回测

在量化投资领域,多因子选股模型通过挖掘市场数据中的有效信号来预测股票收益。其核心原理在于利用统计学与机器学习算法,从海量因子中识别出与未来收益具有稳定相关性的特征。这一技术的核心价值在于将主观投资决策转化为系统化、可重复的客观过程,从而在控制风险的前提下追求超额收益。其典型应用场景包括股票阿尔法策略构建、Smart Beta产品设计以及资产配置中的股票筛选环节。本文聚焦于如何通过信息系数(IC)这一关键指标,动态融合Ridge回归、MLP神经网络和随机森林等多个预测模型,构建一个能够自适应市场风格轮动的选股

weixin_34216614的博客 455

Matlab实现分布式光伏储能系统优化配置方法

光伏储能系统作为新能源发电的重要基础设施,其优化配置直接影响发电效率和经济效益。系统建模需要综合考虑光伏阵列的单二极管模型和储能电池的Thevenin等效电路模型,通过粒子群优化(PSO)等算法求解最优容量配置。Matlab凭借其强大的矩阵运算能力和优化工具箱,成为实现这类非线性规划问题的理想平台,特别适合处理包含功率平衡约束、SOC限制等复杂条件的工程优化问题。在新能源并网和微电网等应用场景中,这种基于模型预测控制的优化方法能显著提升系统经济性和可靠性。

ithome 475

万达电影 com.wandafilm.app headers check

万达电影 安卓逆向 抓包 逆向 check

weixin_43786514的博客 1438

Qt 5.15.2静态编译避坑实录:MinGW 32位版从源码到Creator配置的全流程踩坑总结

本文详细介绍了Qt 5.15.2 MinGW 32位版本的静态编译全流程,包括环境准备、配置参数优化、编译过程监控及安装后配置。重点解决了静态编译中的常见问题,如参数顺序敏感、路径引号问题等,并提供了性能对比实测数据,帮助开发者高效完成静态编译。

weixin_26749245的博客 271

1NF,2NF,3NF,BCNF,4NF

近期在学习数据库范式,这很是让博主纠结了一阵呢,所以简单总结一下,奉上一点案例分析,与您分享~ 一、概念 R-关系模式 r-关系 U-属性集 FD-函数依赖 X→Y:“X函数决定Y”,“Y函数依赖于X”。 A⊆B   A包含于B,A小,B大,B→A 元组:二维表中的行 属性:二维表中的列 超键:能唯一标识元祖的属性集 候选键:不含多余属性的超建 主键:用户选作元组标识的候选键 外键:对于当前模式而言,是另一模式下的主键。 主属性:构成候选键的属性 局部依赖与完全依赖:对于FD W→A,如

rouge123的博客 516

NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化

本文介绍了在项目开发中实现坐标转换的方法,重点解析了两个关键函数UF_MTX4_csys_to_csys和UF_MTX4_vec3_multiply的使用。通过4个变换矩阵(transform1-4)实现工作坐标系与绝对坐标系之间的相互转换,并以圆柱体为例详细说明了坐标转换的具体实现过程,包括原点、X/Y轴方向的转换处理。相比之前采用的if-else判断方法,这种矩阵转换方式在代码复杂度和运行效率上都更具优势。

weixin_47753171的博客 600

数据库的三大范式

概念首先规范化是为了解决什么问题? 用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题插入异常 删除异常 更新异常 数据冗余函数依赖: 若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。也就是说 X 与 Y一一对应的

请叫我王老魔 959

信号检测算法的MATLAB仿真:能量检测、循环平稳检测和匹配滤波检测

根据具体的应用场景和要求,选择合适的信号检测算法可以提高系统的性能和可靠性。在无线电通信中,信号检测是一项重要的任务,它用于检测和识别接收到的信号。在本文中,我们将介绍三种常用的信号检测算法:能量检测、循环平稳检测和匹配滤波检测,并提供相应的MATLAB源代码进行仿真实现。在上述代码中,我们首先设置了能量检测的阈值,然后生成了一个包含1000个服从正态分布的随机信号样本的信号。在上述代码中,我们首先设置了信号模板,然后生成了一个包含信号模板的信号样本。最后,通过比较相关性的最大值与阈值来判断信号是否存在。

PixelLancer的博客 1363

73、结合无人机进行rk3588oak-lite跟踪目标物体进行识别、跟踪

搭建仿真转换模型环境,主要python版本和我下载的rknn2的版本。截取shape节点,输出模型。so库也要对应转模型的whl。其中安装的whl版本。

sxj731533730 1625

2021-10-24 Express面试题

1、如何通过NodeJS开发一个服务端应用? 使用nodejs的http内建模块开发 const http = require(“http”) const server = http.createServer() server.listen(3000, err=> console.log(“服务启动了”)) 2、如何使用Express开发一个服务端模块化应用? Express是一个基于NodeJS实现的web应用开发框架,通过自己的路由机制完成模块化开发,根据功能或者角色或者其他依据,将模块进行拆分,

qq_45272615的博客 3486

OpenSpec 完全指南 config.yaml文件

不管是项目内还是全局存放,自定义工作流都要遵守以下规则,否则会导致OpenSpec无法识别,新手一定要记牢:一个文件夹 = 一个工作流:工作流文件夹的名称,就是中schema字段要填写的名称;每个工作流文件夹必须包含:这是工作流的核心定义文件,没有它,OpenSpec无法识别这个工作流;模板文件统一放templates/目录:如果需要自定义生成文件的模板(比如统一的提案模板、任务模板),就放在工作流文件夹下的templates/里,OpenSpec会自动识别;

h a 6 6 6 c k 为 你解决复杂难题! 1428

三范式浅析

引言 关系型数据库是现在广泛应用的数据库类型,对关系型数据库的设计就是对数据进行组织化和结构化的过程。对于小规模的数据库我们处理起来还是比较轻松地,但是随着数据库规模的扩大我们将发现用户操控数据库的SQL语句将变得笨拙、复杂。更糟糕的是很有可能导致数据不完整,不准确。所以我们有必要将数据设计的更加符合规范。 怎样使我们的数据库更加规范呢,前人总结了三个范式(其实一共有五个,但是一般的数

王小健专栏 473

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

浅析三范式

从学习数据库到现在已经有一年的时间了,期间也建过2个数据库。数据库的使用是有所深入了,但建表的时候是不是真的从三范式角度思考了,并且知道这么建的理由。现在开始开发项目,大家一起来分析需求,当讨论到这些数据应该怎样建表的时候,大家的“感觉”所占比重很大。这样开发也没什么大问题,但系统健壮吗? 一、意义         数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结

遇见更好的自己 1418

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【数据库设计】范式基础 第一范式、第二范式、第三范式、BC范式

在写这篇博文之前,我想抛开那些晦涩的官方的定义,用通俗的话来说一下范式,因为我觉得那些苦涩难懂,并且,我们也没有必要将它们完全记住。下面先来简单的看一下范式的描述。Normal Form前言在数据库设计的关系模式设计中,缺少范式,经常会使我们的表出现插入异常,删除异常,添加异常和代码冗余。范式的出现正是为了解决这一问题。这是范式作用的通俗解释。然后我们来看一下范式的定义:符合某一种级别的关系模式的集

小辣抓 2044

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

浅析数据库设计三大范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。                 在实际开发中最为常见的设计范式有三个:1.第一范式(确保每列保持原子性)第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式...

gaozongjian的博客 252

Mysql学习记录 - 浅析三范式

目前关系性数据库一共有6种范式 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) 第BC范式(BCNF,也称巴斯-科德范式) 第四范式(4NF) 第五范式(5NF,也称完美范式) 通常我们设计关系型数据库的时候,满足3NF,最多满足BC范式就够了。这六级范式遵循向下包含的原则,比如符合2NF的关系模式,必定符合1NF 满足范式规定的数据库有哪些优点? 表结构简洁、明晰,在以后应用的过程中insert、delete、update等操作不会发生异常 解决数据冗余的问题,减少磁盘空

大后生大大大的博客 523

new Blob() 的 type 参数:MIME 类型填错导致文件打不开的真相

MIME 类型是 Web 与操作系统间识别文件格式的通用语言,它决定浏览器如何处理数据、系统用哪个程序打开文件、以及应用能否正确解析内容。其本质是 type/subtype 结构(如 text/csv、application/pdf),需严格匹配标准规范(IANA/RFC)、浏览器解析逻辑和目标软件注册类型。前端使用 new Blob() 时,type 不仅影响下载行为,更直接关联中文编码(charset=utf-8)、二进制完整性(禁用 charset)、专业格式兼容性(如 OFD、DICOM、SHP)等

weixin_34082789的博客 328
上一篇: 可是笑声太响了的64391111
下一篇: 童年的飞秋大门已徐徐向我关闭
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值