数据库设计三大范式

前言

最近在知乎上看要怎么才能打好java的基础,看到有大佬回答说对于数据库要懂得数据库设计三大范式。故此查询了一些资料,做了些整理。
一个好的数据库结构,能够有效减小数据冗余,减少增删改中出现的问题,提高开发人员对数据库的操作。深入理解数据库设计的三范式,对于设计“健壮的数据库“十分有必要。数据库三范式是设计数据库 时参考的准则,接下来做一个简单的介绍。

第一范式

数据的原子性

数据库表的每一列都应该是不可再分割的最小基础数据项。同一个字段,不能有多重含义,即实体中的某个属性不能有代表多个类型的值。

栗子

设计用户信息表时,一般都会存储手机号码,
这里写图片描述
如果像上表这样设计,就会出现歧义,因为电话可以分为手机、固话、工作电话、家庭电话等等多种,若设计一个字段,无法知道到底是哪一类的电话。
所以应该要讲电话这个字段再进行细分,
这里写图片描述
如上表这样设计,不仅数据清晰,而且开发人员获取的时候也能按需获取。

第二范式

消除部分依赖

在满足第一范式的基础上,每个非主键字段都应该只依赖于主键字段。
主键只要接触过数据库的都知道,不再赘述。依赖主键的意思,就是比如字段a为主键,他能决定字段b的值,但是b不能决定a,称b依赖a。
先说明下部分依赖的意思,一般主键都是一个字段,但有时候有两字字段,我们定位字段a和字段b,还有两个非主键属性字段c和字段b,部分依赖的情况就是:c依赖于a,但是b依赖于b。
部分依赖的缺点:
1、数据冗余
2、数据操作复杂,增删改容易出现问题

第三范式

消除依赖传递

所谓依赖传递,举个栗子,如下表所示:
这里写图片描述
根据该表,有如下关系:
学号–>姓名,性别,系号–>决定系名,宿舍号–>决定宿舍电话,也有 学号–>系名,学号–>宿舍电话。
像上表这样设计,不仅数据关系复杂,而且数据冗余,开发人员更是难以操作,一不小心就会造成数据异常。
实际情况下,完全能够将这张表分开设计为三张表:
这里写图片描述

总结

以上就是数据库三范式了,一般设计数据库的时候都应该想到。但是,这个三范式并不是金科玉律,实际还是要根据需求来定的,如果硬是为了符合三范式,把原本简单的设计方式弄得复杂了,反而是适得其反了。这只是一个参考标准罢了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值