数据库三范式 范式是具有最小冗余的表结构

范式是具有最小冗余的表结构

第一范式(1st NF -列都是不可再分)
第一范式的目标是确保每列的原子性:如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

个人看法:即是实体的属性不可再分,一个字段一个属性

6837b6a64d953831eaea69d4bfa86f7342e.jpg

第二范式(2nd NF-每个表只描述一件事情)
首先满足第一范式,并且表中非主键列不存在对主键的部分依赖。 第二范式要求每个表只描述一件事情。

个人看法:确保每一张表代表一个实体,没有两个实体混为一张表

fd358cde8f583994934c2132c9636ffb3ca.jpg

第三范式(3rd NF- 不存在对非主键列的传递依赖)
第三范式定义是,满足第二范式,并且表中的列不存在对非主键列的传递依赖。除了主键订单编号外,顾客姓名依赖于非主键顾客编号。

个人看法1:每张表有其他实体的外键可以,但不能有其他实体的属性,要关联出来就连接表

个人看法2:可以有适度冗余,避免连接表,提高查询效率

bd2b9b8ac48dd03836f260be779a4f59a19.jpg

 

转载于:https://my.oschina.net/u/2277088/blog/3023837

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库范式是指: 1NF(第一范式):所有属性都是原子性的,不可再分。 2NF(第二范式):满足1NF的基础上,非主键属性完全依赖于主键。 3NF(第范式):满足2NF的基础上,非主键属性之间存在传递依赖。 下面以一个学生选课系统为例,说明如何用满足范式: 学生(Student): | 学号 | 姓名 | 性别 | 生日 | | ---- | ---- | ---- | --------- | | 001 | 张 | 男 | 1999/1/1 | | 002 | 李四 | 女 | 2000/2/2 | | 003 | 王五 | 男 | 2001/3/3 | 课程(Course): | 课程编号 | 课程名称 | 学分 | | -------- | -------- | ---- | | 001 | 语文 | 3 | | 002 | 数学 | 4 | | 003 | 英语 | 2 | 选课(Selection): | 学号 | 课程编号 | 成绩 | | ---- | -------- | ---- | | 001 | 001 | 80 | | 001 | 002 | 90 | | 002 | 003 | 85 | | 003 | 001 | 70 | 以上已经满足了第一范式,每个属性都是原子性的。但是存在冗余数据,例如选课中的学号和课程编号在多个记录中重复出现。为了满足第二范式,可以将选课拆分为两张: 学生选课(StudentSelection): | 学号 | 课程编号 | 成绩 | | ---- | -------- | ---- | | 001 | 001 | 80 | | 001 | 002 | 90 | | 002 | 003 | 85 | | 003 | 001 | 70 | 课程(Course): | 课程编号 | 课程名称 | 学分 | | -------- | -------- | ---- | | 001 | 语文 | 3 | | 002 | 数学 | 4 | | 003 | 英语 | 2 | 现在每个都有一个主键,学生选课的主键是学号和课程编号的组合,课程的主键是课程编号。非主键属性都完全依赖于主键。但是还存在传递依赖,例如学生中的姓名属性和性别属性都依赖于学号,而不是直接依赖于主键。为了满足第范式,可以将学生也拆分为两张: 学生(Student): | 学号 | 生日 | | ---- | --------- | | 001 | 1999/1/1 | | 002 | 2000/2/2 | | 003 | 2001/3/3 | 学生信息(StudentInfo): | 学号 | 姓名 | 性别 | | ---- | ---- | ---- | | 001 | 张 | 男 | | 002 | 李四 | 女 | | 003 | 王五 | 男 | 现在每个都满足了第范式,不存在冗余数据和传递依赖

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值