数据库-三范式

第一范式

1 数据库所有字段都只有单一属性。
2 单一属性由基本数据类型构成。
3 数据库的表都是二维的行与列。
在这里插入图片描述
例如上面的例子就不满足第一范式,因为是可以继续拆分的,拆分为更多的属性。

第二范式

1 符合第一范式
2 表必须有个主建
3 其它字段可以由主键确定
4 二范式目的是通过拆表减少数据冗余
在这里插入图片描述
上面的表存在三个异常:

  • 插入异常,如果要新建一个系,目前这个系还没有学生则插入不了。
  • 删除异常,如果这个系的学生都被删除了,那么这个系耶就不存在了。
  • 更新异常,如果我们需要改学生的系名,则需要修改多个地方,系主任都要修改。

上面的表比如课程是由系来决定的,每个系不一样,分数则是由学号和课程共同决定的所以上面这张表可以拆分为两张表,这样主键就可以唯一确定一个属性:
在这里插入图片描述
这样拆分以后删除异常还是存在,比如学生高芳芳不存在了,那么这个时候法律系也不存在了,同时系主任依赖于系名,只有知道了系名才有系主任,所以需要进一步拆分。

第三范式

1 要求符合第二范式
2 字段要求依赖于主键,不允许间接依赖
3 第三范式的目的在于拆分实体(完善主从表)
在这里插入图片描述
三范式不是强制要求,需要根据场景进行选择,否则会出现主从表关系过多,影响SQL效率。

参考资料:https://www.itlaoqi.com/chapter.html?sid=106&cid=1610

相关推荐

  1. 数据库范式

    2024-07-14 15:56:03       48 阅读
  2. 数据库设计范式

    2024-07-14 15:56:03       43 阅读
  3. 数据库范式

    2024-07-14 15:56:03       25 阅读
  4. 数据库设计之范式

    2024-07-14 15:56:03       58 阅读
  5. 数据库范式

    2024-07-14 15:56:03       24 阅读
  6. 数据库设计规范(范式

    2024-07-14 15:56:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 15:56:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 15:56:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 15:56:03       58 阅读
  4. Python语言-面向对象

    2024-07-14 15:56:03       69 阅读

热门阅读

  1. 前端面试题日常练-day86 【面试题】

    2024-07-14 15:56:03       16 阅读
  2. 机器学习之常用优化器

    2024-07-14 15:56:03       25 阅读
  3. C++常用算法的简单总结

    2024-07-14 15:56:03       25 阅读
  4. 渗透测试 —— 揭开数字安全的隐形面纱

    2024-07-14 15:56:03       20 阅读
  5. Linux设置开机自启动脚本

    2024-07-14 15:56:03       27 阅读
  6. Visual Studio 配置记录 - 备忘

    2024-07-14 15:56:03       20 阅读
  7. P3743 小鸟的设备

    2024-07-14 15:56:03       20 阅读