首页 > 数据库 >数据库三范式

数据库三范式

时间:2024-08-17 11:52:15浏览次数:21  
标签:范式 CourseName 数据库 课程名称 ID 依赖于 学生 主键

数据库的范式是一套减少数据冗余和改善数据完整性的规则。

第一范式(1NF)

要求每列的原子性,即属性值不能再分解

示例:

一个包含学生信息的表,其中包含以下字段:

  • 学生ID(StudentID)
  • 学生姓名(StudentName)
  • 选修课程(Courses)

如果 Courses 字段是这样的:
学生A:数学, 英语
学生B:物理, 化学, 生物
这个设计就不符合第一范式,因为 Courses 字段包含了多个值。

调整后的设计:

  • 学生ID(StudentID)
  • 学生姓名(StudentName)
  • 课程名称(Courses)

每个学生和课程的组合占据一行,例如:

  • 学生ID:1,学生姓名:学生A,课程名称:数学
  • 学生ID:1,学生姓名:学生A,课程名称:英语
  • 学生ID:2,学生姓名:学生B,课程名称:物理
  • 学生ID:2,学生姓名:学生B,课程名称:化学
  • 学生ID:2,学生姓名:学生B,课程名称:生物

这样的设计符合第一范式,因为每个字段都只包含一个数据值,便于数据库管理和查询处理。

第二范式(2FN)

要求必须满足1NF,非主键列要完全依赖于主键。不能存在部份依赖。
也就是说每个表只代表一个对象,通常发生在主键是由多个字段组成的复合主键的情况下

示例:

一个学生课程表,包含以下字段:

  • 学生ID(StudentID)
  • 课程ID(CourseID)
  • 学生姓名(StudentName)
  • 课程名称(CourseName)

其中,(StudentID, CourseID) 是复合主键。在这个表中:
StudentName 只依赖于 StudentID(部分依赖于复合主键中的一个部分)
CourseName 只依赖于 CourseID(部分依赖于复合主键中的一个部分)

这个表不符合2NF,因为存在部分依赖。

第三范式(3FN)

要求必须满足2NF,并且所有非主键属性之间不能存在传递依赖关系。
(非主键属性不能依赖于其他非主键属性)

示例:

假设已经将上述学生课程表分解成两个2NF表:

  • 学生表(StudentID, StudentName)
  • 课程表(CourseID, CourseName, teacherName )

假设课程名称决定了授课教师,那么就存在传递依赖:
teacherName 依赖于 CourseName,而 CourseName 依赖于 CourseID

为了符合3NF,需要进一步分解:

  • 课程表(CourseID, CourseName)
  • 授课教师表(CourseName, InstructorName)

这样确保了所有非主属性只依赖于主键,且不存在任何非主属性依赖于其它非主属性的情况。

标签:范式,CourseName,数据库,课程名称,ID,依赖于,学生,主键
From: https://blog.csdn.net/aliez_ahh/article/details/141278292

相关文章

  • MySQL数据库基础
    目录1.数据库的操作1.1  创建数据库1.2查看数据库1.3选中数据库1.4删除数据库2.常用数据类型2.1数值类型2.2字符串类型2.3日期类型3.表的操作3.1创建表3.2查看所有表3.3查看表的结构3.4删除表4.内容重点总结5.练习1.数据库的操作1.1  ......
  • 【数据库】事务 | 视图 | 自定义函数创建
    1、事物及其特征事物机制的应用:淘宝订单交易,微信转账等。视图--------筛子---------过滤-------筛选想要的信息数据库只存放了视图对应的SQL语句。视图是一个虚拟的表,本质是一个虚拟的SQL命令集合。(1)创建单表视图(虽然视图里没有30的数据,但原表里插入这个30的数据......
  • MySQL数据库入门,pycharm连接数据库—详细讲解
    一.安装MySQL1.常用MySQL5.7,首先安装MySQL,(一) (二)(三)(四)(五)2.配置环境变量打开MySQL安装路径,在其中找到bin文件,复制路径,打开系统高级设置,点击环境变量,在下方找到path,将bin文件路径粘贴其中。3.检验安装是否完成win+r 输入cmd,打开命令提示符,输入指令:netstart|......
  • 坑!火山引擎云数据库 MySQL 版节点内存只增不减
    火山引擎云数据库说明文档什么是云数据库MySQL版?云数据库MySQL版是火山引擎基于开源数据库MySQL打造的弹性、可靠的在线关系型数据库服务。MySQL实例使用云原生方式部署,结合本地SSD存储类型,提供高性能读写能力;完全兼容MySQL引擎,并提供实例管理、备份恢复、日志管理......
  • Oracle数据库中,MINUS是一个关键字
    在Oracle数据库中,MINUS是一个关键字,用于执行两个SELECT语句的差集操作。MINUS操作返回在第一个SELECT语句中出现但不在第二个SELECT语句中出现的所有行。换句话说,它会从第一个查询结果中减去第二个查询结果,只保留在第一个查询结果中存在而第二个查询结果中不存在的记录。基本用法......
  • 浅看MySQL数据库
    有这么一句话:“一个不会数据库的程序员不是合格的程序员”。有点夸张,但是确是如此。透彻学习数据库是要学习好多知识,需要学的东西也是偏难的。我们今天来看数据库MySQL的一些简单基础东西,跟着小编一起来看一下吧。什么是数据库数据库(Database)是按照数据结构来组织、存储和管......
  • 数据库视图,索引,触发器
    数据库视图,索引,触发器视图mySQL中的视图是⼀种虚拟表,它是基于⼀个或多个基础表(或其他视图)的select查询结果集。虚拟表是⼀种逻辑上的表,它不实际存储数据,⽽是在查询时动态⽣成结果集。因此,视图并不是真正的表,⽽是基于⼀个或多个表的查询结果的⼀种“虚拟表”。视图可以看作......
  • 数据库存储过程
    数据库存储过程MySQL存储过程是⼀组预编译的SQL语句,可以在MySQL数据库中定义和存储,并在需要时执⾏。存储过程可以接受参数、执⾏条件判断、循环、异常处理等操作,使得开发⼈员可以把⼀系列操作组合成⼀个可重复使⽤的单元,从⽽提⾼代码的复⽤性和可维护性。存储过程......
  • 使用DBeaver(通用数据库管理工具)连接人大金仓数据库
    1、背景描述在信创的大背景下,信息技术人员开始需要频繁接触国产数据库。人大金仓数据库是国内先进的数据库产品,广泛服务于各个重点行业和关键领域,累计装机部署超百万套。2020年,人大金仓实现在国产数据库关键应用领域销售套数占比第一的市场地位。虽然人大金仓提供了官方的数据......
  • 在macOS上运行SQL Server 2022进行数据库开发
    有很多工具可用于在macOS上使用SQL进行开发,包括VSCode的mssql扩展和独立但舒适的AzureDataStudio。作为一名开发人员,您可能听说过AzureSQL数据库模拟器,并且您肯定听说过在容器中部署SQL。最近,在arm64(M1/M2)Mac上本地运行SQL容器的新选项变得可用,它使运行完整的SQLServer映......