数据库设计篇-范式与反范式

news2024/9/29 11:30:09

概述

一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,也就是不可拆分;第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依赖关系,也就是完全依赖;第三范式确保主键列之间没有传递函数依赖关系,也就是消除传递依赖。

第一范式

定义: 属于第一范式关系的所有属性都不可再分,即数据项不可分。
理解: 第一范式强调数据表的原子性,是其他范式的基础。例如下表

第一种表设计
在这里插入图片描述
第二种表设计
在这里插入图片描述

分析

第一种表设计不满足第一范式,为什么不满足第一范式?因为region列不具有原子性,能拆分成省份、市和具体地址;

第二范式

定义: 要求数据库表中的每个实例或行必须可以被唯一的区分。
通常在实现来说,需要为表加上一个列,以存储各个实例的唯一标识

例子引入:

需求描述:设计一个订单信息表,订单有多种商品,将订单编号和商品编号作为联合主键。

第一种表设计
在这里插入图片描述
第二种表设计
在这里插入图片描述

分析

第一种表设计不满足第二范式 ,订单编号和商品编号作为联合主键,由于商品名称,单位,价格这几列只与商品编号有关,与订单编号无关,因此与主键(联合主键)无关,违反范式第二原则;

第二种表设计满足第二范式,把第一种设计表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中。

第三范式

定义:第三范式指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第
二范式的基础上消除了非主键对主键的传递依赖

例子引入:

需求描述:
1 需要在数据库中存储如下信息:
2 学生编号;学生卡号;用户ID号;操作员级别;操作日期;操作时间;

第一种表设计
在这里插入图片描述
第二种表设计
在这里插入图片描述

分析

第一种表设计不满足第三范式,在表中,一个UserID能确定一个UserLevel。这样,UserID依赖于StudentNo和CardNo,而UserLevel又依赖于UserID,这就导致了传递依赖,3NF就是消除这种依赖。
第二种表设计满足第三范式,将第一种表格拆分成成两个表格。

范式优点与缺点

范式优点

  • 范式化的更新操作通常比非范式更快。
  • 数据较好的范式化 只是用较少或者没有重复数据,所以执行操作会更快。
  • 范式化的表会更小,可以更好的放在内存里,所以执行操作会更快。
  • 很少有多余的数据意味着检索列表数据时更少需要distinct或者group by语句。

范式化缺点

  • 范式化意味着更多的join 这会导致代价昂贵并且导致一些索引无效。

反范式的优点与缺点

优点

  • 反范式的schema因为在同一张表中 可以很好的避免关联

混用范式与反范式

范式与反范式一般混合使用。反范式化数据的方法是复制或者缓存,在不同表存储同样的特定列。

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

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

相关文章

抖音林客生活服务商平台

抖音林客生活服务服务商平台是为了方便服务商管理自己的服务和订单而设计的平台。以下是其主要功能: 服务管理:服务商可以在平台上添加自己提供的服务,并设置服务的价格、规格等信息; 订单管理:服务商可以查看…

【Git总结】

第三章Git常用命令 Git注意首次 安装必须设置一下用户签名,否则无法提交代码。 vim 文件名(hellow.txt)//进入编辑模式 cat 文件名(hellow.txt)//查看文件内容 i进入编辑模式,(Esc):wq保存退出 &#…

掌握imgproc组件:opencv-图像处理

图像处理 1.线性滤波:方框滤波、均值滤波、高斯滤波1.1 平滑处理1.2 图像滤波与滤波器1.3 线性滤波器的简介1.4 滤波和模糊1.5 邻域算子与线性邻域滤波1.6 方框滤波1.7 均值滤波1.8 高斯滤波1.9 线性滤波综合案例 2.非线性滤波:中值滤波、双边滤波2.1 中…

python自定义序列类深入学习

一:自定义序列类 1、序列类型的分类 容器序列: list 、 tuple、deque 扁平序列: str 、bytes、bytearray、arry.array 可变序列: list 、deque、bytearray、array 不可变: str、tuple、bytes 容器序列表示可以放置任意…

计算机中CPU、内存、缓存的关系

CPU(Central Processing Unit,中央处理器) 内存(Random Access Memory,随机存取存储器) 缓存(Cache) CPU、内存和缓存之间有着密切的关系,它们共同构成了计算机系统的核…

软考高级系统架构设计师(八) 基于中间件的开发实际项目

目录 中间件的用途 中间件技术 中间件的特点 中间件的十大优越性 企业应用集成 轻量级架构 Struts框架 spring Hibernate 实际项目举例 产品逻辑大图 gRPC的接口规范 关键中间件交互 整体架构设计 大数据素材底层处理 业务交互大图 底层数据素材加工大图 中间…

这些年你走了多少弯路?接口性能测试你真的懂了?进阶测试...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试关注 响…

java + opencv对比图片不同

1,去官网下载opencv,下载的时候需要注册一个 Oracle 账户,分分钟就能注册。然后安装。我下的是4.7的。 2,找到jar包放进项目里 3,项目结构,比较简单 4,把下载的文件放进C盘 5,主类代…

未来独角兽!安全狗入选2023年福建省数字经济核心产业领域创新企业名单

近日,福建省数字福建建设领导小组办公室公布了入选2023年全省数字经济核心产业领域创新企业名单。 作为国内云原生安全领导厂商,安全狗凭借综合安全能力入选名单,荣膺“未来独角兽”称号。 厦门服云信息科技有限公司(品牌名&#…

7DGroup性能实施项目日记4

经过了一个十一假期,我们的日记虽然没有更新,但我们的项目并没有停止。 虽然这个项目是一个依托性能培训的项目,但对我来说,这和真实的项目并无二致。我们花了几万(根据一期的培训,估计在3万-4万左右&…

高速电路设计系列分享-基本概念

目录 概要 整体架构流程 技术名词解释 1.带宽的理解 2.了解转换器的精度 技术细节 小结 概要 提示:这里可以添加技术概要 本文主要熟悉一些基本概念。随笔,加一些网上用语,只做学习之用,不用深入分析。 整体架构流程 提…

最佳的SCADA软件推荐

前言 发现优化工业运营效率并最大化投资回报率的最佳“监控和数据采集 (SCADA)、工业物联网 (IIoT)、人工智能 (AI) 等”数字化转型技术,使商业组织能够提高运营效率并促进公用事业管理。当配备…

浏览器插件开发(一)入门之自制屏蔽某度广告的插件

一:浏览器扩展介绍: 浏览器扩展是一个小软件定义模块的网页浏览器,通常称为浏览器插件,大部分浏览器允许安装拓展,其作用有用户界面修改,广告拦截和Cookie管理等 包含基本平台信息的应用程序清单JSON文件 …

第十章 总结【编译原理】

第十章 总结【编译原理】 前言推荐第十章 总结10.1 概述10.2 局部优化10.2.1基本块及流图10.2.2基本块的DAG表示及其应用 10.3 循环优化*10.4数据流分析 最后 前言 2023-6-26 18:54:31 以下内容源自《【编译原理】》 仅供学习交流使用 推荐 第九章 总结及作业(4…

态路小课堂丨三种实现光模块更高传输速率的技术你知道吗?

TARLUZ态路 随着云计算、大数据的快速兴起,数据中心以及电信运营商对光模块的传输速率要求越来越高。从1998年发展至今,光模块一直朝着更高的速率、更小的封装不断升级。光模块一般采用增加波长数、增加信号传输通道数量和提高单通道速率技术方案实现光模…

公众号内添加投票链接制作投票的软件网络投票器

手机互联网给所有人都带来不同程度的便利,而微信已经成为国民的系统级别的应用。 现在很多人都会在微信群或朋友圈里转发投票,对于运营及推广来说找一个合适的投票小程序能够提高工作效率,提高活动的影响力。 那么微信做投票的小程序哪个比较…

.vm文件发邮件时js未生效,无法控制显示隐藏

需求起因 最近在做一个发邮件的功能,是后端发邮件,不过邮件内容是由前端来写。 邮件内容包括姓名、手机号、邮箱,这三个参数都是不一定有的,如果没有某个参数时,那一行内容就不显示。 写法没错,但就是js…

npm详解

1.npm支持多个源(没列全,有兴趣的可以自己去了解一下其他源) (1)官方源:https://registry.npmjs.org (2)淘宝源:https://registry.npm.taobao.org (3&#x…

《Java核心卷1》慢慢啃!读第3,4章 | 第12版

提醒:全文约6000字,是一份比较单纯的学习笔记,知识点基本采用条目的形式列出,起到查漏补缺和备忘录的作用,而对内容之间的逻辑结构并未进行仔细梳理。本文内容包括: Java的基本程序设计结构面向对象程序设计…

jmeter压力测试实战分析详解,一定要看完哦

目录 1.从压力测试说起 2.压力测试到底要关注什么 3.你想要的到底是个什么东西 4.面试总问的jvm调优到底是要干什么 5.常用的压力测试工具及命令 6.性能诊断到底难在哪里? 7.到底是加机器还是优化服务? 总结: 1.从压力测试说起 压力测…