首页 > 数据库 >MySql 范式

MySql 范式

时间:2025-01-22 09:44:56浏览次数:1  
标签:职工 范式 仓库 1NF 管理员 MySql 主键

目录
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般说来,数据库只需满足第三范式(3NF)就行了。下面用画图方式简单介绍下前三范式

三范式

  • 1NF: 字段不可分;
  • 2NF: 有主键,非主键字段依赖主键;
  • 3NF: 非主键字段不能相互依赖;
  • 解释:
    • 1NF: 原子性 字段不可再分,否则就不是关系数据库;
    • 2NF: 唯一性 一个表只说明一个事物;
    • 3NF: 每列都与主键有直接关系,不存在传递依赖;
      1NF: 无重复的列,每一列都是不可分割的基本数据项,同一 列中不能有多个值,即实体中的某个属性不能有多个值或者不 能有重复的属性。除去同类型的字段,就是无重复的列
      说明: 第一范式(1NF)是对关系模式的基本要求,不满足第 一范式(1NF)的数据库就不是关系数据库
      [694ff53cd249819dce9e2fed886bb707.png]

2NF: 属性完全依赖于主键,第二范式必须先满足第一范式, 要求表中的每个行必须可以被唯一地区分。通常为表加上一个 列,以存储各个实例的唯一标识 PK,非 PK 的字段需要与整个 PK有直接相关性
[82d8bc5830e0775bbafac78162239eee.png]


3NF: 属性不依赖于其它非主属性,满足第三范式必须先满足 第二范式。第三范式要求一个数据库表中不包含已在其它表中 已包含的非主关键字信息,非 PK 的字段间不能有从属关系
[b261d3e8835fff8b826d8f9f00f0ffb8.png]


BCNF(BC 范式)
它构建在第三范式的基础上,如果关系模型R是第一范式,且每个属性都不传递依赖于 R 的候选键,那么称 R 为 BCNF 的模式。
假设仓库管理关系表(仓库号,存储物品号,管理员号,数量),满足一个管理员只在一个仓库工作;一个仓库可以存储多种物品,则存在如下关系:
(仓库号,存储物品号)——>(管理员号,数量)
(管理员号,存储物品号)——>(仓库号,数量)
所以,(仓库号,存储物品号)和(管理员号,存储物品号)都是仓库管理关系表的候选码,表中唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:
(仓库号)——>(管理员号)
(管理员号)——>(仓库号)
即存在关键字段决定关键字段的情况,因此其不符合 BCNF。把仓库管理关系表分解为两个关系表仓库管理表(仓库号,管理员号)和仓库表(仓库号,存储物品号,数量),这样这个数据库表是符合 BCNF 的,并消除了删除异常、插入异常和更新异常。


4NF(第四范式)
设 R 是一个关系模型,D 是 R 上的多值依赖集合。如果 D 中存在凡多值依赖 X->Y 时,X 必是 R 的超键,那么称 R 是第四范式的模式。
例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中,同一个职工可能会有多个职工孩子姓名,同样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式。

拓展:各范式的关系图如下所示:

[a345cb96ef0de0f0bfaf26abb751ac72.png]

标签:职工,范式,仓库,1NF,管理员,MySql,主键
From: https://www.cnblogs.com/TMesh/p/18685072

相关文章

  • MySql 约束条件
    目录数据类型的属性约束条件的简单运用创建表清空表,并清空主键自增记录注意例1单列唯一联合唯一例2例3例4联合主键联合主键sql约束:约束用于限制加入表的数据的类型。是一种限制,它通过对表的行或列的数据做出限制,来确保表数据的完整性、唯一性可以在创建表时规定约束(通过CRE......
  • MySQL--为什么有了redo log还需要double write buffer机制?
      我们知道,数据页被加载到内存中,经过增删改一系列的操作后,并不会立即落盘,而是由后台线程选择某个合适的时机写入磁盘。在数据页尚未落盘时,如果这时MySQL突然崩溃或者断电,内存中的数据将全部丢失。这时,redolog就可以发挥其作用了,只要重放redolog就可以恢复事务。  但......
  • MySQL基础知识学习指南
    一、MySQL-DDL(DataDefinitionLanguage)在数据库管理领域,MySQL是广泛应用的关系型数据库管理系统。其中,数据定义语言(DataDefinitionLanguage,简称DDL)起着至关重要的作用,它主要用于对数据库内部对象进行创建、删除、修改等操作。本文将深入且系统地介绍MySQL中的DDL相关......
  • 升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
    在升级到MySQL8.4后,许多用户在启动数据库时遇到了一种常见错误:“io_setup()failedwithEAGAIN”。本文将深入探讨该错误的原因,并提供详细的解决方案。错误分析错误描述当你启动MySQL时,可能会在日志文件中看到以下错误信息:io_setup()failedwithEAGAIN​  这个......
  • mysql日志
    一.隔离级别1)一共4级READUNCOMMITTED:最低隔离级别,允许读取未提交的数据(脏读)。READCOMMITTED:允许读取已提交的数据,但不能重复读。REPEATABLEREAD(默认级别):保证在同一个事务中多次读取同样记录的结果是一致的。SERIALIZABLE:最高隔离级别,事务串行化执行,避免了并发......
  • MySQL
    数据查询语句(DQL-DataQueryLanguage)执行顺序:from-->where-->groupby-->select-->having-->orderby-->limit单表查询没啥好说的,了解基本的关键字用法和函数的功能即可实现快速查询。表连接内连接innerjoin只返回满足连接条件的记录外连接outerjoin左连......
  • centos死机导致mysql无法启动解决
    3306端口没被占用2.查看日志sudocat/var/log/mysqld.log从错误日志来看,MySQL启动失败的主要原因是InnoDB存储引擎的初始化失败。具体错误信息如下:复制[ERROR]InnoDB:IgnoringtheredologduetomissingMLOG_CHECKPOINTbetweenthecheckpoint111575434andthe......
  • Mysql并发控制和日志
    MySQL是一个广泛使用的关系数据库管理系统,在高并发环境中,如何有效地控制并发和管理日志至关重要。本文将详细介绍MySQL的并发控制机制和日志管理策略,以帮助开发人员和数据库管理员更好地理解和优化数据库性能。一、并发控制并发控制是指在多用户环境下管理对数据库的并发访问......
  • sqlite3 mysql每秒查询性能
     数据库的查询性能(如每秒查询次数,QPS,即QueriesPerSecond)取决于多种因素,包括数据库引擎、硬件配置、查询复杂度、数据量以及系统优化程度等。以下是对SQLite和MySQL每秒查询能力的比较和分析:SQLite每秒查询能力性能特点:SQLite是一个轻量级、文件系统级的数......
  • MySQL架构总览_查询执行流程_SQL解析顺序
    目录MySQL架构总览查询执行流程连接处理结果SQL解析顺序准备工作FROMWHEREGROUPBYHAVINGSELECTORDERBYLIMIT总结参考书籍MySQL架构总览架构最好看图,再配上必要的说明文字。下图根据参考书籍中一图为原本,再在其上添加上了自己的理解。从上图中我们可以看到,整个架构分为两......