为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就被称为范式。范式是符合某一种设计要求的总结。因此要设计一个结构合理的关系型数据库,就必须要满足下面这三大范式。

1NF (不可再分)

 1NF要求数据库的表中不能有可以被继续拆分的列,即表中的每一个属性field都具有原子性。

使数据库满足1NF的方法就是拆分列

• 不满足1NF:

姓名 班级
张三 计科1903

原因分析:

这一张表实际上就不满足1NF,因为班级这列是可以继续被拆分的。

• 满足1NF:

姓名 专业 班号
张三 计科 1903

1NF一般情况下都不会违背。

2NF (消除部分依赖)

 2NF指,在存在主键时,不能有部分依赖。(主要针对复合主键的)

 部分依赖: 一些非主属性依赖于主键的一部分,而不是主键的全部。

使数据库满足2NF的方法是拆分表。

• 不满足2NF:

订单编号 商品编号 商品名称 商品数量 商品价格 客户姓名 客户电话
0001 1 面包 10 $5 张三 130-2483-4321
0001 2 火腿 20 $3 张三 130-2483-4321
0002 2 火腿 5 $3 李四 155-1341-4521

原因分析:

表中选用(订单编号, 商品编号)联合作为联合主键

但是我们发现,不是所有属性字段都完全依赖联合主键的,它们或许只依赖主键中的一部分,这种部分依赖的关系是不满足2NF的!

这里的例子中,商品名称、商品价格这两个字段都是只依赖于(商品编号)这个字段的,也就是说它们只依赖于联合主键中的一部分。因此我们需要进行拆表!

• 满足2NF:

1.订单信息表

订单编号 客户姓名 客户电话
0001 张三 130-2483-4321
0002 李四 155-1341-4521

2.订单商品数量表

订单编号 商品编号 商品数量
0001 1 10
0001 2 20
0002 2 5

(商品数量是同时依赖于订单编号和商品编号的, 在这个表中,订单编号和商品编号仍然是作为联合主键)

3.商品信息表

商品编号 商品名称 商品价格
1 面包 $5
2 火腿 $3

3NF (消除间接依赖)

 3NF是需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关

• 不满足3NF:

学号 姓名 课程号 课程名称
13002 张三 100 语文

原因分析:

这里主键是"学号"。

直接依赖于"学号"的有"姓名"和"课程号"。

“课程名称"直接依赖于"课程号”,间接依赖于"学号"。

因此,我们需要为课程号和课程名称单独创建一个表出来,下面是结果。

• 满足3NF:

1.学生表

学号 姓名 课程号
13002 张三 100

2.课程表

课程号 课程名称
100 语文

数据库设计的三大范式(举例详解)相关推荐

  1. mysql增删改查不区分大小写吗_MySQL的增删改查语句以及数据库设计的三大范式...

    数据库设计的三大范式: 1.列的原子性,即列是不可再分的 2.表里的每一列都应该与主键有关系, 3.表里的每一列都应该与主键有直接关系, 当使用自增长列不满足2.3范式,是特殊例子,只用在解决较为复杂 ...

  2. 5、数据库设计的三大范式

    为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中,这种规则就是范式.范式是符合某一种级别的关系模式的集合.关系型数据库中的关系必须满足一定的要求,即满足不同的范式. ...

  3. 数据库设计的三大范式:详细

    在大学学习数据库的时候,不明白为什么会学习很多关系代数.设计范式的理论.但是,有了这些理论基础,在遇到问题的时候脑袋会有灵光一闪的感觉.那种感觉很像是大雾天太阳照射大地的感觉,心中一片光亮.^_^ 那 ...

  4. 数据库设计常用三大范式

    前言 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小. 目前关系数据库有六种范式:第一范式(1NF). ...

  5. 浅聊数据库设计的三大范式

    写在最前 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中,这种规则就是范式.范式是符合某一种级别的关系模式的集合.关系型数据库中的关系必须满足一定的要求,即满足不 ...

  6. 数据库设计的三大范式通俗解释

    一.三大范式通俗解释: (1)简单归纳: 第一范式(1NF):字段不可分: 第二范式(2NF):有主键,非主键字段依赖主键: 第三范式(3NF):非主键字段不能相互依赖. (2)解释: 1NF:原子性 ...

  7. 归纳:数据库设计的六个阶段详解(有这一篇就够了)

    客官进来请坐下,耐心看完收获大! 数据库设计过程的六个阶段: 1.系统需求分析阶段: 2.概念结构设计阶段: 3.逻辑结构设计阶段: 4.数据库物理设计阶段: 5.数据库实施阶段: 6.数据库运行和维 ...

  8. (转)归纳:数据库设计的六个阶段详解(有这一篇就够了)

    转自:https://blog.csdn.net/qq_39132095/article/details/103247080?utm_medium=distribute.pc_relevant.non ...

  9. 数据库设计的六个阶段详解

    相关阅读:2T架构师学习资料干货分享 来源:blog.csdn.net/sinat_21312425/article/details/51105252 按照规范设计,我们将数据库的设计过程分为六个阶段 ...

最新文章

  1. mysql 添加时间戳列
  2. 【转载】dirs、pushd、popd指令
  3. 同样是面对失败的责任:任春雷比杜一楠更有种
  4. Java基础学习需要掌握哪些内容?
  5. c++opencv显示中文_OpenCV如何入门秘籍
  6. PyTorch 1.0 中文官方教程:迁移学习教程
  7. doc.update
  8. R语言使用merge函数合并数据,如何保持原始数据顺序
  9. 解决从github下载项目速度过慢
  10. python找不同数字的个数_在Python中找到N个按位或等于K的不同数字
  11. 拓端tecdat|R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间
  12. 易用的两个OCR(图像文字识别提取)开源项目
  13. Java 简单计算器
  14. Mysql 错误1366, Incorrect string value: '\\xE6\\xB7\\xB1\\xE5\\x85\\xA5...' for column '
  15. PubMed插件:分区、影响因子和即时IF一目了然,还能秒下文献(亲测有效)
  16. Processing——码绘与手绘对比动态篇
  17. 【解决电脑】开机屏幕左键无反应,右键变加载;选择文件夹未响应,卡顿40秒后恢复;新建文件夹正常,删除移动卡顿
  18. Auto-Rooting Script(全自动提权脚本)
  19. 中文邮件格式模板、工作汇报邮件模板这样写,90%人都爱看
  20. 机器学习样本数据集,训练正负样本

热门文章

  1. 《C#妹妹和Objective-C阿姨对话录》(04)垃圾回收基础--拆迁队那点事
  2. 腾讯的网站如何检测到你的 QQ 已经登录?
  3. Druid 监控 sql监控无数据
  4. css3与android,Android开发人员不得不学习的CSS3基础
  5. MySQL时间戳转日期(年月日)
  6. Char GPT社会化的过程
  7. Go语言的type func()用法 | type func() 自定义函数类型
  8. 解决AMD处理器 android studio 无法启动模拟器的问题
  9. 树莓派基础实验29:I2C LCD1602实验
  10. PHP获取上个月当月下一个月的相对应时间的详解