数据库设计三大范式

为了建立冗余较小,结构合理的数据库,设计数据库时必须遵循一定的规则,在关系型数据库中,范式是符合一种设计要求的总结,要想设计一个合理的关系型数据库,必须满足一定的范式

第一范式(确保每一列都是原子性)

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。
在这里插入图片描述

第二范式(确保表中每列都跟主键相关)

第二范式是在第一范式的基础上更进一层,第二范式需要确保数据库表中的每一列都和主键有关,如不能只与主键的一部分有关(针对联合主键来说),也就是说一个数据库表中,一个表只能保存一种数据,不可以把多种数据保存在同一张表中

比如要设计一个订单信息表,因为订单中可能会有多个商品,所以如果把订单号和商品号作为联合主键,如下图所示

在这里插入图片描述
这样就产生了一个问题,上述表中的商品名称、单位、价格只跟商品id有关而跟订单id无关,这就违反了第二范式的设计原则。

如果把订单表进行拆分,把商品信息分离到另外一种表中,把订单表也分离到另外一张表中就很完美了,如下图所示
在这里插入图片描述
在这里插入图片描述

第三范式(确保每列都和主键列直接相关,而不是间接相关)

在第二范式基础上,任何非主键不依赖于其它非主键(在第二范式基础上消除传递依赖)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值