关系数据库设计三范式

为了建立冗余小,结构合理的数据库,设计数据库时必须遵循一定的规则,在关系数据库中这种规则叫做范式。

范式是符合某种设计要求的总结。

要设计一个结构合理的数据表,那么就必须满足一定的设计范式。

1、第一范式:确保每列都是原子的

按照业务场景的需求,确保每列都是不可再拆分的,原子列

比如,数据表中有“地址”列,而该列在实际应用中,需要展示省份、城市等明细,那么我们在设计数据表时,就不能用一个大的“地址列”来充当,而是应该将“地址”列,拆分成“省份”、“城市”等原子列,这样才能满足需求。

这样也就满足了数据库设计的第一范式,可见,满足第一范式的数据表,确实更合理。

满足第一范式,可以提高数据库操作的效率。

2、第二范式:确保每列都和主键相关

第二范式是在第一范式的基础上更进了一层,即:确保每列都要和主键相关,而不是和部分主键相关(复合主键的情况)。

比如:我们有一个订单表,那么订单表中的非主键列,一定是和订单编号相关的。如果将用户信息都放入订单表,那么这样的设计就很糟糕。

满足第二范式,可以减少数据表无用的冗余,避免存储浪费,同时可以确保数据表关系脉络更加清晰。

3、第三范式,确保每列都和主键直接相关而非间接相关

第三范式是在第二范式的基础上更进了一层,其要求每列都和主键直接相关,而非间接相关

比如:订单表中有:订单号(主键)、价格、购买人、购买人性别。我们分析可得:订单号和购买人ID相关,而购买人的性别和订单号没有直接关系,其关系是:订单号-》购买人-》购买人性别,这样的设计就不满足第三范式,我们需要将购买人性别放入用户表,然后通过购买人做关联。

满足第三范式,可以减少数据表的字段冗余。

总结:

一般情况下,OLTP类的系统,数据库设计还是尽量满足数据库设计范式,这样可以提高交易处理效率。

但是对于OLAP类的系统,或者数据分析类场景比较多的系统,在数据库设计时,往往无需完全遵循数据库设计范式,而是使用宽表(增加冗余)来满足查询分析。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值