SQL Server三大范式

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 通常我们在创建数据库需要一定的规则去遵守,在RDBMS中,这种规则就是范式。而规范化目的就是使结构更合理,消除存储异常,使数据冗余尽量小。便于插入、删除和更新。使得它符合第一范式的规则,然后是第二范式,最后是第三范式。一般来说,数据库只需满足第三范式就行了。

【前言】


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


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


【正文】


一、第一范式


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


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


字段不可在分

<**举例**>


现有一个学生家庭信息表


学生家庭信息表

学号 姓名 性别 家庭住址
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三大范式就介绍到这里,有什么不足之处欢迎补充!

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
5月前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
111 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
4月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
60 6
|
4月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
371 1
|
3月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
470 0
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
305 3
|
4月前
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。
|
4月前
|
SQL 存储 关系型数据库
关系型数据库SQL Server学习
【7月更文挑战第4天】
77 2