mysql数据库设计三大范式_了解数据库设计三大范式

数据库设计范式

什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些

规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。

什么是三大范式:

第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要

求,否则,将有很多基本操作在这样的关系模式中实现不了。

第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。

第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.

注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性

理解三大范式

第一范式

1、每一列属性都是不可再分的属性值,确保每一列的原子性

2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。

98eebca10e9c4b1b94e3bc6004751970.png

fea944a47cda63f84efdd57088a2f8e1.png

如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。

5e0e2282218ae151cb43d3e759329cd7.png

68e680ce037125ca0daad79e38e4ff63.png

显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。

第二范式

每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。

f20f6999996d36f0a3559ecf6076bee6.png

一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

0bccb71d8d5ee464de9a6f63925233d8.png

45c549614ae03d928d938b6ddb130d9b.png

这样便实现啦一条数据做一件事,不掺杂复杂的关系逻辑。同时对表数据的更新维护也更易操作。

第三范式

数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c 属性之间含有这样的关系,是不符合第三范式的。

比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

这样一个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)

这样的表结构,我们应该拆开来,如下。

(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

最后:

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

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

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

相关文章

使用BeetleX网关部署第三方Web服务

BeetleX的http/ws网关在早期版本可以启动和管理第三方Web服务进程,在最新的1.5版本中引入了文件管理功能,通过这一功能可以对第三方Web服务进行发布管理。加入文件管理后BeetleX的新版本网关服务可以理解为一个简单化的IIS,但它的不同之处是可…

2020.NET开发者大会大会线上同步直播,以及参会秘籍

2020.NET开发者大会马上就要开幕啦!你都做好参会准备没有?本届峰会线上分享将在思否和CSDN两个媒体平台同步进行,大家可以选择适合自己的方式在线参与互动哦!访问下方链接,可以直接加入直播:思否直播观看地…

C# 9.0中引入的新特性init和record的使用思考

.NET 5.0已经发布,C# 9.0也为我们带来了许多新特性,其中最让我印象深刻的就是init和record type,很多文章已经把这两个新特性讨论的差不多了,本文不再详细讨论,而是通过使用角度来思考这两个特性。initinit是C# 9.0中引…

使用 .NET Core 中的 EventCounters 衡量性能

背景对于每隔几毫秒发生的事件,最好使每个事件的开销较低(小于一毫秒)。 否则,对性能的影响将很大。 记录事件意味着你将向磁盘写入内容。 如果磁盘不够快,你将丢失事件。 你需要一个解决方案,而不是记录事…

基于 C# 的 ETL 大数据并行编程

作者:James Spinella译者:精致码农原文:https://bit.ly/3nGQu4J并行编程在历史上一直是软件开发中比较小众和复杂的环节,往往不值得头疼。但编写并行化应用只会越来越简单,一个应用同时利用设备 CPU 上的多个内核&…

一个小技巧助您减少if语句的状态判断

在进行项目的开发的过程中, if 语句是少不了的,但我们始终要有一颗消灭 if / else 语句的心。为了消灭if / else 我们引入了 短路器 的概念。短路器 有时候的确能精简我们的代码,但还不够,因此我参考了一个方法来继续消灭一部分 断…

抢先看:笔者亲历的2020年中国.NET开发者大会活动纪实

编者:2020年中国.NET开发者大会第一天活动已经结束,可以通过https://codechina.csdn.net/lives 会看。第二天的Workshop 也有直播哦。12020年12月19日的苏州工业园区,天公作美,阳光明媚,气象迷人,正是一个搞…

python魔术方法由谁定义_Python的魔术方法

魔术方法就是在定义的类中定义一些”不一般”的方法,使类的使用更方便、完善、健壮,是python特有的方法,一般都是前后包含两个下划线__的方法称为魔术方法,例如__new__。基本魔术方法有哪些__new__:是在一个对象实例化…

Swagger在header中添加token

概述平常做项目使用mvcwebapi,采取前后端分离的方式,后台提供API接口给前端开发人员。这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员。为了解决这个问题,项目中引用swagger(我比较喜欢戏称为“丝袜哥”&…

如何在 C# 中使用 数据注解

数据注解 是一种可以应用到 类 或者 类成员上用来指定类之间关系的一种 Attribute,它的应用场景比较多,可用来描述 UI 上如何进行数据展示,还可以用来做类属性的规则验证,这篇文章就来讨论为什么 注解 值得你去学习,以…

2020年中国.NET开发者大会第二天 WorkShop

工作坊1:使用 NCF 从 0 到 1 快速模块化开发/部署业务系统实战工作坊简介:本次工作坊由盛派开发团队亲自带领开发者使用 NCF(NeuCharFramework) 框架进行系统快速开发,进行现场实操训练,大家可以通过本次活…

mysql直接生成excel_MYSQL 将excel里面的数据直接生成sql语句

如何使用EXCEL生成SQL语句?将光标放到新的列上里面,然后在公式栏里面输入如下公式:"insert into t values("&A1&","&B1&","&C1&","&D1&")"效果图&#x…

OrchardCore实现模块化核心原理分析

【导读】ABP vNext并未过多探究,当然其基于DDD理念分层清晰,灵活性、扩展性自然也不在话下,但有些情况下我可能会首选OrchardCore,并非ABP vNext不可若改造项目,也因历史遗留问题,数据库表设计也可能存在不…

.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记

2.2.3 核心模块--配置IConfigurationOptionsASP.NET Core 中的配置:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?viewaspnetcore-5.0IConfigurationIConfiguration 的使用层级对象配置到 key-value 键值对转换通过环境变量修改日志…

.NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统

文章标题:.NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统作者:Lamond Lu项目地址:https://github.com/lamondlu/CoolCat博客:http://www.cnblogs.com/lwqlun以下是2020.12.19日的演讲文稿和视频:大家好&a…

多款主流编程语言,哪款开发软件最安全?

喜欢就关注我们吧!在当下的市场环境中,除了掌握困扰软件的最常见安全问题外,开发人员还应该了解到底是什么问题在影响他们正在使用的编程语言。静态代码分析安全公司 Veracode 最近发布了一份年度软件安全状态(SOSS)报…

2020年终回顾:时间会回答成长,成长会回答梦想

前言2020年是脚踏实地,慢慢成长的一年,由于疫情的缘故,今年社区没有像去年一样举办多场线下活动,不过 .NET CONF CHINA 大会昨天也在苏州顺利召开,回顾这一年,也有不少惊喜与感悟2020年回顾公众号自从去年双…

java servlet 跳转_Servlet跳转方式sendReDirect()和forward()

在web应用服务中,经常会面对不同SERVLET之间的跳转,目前我们可以通过以下两种方式实现:1.RequestDispatcher.forward()2.ServletResponse.sendReDirect()两者的区别:1.redirect 方式可以跨应用访问,forward 只能在同一个应用中跳转…

明天面腾讯,我刷了这71道面试题...

激动人心的Conf 2020中国.NET开发者大会完美落幕,有幸去到现场,跟诸位.NET大佬、微软大咖、MVP面对面交流,内心很是鸡冻!聊天中我注意到一个细节,很多公司的项目都在逐步用MySQL替换SQLServer,尤其是微服务…

java字符串切分_Java字符串分割(转)

java.lang.String的split()方法, JDK 1.4 or laterpublic String[] split(String regex,int limit)示例代码public class StringSplit {public static void main(String[] args) {String sourceStr "1,2,3,4,5";String[] sourceStrArray sourceStr.split(",&q…