SQL Server三大范式

【前言】

小编今天来讲讲SQL中的三大范式。

通常我们在创建数据库需要一定的规则去遵守,在RDBMS中,这种规则就是范式。而规范化目的就是使结构更合理,消除存储异常,使数据冗余尽量小。便于插入、删除和更新。使得它符合第一范式的规则,然后是第二范式,最后是第三范式。一般来说,数据库只需满足第三范式就行了。

目录

【前言】

【正文】

为什么要遵循三范式?

一、第一范式

二、第二范式

三、第三范式

【总结】


【正文】

为什么要遵循三范式?

三范式的重要性在于提高数据库的数据一致性、可靠性和查询效率,同时也提高了数据库的可扩展性和维护性。通过遵循三范式的设计原则,可以创建出高质量和高性能的数据库

三范式的作用有哪些?

  1. 数据冗余的减少:通过将数据分解成多个表,每个表只包含一个主题,避免了数据的重复存储,减少了存储空间的占用。
  2. 数据一致性的提高:通过将数据分解成多个表,并使用关系连接来关联表,确保数据的一致性,减少了数据更新时的冲突和错误。
  3. 数据操作的灵活性:通过将数据分解成多个表,并使用关系连接来关联表,可以更灵活地进行数据查询和操作,提高了查询和操作的效率。

一、第一范式

每个表具有一个主键(主键可以由一个列或多个列组成,是记录的唯一标识符);

每个字段只能存放单一的值并确保有数据没有重复的组

字段不可再分

<**举例**>

现有一个学生家庭信息表

学生家庭信息表
学号姓名性别家庭住址
1春花四川省成都市锦江区
2夏雪新疆乌鲁木齐市天山区
3秋月浙江省杭州市滨江区

从图中我们可以发现:学号、姓名、性别都是具有唯一性的,是不可在分割的部分。而家庭住址中由省、市、区三部分组成,所以我们在细分则为下图:

学生家庭信息表

学号

姓名 性别
1春花四川省成都市锦江区
2夏雪新疆乌鲁木齐市天山区
3秋月浙江省杭州市滨江区

现在这就是一个规则的第一范式的表了

二、第二范式

第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式

要求数据表里的所有数据都要该数据表的主键完全依赖关系

<**举例**>

现有一个学生信息表

学生信息表
学号姓名性别年龄家庭住址学院编号课程任课教师上课地点上课时间
1春花19河北省廊坊177计算机李平北教1号楼14:00
2夏雪20河北省邯郸143临床医学王平北教2号楼15:00
3秋月18河北省石家庄245教育学汪平南区1号楼16:00

现在我们就可以从这个表中可以看出:学号和学院编号作为了这个表的联合主键。而任课教师、上课地点等信息都与主键没有直接关联,违反了第二范式的原则,则需要我们对这个表进行一些改动,使之符合第二范式的要求。

将两个主键的主要信息分别分割为学生信息表和专业信息两个表,将上课专业的具体信息也分为课程信息表。学生所在专业作为了一个唯一性的列(一个学校只具有这一个专业),而专业所往下又可划分为不同信息,不同的课程所上课时间、地点、老师又都各不相同。

则修改之后如图:

学生信息表
学号姓名性别年龄家庭住址
1春花19河北省廊坊
2夏雪20河北省邯郸
3秋月18河北省石家庄

专业信息表
学院编号课程学号
177计算机1
143临床医学2
245教育学3

课程信息表
课程任课教师上课地点上课时间
计算机李平北教1号楼14:00
临床医学王平北教2号楼15:00
教育学汪平南区1号楼16:00

三、第三范式

符合第二范式

消除了传递依赖关系,任何两个非主键字段之间不存在依赖关系。

<**举例**>

学生选课信息表
学号姓名性别课程
1春花计算机
2夏雪临床医学
3秋月教育学

课程信息表
课程任课教师上课地点上课时间
计算机李平北教1号楼14:00
临床医学王平北教2号楼15:00
教育学汪平南区1号楼16:00

从这两张表中我们都可以明显的发现:不管哪一字段都与表当前的主键是紧密相连的,都依赖它。比如:一个学生的学号是唯一的,当你从数据库中要查找一个学生所选的课程时,你只需使用WHERE子句指定查找学号即可查出。课程信息表也是如此。

【总结】

所以对于建好一个数据库来说,这三个范式是多么的重要啊。不仅使我们避免了大量的数据冗余,节省了存储空间,而且保持了数据的一致性。要查询不同表中的数据只需进行SELECT联合查询就可。但三范式是必须要遵守的吗?

三范式并不是必须要遵守的,它只是一种设计规范和最佳实践,可以根据具体情况进行灵活应用。在某些情况下,为了提高查询性能或满足特定需求,可能需要违反三范式的规则。但是需要注意的是,违反三范式可能会导致数据冗余、数据不一致和操作的复杂性增加,需要在设计时权衡利弊。

遵守三范式可以提高数据库的性能、数据一致性和操作的灵活性,但在实际应用中需要根据具体情况进行权衡和取舍

小编的SQL三大范式就介绍到这里,有什么不足之处欢迎补充!!

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乔努力变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值