数据库范式理论

news2024/12/24 22:04:16

目录

1、1NF

2、2NF

3、3NF

4、BCNF

5、4NF


1、1NF

在实际应用中,数据库表的每一列(也称为属性)都是不可分割的原子数据项,不能是集合,数组,记录等非原子数据项。即在实际应用中实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。

比如存在数据表(学号、学生姓名、家庭详细地址)。在该关系表中家庭地址就要按照实际情况进行处理。如果要求学生所在的省市区域,那家庭地址这个字段不符合第一范式,要进行细分,也即数据表(学号、学生姓名、省市区域、家庭详细地址)。如数据(ml,361909020429,宁夏,固原西吉.....)。因此是否满足第一范式要求要看该关系数据表是否满足实际的应用场景。

2、2NF

在1NF基础上,每一个的非码属性(不在主键中的列),都必须完全函数依赖于候选码。(在1NF基础上,消除 非码属性对码的部分函数依赖,也就是让非码属性 函数依赖于候选码中的全部属性)

比如关系表(学号,课程编号,课程名称,姓名, 年龄, 成绩, 学分)。实际上,在该关系表中姓名、年龄属性只依赖于学号,而与课程编号没有任何关系,所以这就是部分函数依赖,不是完全函数依赖。因此不满足第二范式的要求,将上述表进行拆分,消除函数依赖。

学生(学号,姓名, 年龄)

课程(课程编号,课程名称,学分)

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

3、3NF

在2NF基础上,任何非主属性都直接依赖于主属性,不能传递依赖于主属性。即 表中的每一列 只与主键直接相关,而不是间接相关,(表中的每一列只能依赖于主键)。即每一个非码属性既不部分依赖于码,也不传递依赖于码。

比如关系表(学号,学生姓名,性别,学院编号,学院电话),很明显有关系 学号——>学院编号——>学院电话,这就是典型的传递函数依赖。因此对表进行拆分消除传递函数依赖如下。

学生(学号,学生姓名,性别,学院编号)

学院(学院编号,学院电话)

4、BCNF

在3NF基础上,消除主属性(候选码中的属性)对候选码的部分函数依赖和传递函数依赖。

若R∈BCNF,按定义排除了任何属性码的传递依赖与部分依赖,所以R∈3NF。

3NF:每一个非码属性既不部分依赖于码,也不传递依赖于码

BCNF:排除了任何属性对码的传递依赖与部分依赖(相对于3NF范围更广,从非码属性扩展到任何属性)

比如存在关系表(仓库编号,商品编号,管理员编号,数量),其中假设在该关系表中一个仓库只有一个一个管理员,所以管理员编号——>仓库编号,而仓库编号——>管理员编号,同时(仓库编号,商品编号)——>数量,(管理员编号,商品编号)——>数量,即再该关系中存在两个候选关键字(仓库编号,商品编号)和(管理员编号,商品编号),所以符合第三范式的定义,非码属性既不部分依赖于码,也不传递依赖于码。

可是存在的问题是,候选码(管理员编号,商品编号)中的主属性(管理员编号)部分依赖于不包含它的候选键(仓库编号,商品编号),所以不符合BCNF范式。因此对上面的关系进行拆分消除部分函数依赖关系如下。

(仓库编号,管理员编号)

(仓库编号,商品编号,数量)

5、4NF

多值依赖是属性之间的一对多关系,记为K→→A。

函数依赖事实上是单值依赖,所以不能表达属性值之间的一对多关系。

平凡的多值依赖:全集U=K+A,一个K可以对应于多个A,即K→→A。此时整个表就是一组一对多关系。

非平凡的多值依赖:全集U=K+A+B,一个K可以对应于多个A,也可以对应于多个B,A与B互相独立,即K→→A,K→→B。整个表有多组一对多关系,且有:“一”部分是相同的属性集合,“多”部分是互相独立的属性集合。

在BCNF的基础上,消除非平凡且非函数依赖的多值依赖。4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF所允许的多值依赖实际上是函数依赖。

比如下面的一张表,很明显存在多值依赖关系

课程→学生

课程→先修课

所以对上面的表进行拆分消除多值依赖如下

————————————————

点击进入连接:上述文章参考该博主的优秀博文
 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

直播电商迈入新周期,快手如何抢跑?

文 | 螳螂观察 作者 | 图霖 直播电商迈入第七个发展年头,来到了新周期的变革前夜。 行业竞争逐年加剧,但截至2022年已迅速攀升至35000亿元的直播电商市场交易规模,仍诱惑着新玩家挤进这张拥堵的牌桌。 美团方面,继今年1月底在…

局域网唤醒工具UpSnap

什么是 UpSnap ? UpSnap 是使用 SvelteKit、Go、PocketBase 和 nmap 编写的简单局域网唤醒应用程序。 v3 更新日志: ⚙️ 后端: 用 Go 重写。之前的版本是 Python 写的;不再支持不同的数据库。后端现在使用基于 SQLite 的 PocketB…

Qt+QtWebApp开发笔记(三):http服务器动态html连接跳转基础交互

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130840894 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

电脑密码忘了怎么解除?试试这3个方法!

案例:我的电脑太久没有使用,导致我忘记了密码,试了好几次还是显示密码错误。怎样才能找回电脑的开机密码? 【我忘记了电脑密码,导致我无法使用电脑,给我的生活带来了很大的困扰。有没有小伙伴遇到过相同的…

开发最佳实践|集成声网 iOS SDK,实现语音聊天室

大家好,我是声网 RTE 开发者社区作者 小曾同学。本次主要分享集成声网SDK实现语音聊天室。 01 前言 在日常生活中经常会看到一些聊天场景,比如在线KTV、连麦开黑、多人相亲、娱乐聊天室等应用场景,随着移动应用开发的需求不断增加&#xff…

提高记忆力的 10 种记忆技巧和工具

人工智能的迅速发展,让人不禁猜想是否有一天我们也能靠AI来提高自己的记忆力?哈哈也许真的可行🤖 其实现在已经有很多记忆技巧和工具,不仅可以帮助我们存储信息,还可以更好地回忆和记忆更大的信息集。 实际上&#x…

lwIP更新记07:TCP 控制块申请失败可以检测到了

从 lwIP-2.0.0 开始,TCP 控制块申请失败可以检测到了。 这个更新应用在 TCP 服务器模式中,处于监听状态的 TCP_PCB ,如果收到客户端发送的 SYN 同步标志,表示一个客户端在请求建立连接了。lwIP 会为这个新连接申请一个 TCP_PCB &…

APP启动页和闪屏的知识点

APP启动页和闪屏的知识点_51CTO博客_app启动屏广告 启动页与闪屏的区别 1.启动页 (launch screen ) 当app被用户打开时,在app启动过程中被用户所看到的过渡页面(或动画)都被我们统称为启动页。 优点: 1.打开一个产品时,需要有一定的时间加载&#xff…

windows sever服务器安装系统新手版

混在learnsite群里已经有几年了吧,但是只有一段时间用了别人现成的一个iso版本还比较老,这次打算自己弄一个,一开始打算linux下弄,结果系统都装完了发现人家说learnsite在linux下有点bug没解决好,只能win下再弄&#x…

爬虫为什么会使用到代理ip?

爬虫使用代理IP的主要目的是为了隐藏自己的真实IP地址,以避免被目标网站封禁或限制访问。如果一个爬虫频繁地向一个网站发送请求,而且每次请求的IP地址都相同,那么这个网站就有可能认为这是一种恶意行为,从而采取封禁或限制访问的…

用 Python 写 3D 游戏

vizard介绍 Vizard是一款虚拟现实开发平台软件,从开发至今已走过十个年头。它基于C/C,运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时,Vizard同时自动将编写的程式转换为字节码抽象层(LAXMI),进而运行…

如何对项目进度进行跟踪?逐步完善项目计划

我接手了一个小项目,但是无论是我还是领导,都认为这是个简单的项目,最多一月时间就能搞定。但是,随着时间推移,三个月也没有将内容完善。于是我进行了反思总结,我认为存在如下问题: 1、资源协…

vue3在setup中请求数据并使用的几种方式

因为Composition组合式API setup有一点点不同特此举例几种可行的请求数据并使用方式 第一种 Promise 参考代码如下 <template><div>{{ min }}</div> </template><script> import { ref } from vue; import { getUser } from /api/user export d…

应急响应之内存分析方法

应急响应之内存分析方法 1.内存的获取基于内核模式程序的内存获取基于系统崩溃转储的内存获取基于虚拟化快照的内存获取dumpit获取(推荐)2.内存的分析RedlineVolatility1.内存的获取 基于内核模式程序的内存获取 这种获取方法一般需要借助相关的工具来完成。常用的提取工具…

leetcode 2542. Maximum Subsequence Score(最大子串分数)

2个数组&#xff0c;长度一样&#xff0c;从中选k个下标&#xff08;两个数组用同样的下标&#xff09;&#xff0c; 会得到k个nums1中的数字&#xff0c;和k个nums2中的数字。 score k个nums1的数字之和 ✖ min(k个nums2的数字&#xff09;&#xff0c; 找到最大的score。 思…

【Qt】QLocalSocket与QLocalServer问题:接收不到数据、只能收到第一条、数据不完整解决方案【2023.05.24】

简介 Qt很强大,但是Qt的帮助文档、API属实是让我们走不少弯路。QLocalSocket一个很简单的东西,我仅想用来实现一个简单的本地进程通信,就遇到了:客户端循环发送数据,服务端只能接收到一条、接收到数据不完整等奇奇怪怪的现象。 最郁闷的是,网上很多教程说的都是错的😒。…

Web服务器实现|基于阻塞队列线程池的Http服务器|线程控制|Http协议

基于阻塞队列生产者消费者模型线程池的多线程Web服务器 代码地址&#xff1a;WebServer_GitHub_Addr README 摘要 本实验通过C语言&#xff0c;实现了一个基于阻塞队列线程池的多线程Web服务器。该服务器支持通过http协议发送报文&#xff0c;跨主机抓取服务器上特定资源。与…

火山引擎数智平台VeDI助力某办公软件企业营销线索转化提升14%

一条营销线索&#xff0c;从官网后台下载到完成成交&#xff0c;到底需要经历哪些环节&#xff1f; 在企业级市场的销售场景中&#xff0c;营销线索通常是指用户通过相关产品的官方网站或者营销活动界面&#xff0c;主动留下的联系方式&#xff1b;而根据线索价值的不同&#…

2023京东618全民拆快递互动活动玩法规则!

2023京东618全民拆快递&#xff0c;瓜分20亿活动规则&#xff01; 618无门槛红包29号开领&#xff01; ​手机京东搜索&#xff1a;好运红包210&#xff0c;领最高20618&#xff0c;每天可领三次&#xff01; ​手机京东搜索&#xff1a;能省就省50&#xff0c;领最高23888…

深度学习进阶篇-预训练模型[1]:预训练分词Subword、ELMo、Transformer模型原理;结构;技巧以及应用详解

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…