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

数据库范式

时间:2024-07-09 14:35:35浏览次数:20  
标签:依赖 范式 函数 Sno 数据库 课名 属性

1 范式的基本概念

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。没有冗余的数据库未必是最好的数据库, 有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。

函数依赖

比如描述一个学生的关系,可以有学号(Sno),姓名(Sname)、系名(Sdept)等几个属性。由于一个学号对应一个学生,一个学生只在一个系学习。因此,学号确定以后,学生的姓名和其所在的系的值 也就被唯一的确定了。这种属性间的依赖关系,类似于数学中的 y=f(x),自变量x确定以后,相应的函数值y也就唯一确定了。

也就是 Sname=f(Sno),Sdept=f(Sno),即Sno函数决定Sname,Sno函数决定Sdept。或者说,Sname和Sdept函数依赖于Sno。记作 Sno→Sname,Sno→Sdept。

X→Y,Y→Z,则称为Z对X传递函数依赖。记为

X→Y,但Y不包含X,则称X→Y是非平凡的函数依赖。如:关系R(Sno, Cno, Grade),依赖关系(Sno, Cno)→Grade是非平凡函数依赖。

X→Y,但Y包含X,则称X→Y是平凡的函数依赖。如:关系R(Sno, Cno),依赖关系(Sno, Cno)→Sno,(Sno, Cno)→Cno都是平凡函数依赖。

完全函数依赖:每一个非主属性,函数依赖于主键中的全部属性,而不能仅依赖主键一部分的属性。因为主键可能有多个属性构成,比如主键有三个属性,某个非主属性仅依赖主键的三个属性中的两个,那么就不能被称为完全函数依赖。

部分函数依赖:X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖。

码(key)

关系模式R<U,F>。关系名R,一组属性U,属性组U上的一组数据依赖F。
设K为R中的属性或属性组合。若U完全函数依赖于K,则称K为R的候选码。候选码可能多于一个,则选定其中一个为主码(主键)。

例如一个学生,身份证可以唯一表示一个学生,学号也可以唯一标识一个学生,(身份证,学号)这个集合可以唯一标识一个学生。我们可以选学号来作为这个学生的主键,那么学号、(身份证、学号)就是候选码。

包含在任何一个候选码中的属性,称为主属性。不包含在任何码中的属性称为非主属性或非码属性。
最简单的情况,单个属性是码。最极端的情况,整个属性组U是码,称为全码
外码:一个属性(或属性组),它不是码,但是它别的表的码,它就是外码

第一范式(1NF)

定义:数据库表的每一列(也称为属性)都是不可分割的原子数据项

学生表(学号,姓名,系名,系主任,课名,学分,考试成绩)

第二范式(2NF)

定义: 在1NF基础上,消除 非码属性 对码的部分函数依赖

学生表(学号,姓名,身份证号,生日,系名,系主任,课名,选修内容,学分,考试场次(期中/期末),成绩)
码:学号,课名,选修内容
候选属性:学号,课名,选修内容,身份证号
对码的全部依赖:
(学号,课名,选修内容)——>(考试场次,成绩)
对码部分依赖:

  • 姓名|身份证号|学分——>(学号,课名,选修内容)
    进行拆分
  • 学生表(学号,姓名,身份证号,生日,系名,系主任)
  • 课程(课名,学分)
  • 选课(学号,课名,选修内容,考试场次,成绩)

第三范式(3NF)

定义: 在2NF基础上,消除非码属性对候选码的传递函数依赖

非码属性对候选码的传递依赖:

  • 学号 ——> 系名 系名——>系主任 => 学号——>系主任
    进行拆分:
    学生表(学号,姓名,身份证号,生日,系名)
    系表 (系名,系主任)

BCNF

  • 定义:在3NF基础上,消除主属性对码的部分函数依赖和传递函数依赖
假设仓库管理关系表为StorehouseManage(仓库ID,存储物品ID,管理员ID,数量),且有一个管理员只在一个仓库工作;
一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:
(仓库ID,存储物品ID)→(管理员ID,数量) (管理员ID,存储物品ID)→(仓库ID,数量)

在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。

  • 仓库(仓库名,管理员)
  • 库存(仓库名,物品名,数量)

4NF

  • 定义:在BCNF的基础上,消除非平凡且非函数依赖的多值依赖。
    非平凡且非函数依赖的多值关系:
    学号,课名,选修内容,考试场次,成绩

学号,课名——>选修内容 ,1对多
函数
学号,课名,选修内容——>考试场次, 多对多

进行拆分
关系表1(id1,学号,课程)
关系表2(id2,选修内容)
关系表2 (id3,id2,考试场次,成绩)

5NF

  • 定义:在4NF的基础上,消除不是由候选码所蕴含的连接依赖。

标签:依赖,范式,函数,Sno,数据库,课名,属性
From: https://www.cnblogs.com/perfectLi/p/18291770

相关文章

  • sybase数据库恢复
    Sybase数据库的恢复过程可以因不同的故障类型和数据损坏程度而有所不同。以下是一个一般性的恢复步骤和策略,但请注意,这些方法并不能保证百分之百的成功,特别是在数据严重损坏或没有适当备份的情况下。一、备份数据在进行任何恢复操作之前,首先确保对现有的数据库和相关文件进行完......
  • Interbase数据库修复
    一、准备阶段备份数据库:在进行任何修复操作之前,务必先对受损的数据库进行完整备份。这是防止在修复过程中数据进一步丢失或损坏的重要步骤。使用Interbase提供的备份工具(如gbak)或第三方备份工具进行备份。断开连接:确保没有任何程序或用户正在访问或使用该数据库,以避免在修复......
  • Firebird数据库修复
    一、前期准备断开数据库连接:确保所有与Firebird数据库的连接都已断开,避免在修复过程中发生数据冲突或损坏。备份数据库:在进行任何修复操作之前,使用Firebird提供的gbak工具或其他备份工具对数据库进行完整备份。备份文件将在修复过程中起到关键作用,以防修复失败导致数据丢失。......
  • InterBase数据库文件损坏的修复方法
    InterBase数据库是一种中级数据库,它短小精悍免维护,可以满足百万记录级别的数据库应用,又有开放源码版本,个人认为是一种比较适合中小型数据库应用环境的数据库管理系统(DBMS)。Delphi内建了对InterBase数据库的支持,因此用Delphi编写以InterBase为后台数据库的软件很是方便。在实际应......
  • 使用Mybatis框架操作数据库
    --------------idea中创建springboot项目引入Mybatis框架-----------------1、新建空项目2.创建模块3.选择springboot版本,添加mybatisframework框架和Mysqldriver驱动 4.删除多余文件 5.选择父工程中选择spring-boot版本6.选择依赖版本号(1)mybatis的起步依赖......
  • 服务器数据库OAERP报错
    一、常见原因网络问题:网络延迟、网络阻塞或网络故障都可能导致数据库连接不稳定或中断。防火墙或路由器的设置不当也可能阻止ERP系统与数据库之间的正常通信。数据库配置问题:数据库服务器的IP地址、端口号、用户名和密码等配置信息错误或不一致。数据库服务器的配置参数设置......
  • 如何解决数据库配置问题
    识别配置问题收集错误信息:首先,收集数据库配置过程中出现的所有错误信息和日志。这些信息通常会在数据库服务器的日志文件、系统日志或应用程序日志中记录。分析问题性质:分析错误信息以确定问题的性质。这可能涉及检查数据库连接问题、性能瓶颈、配置参数不当等。检查配置文......
  • mysql 误更新记录恢复 update更新字段值恢复 mysql数据库更新字段值恢复
    近日极佳mysql数据库恢复软件加入mysql的 update更新字段值的恢复例如 updatejnx_clean_ordersetno='qwertyuiop'将 jnx_clean_order 表的 no字段值 全部变成了 qwertyuiop  这种情况 1可以从 mysqlbin 日志恢复, 如果没有开启binlog 那就比较麻烦了。2......
  • Oracle数据库使用expdp/impdp导出导入数据
    背景:正式环境数据同步到测试环境,数据库名:MYDB,正式、用户:MYUSER(必须拥有SYS权限)。1、正式环境备份数据库(1)正式服务器上,cmd输入sqlplus,使用MYUSER账户登录(2)创建一个自定义的目录,用于存放导出的数据createdirectoryDATA_OUT_FILEas'E:\app\Administrator\admin\MYDB\my_dir\'......
  • oracle数据库导出数据时密码中存在特殊符号的情况处理
    oracle数据库导出指定的表数据,直接在windows的cmd命令行执行如下命令:expwz9199/""“wzz@123"”"@172.17.34.40:1521/orclfile=E:\temp\exp.dmptables=(T_User)命令详细说明:exp代表我们要进行导出操作;wz9199是用户名;wzz@123是密码;在密码两边拼接的三个双引号是为了适配密码中有......