数据库三范式

SQL
范式越高,冗余越低。
第一范式(1NF):确保每一列的原子性
如果每一列都是不可再分的最小数据单元,则满足第一范式。

id 地址
1 中国广东
2 中国云南

上面的表地址字段其实可以继续分:

id 国家 省份
1 中国 广东
2 中国 云南

但是具体地址到底要不要拆分 还要看具体情形,比如看看将来会不会按国家或者省市进行分类汇总或者排序,如果需要,最好就拆,如果不需要而仅仅起字符串的作用,可以不拆,操作起来更方便。
第二范式:非键字段必须依赖于键字段
如果一个关系满足1NF,并且除了主键以外的其它列,都依赖与该主键,则满足二范式(2NF),第二范式要求每个表只描述一件事。
例如:

字段 例子
订单编号 001
产品编号 a011
订购日期 2017-4-8
价格 ¥30

而实际上,产品编号与订单编号并没有明确的关系,订购日期与订单编号有关系,因为一旦订单编号确定下来了,订购日期也确定了,价格与订单编号也没有直接关系,而与产品有关,所以上面的表实际上可以拆分:
订单表:

订单编号
001
日期
2017-4-8

产品表:

产品编号 a011
价格 ¥30

第三范式:在1NF基础上,除了主键以外的其它列都不传递依赖于主键列,或者说: 任何非主属性不依赖于其它非主属性
(在2NF基础上消除传递依赖)
例如:

字段 例子
订单编号 001
订购日期 2017-4-8
顾客编号 a01
顾客姓名 howard

上面的满足第一和第二范式,但是不满足第三范式,原因如下:
通过顾客编号可以确定顾客姓名,通过顾客姓名可以确定顾客编号,即在这个订单表里,这两个字段存在传递依赖,只需要一个就够了。
又如:

主键 学号 姓名 成绩
1 111 howard 90
2 222 tom 90

上面的表,学号和姓名存在传递依赖,因为(学号,姓名)->成绩,学号->成绩,姓名->成绩。所以学号和姓名有一个冗余了,只需要保留一个。
文章转自https://blog.csdn.net/zymx14/article/details/69789326

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关键重点1NF:> 强调的是列的原子性,即列不能够再分成其他几列。 2NF:> 首先必须满足 1NF,另外还必须包...
    yeying12321阅读 267评论 0 0
  • 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次...
    海边的蜗牛ng阅读 2,322评论 0 2
  • 理解数据库的几种键和几个范式 一、第一范式(1NF) 要求: 每一个属性都不能再分割,都是原子项。 二、第二范式(...
    _昨夜雨疏风骤阅读 261评论 0 0
  • 每个人在实现目标、获得成功的路上,都需要借助他人的力量。美国《成功》(Success)杂志的一篇文章建议人们结交以...
    思小舒阅读 902评论 0 0
  • 和他在一起,是因为一个温暖却又稚嫩的理由——晚上生着病送我回家。我不知道是否曾经某君有过和我相同的理由去答应...
    吃面包的树阅读 211评论 0 0