知识库 知识库
首页
  • Hyperskill - Java

    • Java basic
    • Java OOP
    • 应知
    • 扩展
    • IO & Stream
    • Error & Exception
    • Algorithm & Data structure
    • Design pattern
    • Web
    • Spring boot
  • 练习题

    • 选择题 & 填空题
    • 代码题
  • Frank - Java与生活 (OOP)

    • 参考资料
    • Java基础
    • OOP上半部分
    • OOP下半部分
  • Frank - Java API进阶

    • Base API
    • Unit Test and main function
  • 学习笔记
  • 学习笔记

    • 数据库
  • Frank - MySQL删库跑路

    • 安装、连接、配置
    • 基本操作——数据库
    • 基本操作——表
    • 基本操作——数据
    • 数据类型
    • 列属性完整性
    • 数据库设计思维
    • 单表查询
    • 多表查询
  • 学习笔记

    • 其它
  • Frank - Linux现代方法

    • 必知
    • 命令
    • 技巧
  • 技术文档
  • Git
  • GitHub技巧
  • 前端
  • Khan Academy - 语法
  • Monthly
  • 阅读
  • Others
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 标签
  • 归档
GitHub (opens new window)

Jim FuckPPT

Java小学生
首页
  • Hyperskill - Java

    • Java basic
    • Java OOP
    • 应知
    • 扩展
    • IO & Stream
    • Error & Exception
    • Algorithm & Data structure
    • Design pattern
    • Web
    • Spring boot
  • 练习题

    • 选择题 & 填空题
    • 代码题
  • Frank - Java与生活 (OOP)

    • 参考资料
    • Java基础
    • OOP上半部分
    • OOP下半部分
  • Frank - Java API进阶

    • Base API
    • Unit Test and main function
  • 学习笔记
  • 学习笔记

    • 数据库
  • Frank - MySQL删库跑路

    • 安装、连接、配置
    • 基本操作——数据库
    • 基本操作——表
    • 基本操作——数据
    • 数据类型
    • 列属性完整性
    • 数据库设计思维
    • 单表查询
    • 多表查询
  • 学习笔记

    • 其它
  • Frank - Linux现代方法

    • 必知
    • 命令
    • 技巧
  • 技术文档
  • Git
  • GitHub技巧
  • 前端
  • Khan Academy - 语法
  • Monthly
  • 阅读
  • Others
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 标签
  • 归档
GitHub (opens new window)
  • 学习笔记

  • Frank - MySQL删库跑路

    • 安装连接以及配置

    • 基本操作——数据库

    • 基本操作——表

    • 基本操作——数据

    • 数据类型

    • 列属性完整性

    • 数据库设计思维

      • 数据库设计基本概念
      • 实体和实体之间的关系
      • 数据库设计三大范式
        • 数据库设计三大范式
          • 范式?
          • 是哪三个范式?
    • 单表查询

    • 多表查询

  • MySQL
  • Frank - MySQL删库跑路
  • 数据库设计思维
Jim
2022-04-24
目录

数据库设计三大范式

# 数据库设计三大范式

# 范式?

范式就是指规范。

是否使用范式,取决于项目的需求,没有统一的标准。

**范式(Normal Form)**是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。

数据库范式有六种,分别为1NF,2NF,3NF,BCNF,4NF,5N,一般在设计关系型数据库的时候,能考虑到前三者1NF、2NF、3NF就够了,能用到BCNF就已经很吊了。

# 是哪三个范式?

  • 1NF 保证每列的原子性
  • 2NF 非键字段必须依赖键字段
  • 3NF 消除传递依赖

在范式化的数据库中,每个事实数据会出现并且只出现一次;相反,在反范式化的数据库中,信息是冗余的,可能会存储在多个地方。

  • 第一范式 (1NF):属性不可分。
  • 第二范式 (2NF):1NF + 表必须有一个主键 + 非主键必须完全依赖于主键。
  • 第三范式 (3NF):2NF + 非主键列必须直接依赖于主键,不能存在传递依赖。

# 1NF 保证每列的原子性

保证列不能再被分割。

比如有一张表有如下几个字段:编号、商品名、进货、销售、备注

其中 进货 和 销售 两者都还可以分出 数量 和 单价 等等属性。显然这张表不符合1NF。

# 2NF 非键字段必须依赖键字段

要满足第二范式(2NF)必须先满足第一范式(1NF)。

任意一个字段都只依赖表中的同一个字段。一个表只用来描述一件事,说白了就是别他妈没事找事。

# 3NF 消除传递依赖

要满足第三范式(3NF)必须先满足第二范式(2NF)。

要求一个数据库表中不包含已在其它表中已包含的非主键字段。也就是说一个表不能有多余的字段,这个表中的字段该干嘛干嘛,不需要的字段就别进来瞎凑热闹。

在一些特殊情况下采用第三范式,比如,需要数据冗余来提高性能的时候。

编辑 (opens new window)
上次更新: 2022/09/26, 16:55:15
实体和实体之间的关系
select、from、dual、as、where

← 实体和实体之间的关系 select、from、dual、as、where→

最近更新
01
《挪威的森林》
04-14
02
青钢影
04-14
03
Processing strings
02-18
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Jim Frank | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式