我的编程空间,编程开发者的网络收藏夹
学习永远不晚

数据库规范化的必要性是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

数据库规范化的必要性是什么

这篇文章给大家分享的是有关数据库规范化的必要性是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

规范化过程主要为克服数据库逻辑结构中的插入异常、删除异常以及冗余度大的缺陷。数据库规范化能够让数据库设计者更好地了解组织内部当前的数据结构,最终得到一系列的数据实体。数据库规范化通过对数据库表的设计,可以有效降低数据库冗余程度。

数据库规范化的必要性是什么

数据库规范化过程

关系数据库的规范化说的通俗一些就是对表的规范化。

规范化的必要性:

根据项目的需求,我们会创建相应的数据库表格来完成项目中的数据的存储。这已经成为做项目的固定流程了,但是在真正的开始处理业务需求的时候,就会意识到自己的表格设置的不合理,导致数据的重复存储,插入异常,删除异常,更新异常等问题,这时就需要来重新的规划表格,既浪费时间,又消耗人力财力,十分不划算,因此规范化是十分有必要的,所以今天就在这里教给大家规范表的方法。

在教规范化数据库方法之前,先给大家介绍知识:

关键知识点函数依赖

定义可能有些难以理解,我在这里简单的解释一下:函数依赖描述的是两个集合之间的一种映射关系,这种映射关系与函数是一样的,例如 y = x^2,在这里对于x来说,一个x就对应一个y值,但是不存在,一个x对应多种y值的情况,所以就可以说y函数依赖于x,然而对于y来说,存在一个y值对应多个x值的情况,所以说x并不函数依赖于y。这就是函数依赖。

接下来我们介绍几种特殊的函数依赖:

完全函数依赖

定义:

如果X->Y,并且对于任意一个X的真子集X’都不存在,X’->Y,那么我们就说 X->Y这种函数依赖属于完全函数依赖。

简单的解释一下: 函数z = x + y,对于z来说:z函数依赖于x和y,但是z并不单独依赖于x或单独依赖于y,这就说明z函数依赖于x和y的这种依赖就是完全函数依赖。

部分函数依赖:

定义:

如果X->Y,但是Y不完全依赖于X,则称这种依赖为部分完全依赖。 也就是说:函数z = x + 0y 是可以看成 ,也就是说z函数依赖于x和y,但是z又单独依赖于x,那么这就是部分函数依赖。

传递函数依赖:

定义:

如果X->Y, Y -> Z ,并且不成立,Y->X也不成立。则称Z传递函数依赖于X。

这个比较简单,函数组z = x^2, x = 2y可以化简为z = 4y ^2,很容易看出:z是函数依赖于x,x依赖于y,并且z->x不成立,这就是传递函数依赖。

关键知识点之二-----键

候选键:一个属性(字段)或一个属性组(多个字段)能够完全决定于关系模式(表)中的其他属性(字段)。也就是说其他属性(字段)完全依赖于该属性(字段)或属性组(多个字段)。

主键:如果候选键多于一个,则选择其中一个作为主键。被选做主键的属性或属性组在该关系模式(表)中的每一个元祖(行)中的值是不允许重复和取值为null的。

主属性:报完在任何一个候选键中的属性,称为主属性。如果候选键是由多个属性共同组成的,那么这些属性组中每一个属性都是主属性。

非主属性:不包含在任何键中的属性称为非主属性。

外键:某属性或属性组在当前关系模式(表)中不是主键,但是另一个关系模式(表)中充当主键的身份,则称该属性或属性组为外键。

在介绍完了上述的基本知识点之后,我们来开始学习数据库表的规范过程:

想要规范表,就首先需要一个标准,来衡量表是否已经规范。这个标准就是----范式。

范式一共有六种:第一范式(1NF),第二范式(2NF),第三范式(3NF),BC范式(BCNF),第四范式(4NF),第五范式(5NF)。

在上面六中范式中,在一般的情况下我们需要将表规范到BCNF就已经十分完美了,在真正的项目中其实只需要达到3NF就足够了。

接下来重点介绍前4中范式:

第一范式:关系模式R中的所有属性都是不可分的数据项。

简单来说就是只要你能把表建出来,这个表就已经满足了第一范式了。例如student表(student_id, course_id,  student_name, age, sex, grade, sdept, sdept_director),在这个表中很明显grade这一项是受student_id, course_id,共同决定的,所以应该让这两项联合做为主键。

第二范式:在满足第一范式的基础上,满足非主属性都完全依赖于R的主键。

这就需要用到前面讲的内容了,要判断非主属性是否完全依赖于主键。如果不满足就重 更改表的结构。例如student表(student_id, course_id, student_name, age, sex, grade, sdept_id, sdept_director)因为student_id, course_id两项联合做为主键,但是对于其他的字段name, age, sex这些 属性来说,它们是完全依 赖于student_id这一属性的,所以它们对于student_id, course_id共同作为主键是部分 依赖的。这就不满足第二范式的定义了,所以应该把 grade拿出来,将这一个大表拆成 两份小表:student(student_id, name, age, sex, sdept_id, sdept_director), student_score(student_id, course_id, grade);

第三范式:在满足第二范式的情况下去除传递依赖。

例如:student表(student_id, student_name, age, sex, sdept, sdept_director),很明显每一个专业决定一个专业主任,所以sdept_director传递依赖于student_id,所以应该再拆分一个表student(student_id, student_name, age, sex)和sdept(sdept_id, sdept_name, sdept_director),这样就满足了第三范式。

BC范式:在满足第三范式的情况下,再满足一下三点:

1、所有的主属性完全依赖于其他不包含自己的候选键;
2、所有的非主属性完全依赖于每一个候选键;
3、没有任何属性完全函数依赖于任何一组非主属性。

之前的三个范式都是对非主属性进行各种约束,BC范式是在他们基础上,再对主属性进行约束,解决了主属性之间的部分依赖的问题,以及不存在主属性完全依赖于非主属性的问题。 我们的student表 student(student_id, student_name, age, sex),主键是student_id,所以主属性是student_id,很显然前两条都已经满足,因为学生的姓名可能重复,所以student_id与student_name之间没有函数依赖关系,所以student表满足BC范式。

感谢各位的阅读!关于数据库规范化的必要性是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

数据库规范化的必要性是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

数据库规范化的重要性

数据库规范化的重要性主要体现在以下几个方面:1. 数据冗余减少:规范化能够将数据分解为更小的表,避免数据的冗余存储。冗余数据不仅浪费存储空间,还容易导致数据的不一致性和更新异常。规范化可以通过建立关系表、分解多对多关系等方式减少冗余数据。2
2023-10-12

数据库中的范式是什么

数据库中的范式是一种规范化的设计方法,用于规范数据库中的关系模式,以减少数据冗余、提高数据库的性能和可靠性。常见的数据库范式有以下几种:1. 第一范式(1NF):要求关系模式的每个属性都是原子性的,即不可再分解的,每个属性值只能包含一个数据
2023-10-09

PHP开发规范中性能优化的方法是什么

这篇文章主要介绍“PHP开发规范中性能优化的方法是什么”,在日常操作中,相信很多人在PHP开发规范中性能优化的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP开发规范中性能优化的方法是什么”的疑
2023-06-04

MySQL数据库是如何实现XA规范的

MySQL 的一致性日志如果 MySQL 数据库断电了,未提交的事务怎么办? 答案:依靠日志。 因为在执行一个操作之前,数据库会首先把这个操作的内容写入到文件系统日志里,然后再进行操作。当宕机或者断电的时候,即使操作并没有执行完,但是日志在
2022-05-11

mysql数据库范式指的是什么

这篇文章主要为大家展示了“mysql数据库范式指的是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql数据库范式指的是什么”这篇文章吧。1、第一范式1NF:字段原子性字段原子性,字段不
2023-06-15

搭建大数据分析平台的必要性是什么

这篇文章将为大家详细讲解有关搭建大数据分析平台的必要性是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  大数据时代,几乎每一个企业都对数据分析平台趋之若鹜,尤其是在今年疫情爆发之后,更
2023-06-02

Aurora数据库的性能优化策略是什么

Aurora数据库的性能优化策略可以包括以下几点:使用合适的实例类型:选择适合负载和数据量的Aurora实例类型,确保实例有足够的计算和存储资源来支持数据库的运行。优化SQL查询:通过优化SQL查询语句,包括添加索引、避免全表扫描、合理使用
Aurora数据库的性能优化策略是什么
2024-04-09

MySQL数据库的性能优化方法是什么

本篇内容介绍了“MySQL数据库的性能优化方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、MySQL数据库的优化目标、基本原则:
2023-07-06

什么是数据死锁,死锁的必要条件是什么

一丶什么是数据死锁?死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程.二丶死锁的必要条件是什么?互斥条件:指进程对所分
什么是数据死锁,死锁的必要条件是什么
2020-02-19

编程热搜

目录