数据库范式(1NF 2NF 3NF BCNF)详解二

数据库范式简单讲解(1NF、2NF、3NF、4NF、BCNF)     近期在学习数据库范式,这很是让博主纠结了一阵呢,所以简单总结一下,奉上一点案例分析,与您分享~   一、概念        R-关系模式      r-关系      U-属性集      FD-函数依赖      X→Y:"X函数决定Y","Y函数依赖于X"。      A⊆B   A包含于B,A小,B大,B→A        元组:二维表中的行      属性:... 阅读详情

范式应用

 

我们来逐步搞定一个论坛的数据库,有如下信息:

 

(1) 用户:用户名,email,主页,电话,联系地址

 

(2) 帖子:发帖标题,发帖内容,回复标题,回复内容

 

第一次我们将数据库设计为仅仅存在表:

 

用户名 email 主页 电话 联系地址 发帖标题 发帖内容 回复标题 回复内容

 

这个数据库表符合第一范式,但是没有任何一组候选关键字能决定数据库表的整行,唯一的关键字段用户名也不能完全决定整个元组。我们需要增加"发帖ID"、"回复ID"字段,即将表修改为:

 

用户名 email 主页 电话 联系地址 发帖ID 发帖标题 发帖内容 回复ID 回复标题 回复内容

 

这样数据表中的关键字(用户名,发帖ID,回复ID)能决定整行:

 

(用户名,发帖ID,回复ID) → (email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容)

 

但是,这样的设计不符合第二范式,因为存在如下决定关系:

 

(用户名) → (email,主页,电话,联系地址)

 

(发帖ID) → (发帖标题,发帖内容)

 

(回复ID) → (回复标题,回复内容)

 

即非关键字段部分函数依赖于候选关键字段,很明显,这个设计会导致大量的数据冗余和操作异常。

 

我们将数据库表分解为(带下划线的为关键字):

 

(1) 用户信息:用户名,email,主页,电话,联系地址

 

(2) 帖子信息:发帖ID,标题,内容

 

(3) 回复信息:回复ID,标题,内容

 

(4) 发贴:用户名,发帖ID

 

(5) 回复:发帖ID,回复ID

 

这样的设计是满足第1、2、3范式和BCNF范式要求的,但是这样的设计是不是最好的呢?

 

不一定。

 

观察可知,第4项"发帖"中的"用户名"和"发帖ID"之间是1:N的关系,因此我们可以把"发帖"合并到第2项的"帖子信息"中;第5项"回复"中的"发帖ID"和"回复ID"之间也是1:N的关系,因此我们可以把"回复"合并到第3项的"回复信息"中。这样可以一定量地减少数据冗余,新的设计为:

 

(1) 用户信息:用户名,email,主页,电话,联系地址

 

(2) 帖子信息:用户名,发帖ID,标题,内容

 

(3) 回复信息:发帖ID,回复ID,标题,内容

 

数据库表1显然满足所有范式的要求;

 

数据库表2中存在非关键字段"标题"、"内容"对关键字段"发帖ID"的部分函数依赖,即不满足第二范式的要求,但是这一设计并不会导致数据冗余和操作异常;

 

数据库表3中也存在非关键字段"标题"、"内容"对关键字段"回复ID"的部分函数依赖,也不满足第二范式的要求,但是与数据库表2相似,这一设计也不会导致数据冗余和操作异常。

 

由此可以看出,并不一定要强行满足范式的要求,对于1:N关系,当1的一边合并到N的那边后,N的那边就不再满足第二范式了,但是这种设计反而比较好!

 

对于M:N的关系,不能将M一边或N一边合并到另一边去,这样会导致不符合范式要求,同时导致操作异常和数据冗余。

对于1:1的关系,我们可以将左边的1或者右边的1合并到另一边去,设计导致不符合范式要求,但是并不会导致操作异常和数据冗余。

 

结论

 

满足范式要求的数据库设计是结构清晰的,同时可避免数据冗余和操作异常。这并意味着不符合范式要求的设计一定是错误的,在数据库表中存在1:1或1:N关系这种较特殊的情况下,合并导致的不符合范式要求反而是合理的。

 

在我们设计数据库的时候,一定要时刻考虑范式的要求。

11第11 章进一步规范化ⅰ:1nf 、2nf 、3nf 和bcnf.pdf 立即下载

相关推荐

西门子PLC与汇川SV660P伺服速度模式配置实战指南

本文详细介绍了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的配置实战指南。从硬件接线、伺服参数配置到TIA Portal软件组态和PLC程序编写,提供了全面的操作步骤和实用技巧,帮助工程师快速解决伺服系统调试中的常见问题,确保系统稳定运行。

weixin_30316097的博客 500

近几年的开发经验:数据库设计中三大范式应用场景解析

【引言】 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。   设计范式是不是很难懂呢?非也,大学教材上给我们一堆数学公式我们当然看不懂,也记不住。所以我们很多人就根本不

机场信息系统研究员的专栏 2038

技术指南| 叶绿体基因组高级分析全流程解析

本文详细解析了叶绿体基因组高级分析的全流程,包括实验设计、序列组装与注释、比较基因组分析、选择压力与功能进化等关键步骤。通过实战案例和技术技巧,帮助研究者掌握叶绿体基因组分析的核心方法,提升植物进化研究和系统学分析的效率与准确性。

weixin_33725239的博客 491

百度笔试题--论坛数据库表设计

转载地址:http://blog.sina.com.cn/s/blog_542a862901000cbq.html 二、 一个简单的论坛系统,以数据库储存如下数据:   用户名,email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容。   每天论坛访问量300万左右,更新帖子10万左右。   请给出数据库表结构设计,并结合范式简要说明设计思路。

llwan的专栏 1万+

H3C VRF实验

POP-vpn-instance-RT1]route-distinguisher 11:11 # VPN实例-RT1的路由区分器值11:11。配置路由泄露,其实就是在一个VPN示例中添加另一个VPN实例的下一跳,比如在VPN实例RT1中添加去往SRV的默认路由。但是也有了一个新的问题,那就是RT1、RT2和RT3也能互访了,这让VPN实例变得没有意义了。[POP]ip vpn-instance RT1 #配置vpn实例-RT1。绑定了VPN实例,所以要把路由添加到VPN实例POP中。

m0_68698993的博客 4023

Kill5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题

Kill5-5.37版本下,使用ARMcomplier6编译__asm 函数报错的问题 问题简要描述: 昨日更新了keil5软件的版本,从5.17更新到了5.37版本,然后编译STM32项目文件时,软件提示编译报错。报错问题如下: Build started: Project: QKsoftware *** Using Compiler 'V6.18', folder: 'E:\MDK-ARM\ARM\ARM\ARMCLANG\Bin' Build target 'QKsoftware' compiling

weixin_43644424的博客 1万+

论坛设计

问题的引出 一个简单的论坛系统,以数据库储存如下数据: 用户名,email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容。 每天论坛访问量300万左右,更新帖子10万左右。 请给出数据库表结构设计,并结合范式简要说明设计思路。 只是对问题的一点总结和自己的一些看法,原问题的论坛链接http://www.iteye.com/topic/364016,一个方案http:

胜利者的经验并不复杂,那就是寻找人生的关键点,并在关键时刻竭尽全力 2353

Vitis开发环境下的双核ARM通信:Hello World背后的AMP架构解析

本文深入解析了Vitis开发环境下ZYNQ双核ARM Cortex-A9处理器的AMP架构与通信机制。通过详细的硬件配置、内存分配和核间通信实现步骤,展示了如何构建高效的双核Hello World系统,为嵌入式系统开发者提供了实用的开发指南和性能优化技巧。

weixin_29162439的博客 218

百度07在线笔试

一、 一个文本文档有多行,每行为一个URL。请编写代码,统计出URL中的文档名及出现次数。   a) 文档名不包括域名、路径和URL参数,例如http://www.rs.com/n.op/q/rs?id=1中的文档名是rs。   b) 部分URL可能没有文档名,例如http://www.abc.com/,这类统计为“空文档名”。   c) 出现在不同URL中的相同文档名视为同一文档名,例如http...

yjyj001的专栏 293

量化交易中的烂板策略:短线高频交易实战解析

量化交易通过算法模型实现自动化投资决策,其中短线高频交易是典型应用场景。从市场微观结构看,涨停板现象反映了资金博弈的动态平衡,而烂板策略正是捕捉涨停板短暂打开时的交易机会。该策略结合L2行情数据和Python量化框架,通过参数化规则识别特定形态的烂板股票,在风险可控前提下追求超额收益。实战中需严格遵循动态仓位管理和止损纪律,适用于A股市场短线交易。高频交易与量化分析技术的结合,为投资者提供了新的alpha挖掘工具。

weixin_30432579的博客 364

cuRobo 入门教程(一)基于CUDA的机器人运动规划加速库

cuRobo是一款基于CUDA加速的机器人算法库,提供运动学计算、碰撞检测、轨迹优化等功能。该库采用并行优化技术,在GPU上实现高效运算,比现有方案快60倍。cuRobo支持多种机器人模型和环境表示,包含正向/逆向运动学、无碰撞轨迹生成、模型预测控制等核心算法,并可与IsaacSim等仿真平台集成。其特点包括:1) 支持多种碰撞检测方式(长方体/网格/深度图像);2) 提供批量环境处理和实时世界更新;3) 通过CUDA Graphs加速优化迭代;4) 在Jetson Orin等平台实现毫秒级运动规划。安装支

2506_90492529的博客 1924

数据库范式(1NF 2NF 3NF BCNF)详解二

范式应用   我们来逐步搞定一个论坛的数据库,有如下信息:   (1) 用户:用户名,email,主页,电话,联系地址   (2) 帖子:发帖标题,发帖内容,回复标题,回复内容   第一次我们将数据库设计为仅仅存在表:   用户名 email 主页 电话 联系地址 发帖标题 发帖内容 回复标题 回复内容   这个数据库表符合第一范式,但是没有任何一组候选关键字能决定数据库表

心中有道的专栏 671

巡检类机器人电池容量计算方法论(原理+算法+真实案例)

摘要:本文系统阐述了巡检机器人电池容量的计算方法,重点解析了;能量平衡;核心原理和三种主流算法。通过光伏电站履带式巡检机器人的真实案例,详细演示了从工况拆解、功耗采集到容量计算的完整流程。文章指出:室内轻载场景可采用静态平均功耗法,户外常规工况推荐动态负载积分法,而复杂环境需采用融合估算算法。特别强调需考虑温度修正(冬季容量衰减20%)、冗余系数(1.2-1.5)和放电深度(磷酸铁锂DoD取80%)等关键参数。

start_up_go的博客 241

[转]数据库范式(1NF 2NF 3NF BCNF)详解二

  范式应用   我们来逐步搞定一个论坛的数据库,有如下信息:   (1) 用户:用户名,email,主页,电话,联系地址   (2) 帖子:发帖标题,发帖内容,回复标题,回复内容   第一次我们将数据库设计为仅仅存在表:   用户名 email 主页 电话 联系地址 发帖标题 发帖内容 回复标题 回复内容   这个数据库表符合第一范式,但是没有任何一组候选关键字能...

Jayke Lin 320

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【转】数据库范式(1NF 2NF 3NF BCNF)详解二

以下内容转自:http://jacki6.iteye.com/blog/774889 -------------------------分割线-------------------------------- 范式应用 我们来逐步搞定一个论坛的数据库,有如下信息: (1)用户:用户名,email,主页,电话,联系地址 (2)帖子:发帖标题,发帖内容,回复标题,回复内容 第一次我们将数...

weixin_30307267的博客 77

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[ 数据库原理 ] 数据库范式概念:1NF、2NF、3NF、BCNF详解及其应用总结

1NF:满足原子性,字段不可再分割字段都是单一属性2NF:满足完全依赖,消除部分子函数依赖(列不能混着用)要求我们使用唯一主键3NF:消除非主属性传递依赖非主属性之间不能存在函数依赖BCNF:消除主属性传递依赖主码(主键)之间不存在依赖只要是关系型数据库的表,都满足第一范式。第一范式本质更多的是对关系型数据库的一个限定。第二、第三范式更多的是对数据库表合理设计的一个要求,理解第二、第三范式能够更好的帮助我们设计数据库表。[ 本文作者 ] bluetata。

我在山城重庆,我希望能为这片软件沙漠地带贡献自己的一滴水,Stay tuned! 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【通俗易懂】关系模式范式分解教程 3NF与BCNF口诀!小白也能看懂

本来是为了复习数据库期末考试,结果找了一圈都没有发现比较好的解释,通过查阅资料和总结,为大家提供通俗易懂的解法,一听就会!并且配有速记口诀!介是你没有玩过的船新版本包含最小依赖集求法候选码求法 在模式分解之前,首先对于1NF,2NF,3NF,BCNF做一个简明扼要的介绍。 1NF是指数据库表的每一列都是不可分割的基本数据项,即实体中的某个属性不能有多个值或者不能有重复的属性。 2NF要求属性...

sumaliqinghua的博客 18万+

范式判断的三个步骤以及各个范式标准(1NF,2NF,3NF,BCNF,4NF)

范式判断的三个步骤 假设我们有关系模式R(A,B,C),函数依赖F={AB->C} 1.检查R中元素的闭包,也就是哪些元素或者元素组合可以根据F中函数依赖关系得到完整的R,这些元素或者元素组合就是候选码。这里AB的闭包是ABC,记作(AB)+=ABC,所以AB是候选码。 2.通过候选码确定主属性和非主属性。这里A,B是主属性,剩下的C就是非主属性。 3.判断范式标准:1NF,2NF,3NF,BCNF,4NF 各个范式定义 1NF:属性不可分割。 例如 关系模式:学生(姓名,住址),而住址又包含(区,

qq_40177015的博客 2万+

【数据库】范式理解:1NF,2NF,3NF,BCNF,4NF详析

数据库入门(一)最简单的范式理解引言范式种类第一范式(1NF)符合1NF的关系中的每个属性都不可再分存在问题Cohen-Sutherland代码裁剪算法基本思想Cohen-Sutherland操作步骤中点分割裁剪算法(对分法)基本思想线段和窗口有交点情况Liang-Barsky算法Liang的初发现如何判断入边出边?如何判断uuu值?Liang-Barsky算法特点超链接 引言 Normal Fo...

一拳Marx 2万+

关系数据库范式(1NF,2NF,3NF,BCNF,4NF,5NF)全解析

1 范式的基本概念 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF...

春卷同学的博客 2万+

范式通俗理解:1NF、2NF、3NF和BNCF

范式通俗理解:1NF、2NF、3NF和BNCF准备知识超键、候选键、主键函数依赖部分依赖传递依赖范式1NF2NF3NFBCNF参考 准备知识 超键、候选键、主键 超键 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键 候选键 候选键(candidate key):不含有多余属性的超键称为候选键。也就是关系中的一个属性组,其值能唯一标识一个元组。若从属性组中去掉任...

Yesterday You Said Tomorrow. 14万+

非常详细的范式讲解(1NF/2NF/3NF/BCNF)

范式 ​ 范式在计算机方面运用广泛,在计算机二级三级均有涉及到,今天就来讲讲范式。要是能够认真的看完,相信一定能够理解的。 ​ 在讲范式之前,我们先来了解有关范式的基本概念,听懂了有利于后面的学习。 函数依赖 ​ 首先一个好的关系模式是不会出现以下问题的: 1. 插入异常 2. 删除异常 3. 更新异常 4. 数据冗余尽量少 如果出现那是由于数据依赖,其中数据依赖分为:函数依赖,多值依赖,连接依赖等等。 所以,当关系模式出现问题,解决方法为——规范化理论(找到关系模式中不适合的数据依赖,并消除它们)

Panda4u的博客 7564

数据库六种范式详解(1NF/2NF/3NF/BCNF/4NF/5NF)

文章目录数据库的基本概念函数依赖函数依赖的定义函数依赖与属性的关系六种范式第一范式(1NF)第二范式(2NF)第三范式(3NF)巴斯-科德范式(BCNF,Boyce-Codd Normal Form)第四范式(4NF)第五范式(5NF)范式规范化路线范式规范化实例 数据库的基本概念 范式: 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式。 各种范...

记忆碎片的博客 3万+
上一篇: 数据库范式(1NF 2NF 3NF BCNF)详解一
下一篇: linux内核模块和应用程序的区别
ustc_max
博客等级 码龄14年 5粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值