Oracle使用(十)_数据库设计三范式

数据库设计遵守三范式作用:减少数据冗余

第一范式(列不可分,保证列的原子性):如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式
比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,
那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个
部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样
设计才算满足了数据库的第一范式
下表就不符合第一范式:


image.png

比如当我们统计海淀区有多少人时,会发现颗粒度太大,还需要继续处理address数据
地址列可以继续拆分为省,市,区,这样很容易统计

第二范式(确保每列只和主键完全依赖,不能部分依赖):第二范式是在第一范式基础上继续减少数据冗余,把跟主键不是唯一相关数据抽离到新的表
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相
关(主要针对联合主键而言),也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。多种类型意味着可以单独抽取为一张表
下表符合第一范式,但是数据存在冗余
两个河北邯郸数据一样,存了两份,不符合第二范式,同时包含用户类型和地址类型

image.png

下表也不符合第二范式


image.png

数据不存在部分依赖的情况,称为符合第二范式


image.png

总之满足第二范式:就是看冗余的列能不能单独抽出一张表,如果可以那就抽取,直到不能再抽取,那么就符合第二范式

第三范式(不存在传递依赖):要求一个数据库表中不能包含已在其它表中已包含的非主关键字信息(划重点:不包含其他表中的非关键信息)
学生表中包含了班级表中班级编号同时包含班级名称和班级信息,就是出现了传递依赖。
实际上只要包含主关键信息班级编号即可,而把非主关键信息存放在新表中即可

image.png

总结一下:


image.png

表的依赖关系(一张表对应一个实体,说白了就是对象间的关系):
一对一:用户和身份证
一对多:一个人有多双鞋
多对多 : 老师和学生

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

推荐阅读更多精彩内容

  • 数据库设计三大范式 一个设计合理的表,能给服务器性能带来很大的提高,因此如何设计出比较合理的表就比较重要了,设计范...
    勤奋的派大星阅读 2,290评论 0 0
  • 1 数据库范式 1.1 为什么要范式 为什么需要数据库范式呢,因为必须保证数据库设计的合理性 数据库设计关系整个系...
    上善若泪阅读 495评论 0 1
  • MySql设计与优化系列笔记:一、数据库设计三范式与反范式二、MySql表设计与优化 第一范式: 1、数据库的所有...
    我问你瓜保熟吗阅读 861评论 0 1
  • 数据库设计三大范式为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称...
    左希阅读 1,134评论 0 1
  • 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次...
    海边的蜗牛ng阅读 2,260评论 0 2